/* * Copyright (c) 2020, Texas Instruments Incorporated * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * * Neither the name of Texas Instruments Incorporated nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /*!**************************************************************************** * @file dl_lfss.h * @brief LFSS(Low Frequency Sub-System) Peripheral Interface * @defgroup LFSS Low Frequeuncy Sub-System (LFSS) * * @anchor ti_devices_msp_dl_lfss_Overview * # Overview * The Low Frequency Sub-System (LFSS) Driver Library allows full configuration * of the MSPM0 LFSS module. * The LFSS IP enables a separate, dedicated battery supply used for * maintaining continuous operation of real time clock (RTC), tamper detection * input / output (TIO) module, an independent asynchronous watchdog timer * (IWDT) and a small scratchpad memory storage (SPM). * *
****************************************************************************** */ /** @addtogroup LFSS * @{ */ #ifndef ti_dl_dl_lfss__include #define ti_dl_dl_lfss__include #include #include #include #include #if defined(__MSPM0_HAS_LFSS__) || defined(DOXYGEN__INCLUDE) #ifdef __cplusplus extern "C" { #endif /* clang-format off */ /** @addtogroup DL_LFSS_TAMPERIO_INTERRUPT * @{ */ /** * @brief LFSS Tamper IO 0 interrupt */ #define DL_LFSS_TAMPERIO_INTERRUPT_TAMPERIO_0 (LFSS_CPU_INT_IMASK_TIO0_SET) /** * @brief LFSS Tamper IO 1 interrupt */ #define DL_LFSS_TAMPERIO_INTERRUPT_TAMPERIO_1 (LFSS_CPU_INT_IMASK_TIO1_SET) /** * @brief LFSS Tamper IO 2 interrupt */ #define DL_LFSS_TAMPERIO_INTERRUPT_TAMPERIO_2 (LFSS_CPU_INT_IMASK_TIO2_SET) /** * @brief LFSS Tamper IO 3 interrupt */ #define DL_LFSS_TAMPERIO_INTERRUPT_TAMPERIO_3 (LFSS_CPU_INT_IMASK_TIO3_SET) /** * @brief LFSS Tamper IO 4 interrupt */ #define DL_LFSS_TAMPERIO_INTERRUPT_TAMPERIO_4 (LFSS_CPU_INT_IMASK_TIO4_SET) /** * @brief LFSS Tamper IO 5 interrupt */ #define DL_LFSS_TAMPERIO_INTERRUPT_TAMPERIO_5 (LFSS_CPU_INT_IMASK_TIO6_SET) /** * @brief LFSS Tamper IO 6 interrupt */ #define DL_LFSS_TAMPERIO_INTERRUPT_TAMPERIO_6 (LFSS_CPU_INT_IMASK_TIO6_SET) /** * @brief LFSS Tamper IO 7 interrupt */ #define DL_LFSS_TAMPERIO_INTERRUPT_TAMPERIO_7 (LFSS_CPU_INT_IMASK_TIO7_SET) /** * @brief LFSS Tamper IO 8 interrupt */ #define DL_LFSS_TAMPERIO_INTERRUPT_TAMPERIO_8 (LFSS_CPU_INT_IMASK_TIO8_SET) /** * @brief LFSS Tamper IO 9 interrupt */ #define DL_LFSS_TAMPERIO_INTERRUPT_TAMPERIO_9 (LFSS_CPU_INT_IMASK_TIO9_SET) /** * @brief LFSS Tamper IO 10 interrupt */ #define DL_LFSS_TAMPERIO_INTERRUPT_TAMPERIO_10 (LFSS_CPU_INT_IMASK_TIO10_SET) /** * @brief LFSS Tamper IO 11 interrupt */ #define DL_LFSS_TAMPERIO_INTERRUPT_TAMPERIO_11 (LFSS_CPU_INT_IMASK_TIO11_SET) /** * @brief LFSS Tamper IO 12 interrupt */ #define DL_LFSS_TAMPERIO_INTERRUPT_TAMPERIO_12 (LFSS_CPU_INT_IMASK_TIO12_SET) /** * @brief LFSS Tamper IO 13 interrupt */ #define DL_LFSS_TAMPERIO_INTERRUPT_TAMPERIO_13 (LFSS_CPU_INT_IMASK_TIO13_SET) /** * @brief LFSS Tamper IO 14 interrupt */ #define DL_LFSS_TAMPERIO_INTERRUPT_TAMPERIO_14 (LFSS_CPU_INT_IMASK_TIO14_SET) /** * @brief LFSS Tamper IO 15 interrupt */ #define DL_LFSS_TAMPERIO_INTERRUPT_TAMPERIO_15 (LFSS_CPU_INT_IMASK_TIO15_SET) /** @}*/ /** @addtogroup DL_LFSS_TAMPERIO_EVENT * @{ */ /** * @brief LFSS Tamper IO 0 event */ #define DL_LFSS_TAMPERIO_EVENT_TAMPERIO_0 (LFSS_GEN_EVENT_IMASK_TIO0_SET) /** * @brief LFSS Tamper IO 1 event */ #define DL_LFSS_TAMPERIO_EVENT_TAMPERIO_1 (LFSS_GEN_EVENT_IMASK_TIO1_SET) /** * @brief LFSS Tamper IO 2 event */ #define DL_LFSS_TAMPERIO_EVENT_TAMPERIO_2 (LFSS_GEN_EVENT_IMASK_TIO2_SET) /** * @brief LFSS Tamper IO 3 event */ #define DL_LFSS_TAMPERIO_EVENT_TAMPERIO_3 (LFSS_GEN_EVENT_IMASK_TIO3_SET) /** * @brief LFSS Tamper IO 4 event */ #define DL_LFSS_TAMPERIO_EVENT_TAMPERIO_4 (LFSS_GEN_EVENT_IMASK_TIO4_SET) /** * @brief LFSS Tamper IO 5 event */ #define DL_LFSS_TAMPERIO_EVENT_TAMPERIO_5 (LFSS_GEN_EVENT_IMASK_TIO5_SET) /** * @brief LFSS Tamper IO 6 event */ #define DL_LFSS_TAMPERIO_EVENT_TAMPERIO_6 (LFSS_GEN_EVENT_IMASK_TIO6_SET) /** * @brief LFSS Tamper IO 7 event */ #define DL_LFSS_TAMPERIO_EVENT_TAMPERIO_7 (LFSS_GEN_EVENT_IMASK_TIO7_SET) /** * @brief LFSS Tamper IO 8 event */ #define DL_LFSS_TAMPERIO_EVENT_TAMPERIO_8 (LFSS_GEN_EVENT_IMASK_TIO8_SET) /** * @brief LFSS Tamper IO 9 event */ #define DL_LFSS_TAMPERIO_EVENT_TAMPERIO_9 (LFSS_GEN_EVENT_IMASK_TIO9_SET) /** * @brief LFSS Tamper IO 10 event */ #define DL_LFSS_TAMPERIO_EVENT_TAMPERIO_10 (LFSS_GEN_EVENT_IMASK_TIO10_SET) /** * @brief LFSS Tamper IO 11 event */ #define DL_LFSS_TAMPERIO_EVENT_TAMPERIO_11 (LFSS_GEN_EVENT_IMASK_TIO11_SET) /** * @brief LFSS Tamper IO 12 event */ #define DL_LFSS_TAMPERIO_EVENT_TAMPERIO_12 (LFSS_GEN_EVENT_IMASK_TIO12_SET) /** * @brief LFSS Tamper IO 13 event */ #define DL_LFSS_TAMPERIO_EVENT_TAMPERIO_13 (LFSS_GEN_EVENT_IMASK_TIO13_SET) /** * @brief LFSS Tamper IO 14 event */ #define DL_LFSS_TAMPERIO_EVENT_TAMPERIO_14 (LFSS_GEN_EVENT_IMASK_TIO14_SET) /** * @brief LFSS Tamper IO 15 event */ #define DL_LFSS_TAMPERIO_EVENT_TAMPERIO_15 (LFSS_GEN_EVENT_IMASK_TIO15_SET) /** @}*/ /** * @brief Individual Tamper IO pin enable */ #define LFSS_TAMPER_IO_PIN_ENABLE 0x1 /** * @brief Individual Tamper IO pin mask */ #define LFSS_TAMPER_IO_PIN_MASK 0x1 /*! @enum DL_LFSS_TAMPERIO */ typedef enum { /*! LFSS Tamper IO 0 */ DL_LFSS_TAMPERIO_0 = 0x0000, /*! LFSS Tamper IO 1 */ DL_LFSS_TAMPERIO_1 = 0x0001, /*! LFSS Tamper IO 2 */ DL_LFSS_TAMPERIO_2 = 0x0002, /*! LFSS Tamper IO 3 */ DL_LFSS_TAMPERIO_3 = 0x0003, /*! LFSS Tamper IO 4 */ DL_LFSS_TAMPERIO_4 = 0x0004, /*! LFSS Tamper IO 5 */ DL_LFSS_TAMPERIO_5 = 0x0005, /*! LFSS Tamper IO 6 */ DL_LFSS_TAMPERIO_6 = 0x0006, /*! LFSS Tamper IO 7 */ DL_LFSS_TAMPERIO_7 = 0x0007, /*! LFSS Tamper IO 8 */ DL_LFSS_TAMPERIO_8 = 0x0008, /*! LFSS Tamper IO 9 */ DL_LFSS_TAMPERIO_9 = 0x0009, /*! LFSS Tamper IO 10 */ DL_LFSS_TAMPERIO_10 = 0x000A, /*! LFSS Tamper IO 11 */ DL_LFSS_TAMPERIO_11 = 0x000B, /*! LFSS Tamper IO 12 */ DL_LFSS_TAMPERIO_12 = 0x000C, /*! LFSS Tamper IO 13 */ DL_LFSS_TAMPERIO_13 = 0x000D, /*! LFSS Tamper IO 14 */ DL_LFSS_TAMPERIO_14 = 0x000E, /*! LFSS Tamper IO 15 */ DL_LFSS_TAMPERIO_15 = 0x000F, } DL_LFSS_TAMPERIO; /*! @enum DL_LFSS_TAMPERIO_VALUE */ typedef enum { /*! LFSS Tamper IO Value is 0 */ DL_LFSS_TAMPERIO_VALUE_0 = 0x00000, /*! LFSS Tamper IO Value is 1 */ DL_LFSS_TAMPERIO_VALUE_1 = 0x0001, } DL_LFSS_TAMPERIO_VALUE; /*! @enum DL_LFSS_TAMPERIO_OUTPUT_SOURCE */ typedef enum { /*! The TOUT register is the source for the tamper output (TOUT) control */ DL_LFSS_TAMPERIO_OUTPUT_SOURCE_TOUT = LFSS_TIOCTL_TOUTSEL_TOUT, /*! LFCLK is the source for the tamper output (TOUT) control */ DL_LFSS_TAMPERIO_OUTPUT_SOURCE_LFCLK = LFSS_TIOCTL_TOUTSEL_LFCLKEXT, /*! The heart beat generator is the source for the tamper output (TOUT) * control */ DL_LFSS_TAMPERIO_OUTPUT_SOURCE_HEARTBEAT = LFSS_TIOCTL_TOUTSEL_HEARTBEAT, /*! The time stamp event is the source for the tamper output (TOUT) * control */ DL_LFSS_TAMPERIO_OUTPUT_SOURCE_TIME_STAMP_EVENT = LFSS_TIOCTL_TOUTSEL_TSEVTSTAT, } DL_LFSS_TAMPERIO_OUTPUT_SOURCE; /*! @enum DL_LFSS_TAMPERIO_GLITCH_FILTER_WIDTH */ typedef enum { /*! No filtering on the Tamper IO beyond CDS synchronization sample */ DL_LFSS_TAMPERIO_GLITCH_FILTER_WIDTH_NONE = LFSS_TIOCTL_FILTEREN_NO_FLT, /*! Pulses on the Tamper IO less than 30us are filtered */ DL_LFSS_TAMPERIO_GLITCH_FILTER_WIDTH_30_USEC = LFSS_TIOCTL_FILTEREN_FLT_1, /*! Pulses on the Tamper IO less than 100us are filtered */ DL_LFSS_TAMPERIO_GLITCH_FILTER_WIDTH_100_USEC = LFSS_TIOCTL_FILTEREN_FLT_2, /*! Pulses on the Tamper IO less than 200us are filtered */ DL_LFSS_TAMPERIO_GLITCH_FILTER_WIDTH_200_USEC = LFSS_TIOCTL_FILTEREN_FLT_3, } DL_LFSS_TAMPERIO_GLITCH_FILTER_WIDTH; /*! @enum DL_LFSS_TAMPERIO_EDGE_DETECTION_POLARITY */ typedef enum { /*! Edge detection polarity is disabled */ DL_LFSS_TAMPERIO_EDGE_DETECTION_POLARITY_DISABLE = LFSS_TIOCTL_POLARITY_DISABLE, /*! Enables rising edge detection of input event */ DL_LFSS_TAMPERIO_EDGE_DETECTION_POLARITY_RISE = LFSS_TIOCTL_POLARITY_RISE, /*! Enables falling edge detection of input event */ DL_LFSS_TAMPERIO_EDGE_DETECTION_POLARITY_FALL = LFSS_TIOCTL_POLARITY_FALL, /*! Enables both rising and falling edge detection of input event */ DL_LFSS_TAMPERIO_EDGE_DETECTION_POLARITY_BOTH = LFSS_TIOCTL_POLARITY_BOTH, } DL_LFSS_TAMPERIO_EDGE_DETECTION_POLARITY; /*! @enum DL_LFSS_TAMPERIO_MODE */ typedef enum { /*! The Tamper IO is set to tamper mode */ DL_LFSS_TAMPERIO_MODE_TAMPER = LFSS_TIOCTL_IOMUX_TAMPER, /*! The Tamper IO is set to IOMUX mode */ DL_LFSS_TAMPERIO_MODE_IOMUX = LFSS_TIOCTL_IOMUX_IOMUX } DL_LFSS_TAMPERIO_MODE; /*! @enum DL_LFSS_HEARTBEAT_INTERVAL */ typedef enum { /*! Heart beat generator interval is 0.125 sec */ DL_LFSS_HEARTBEAT_INTERVAL_0_125_SEC = LFSS_HEARTBEAT_HBINTERVAL_HBINT0P125, /*! Heart beat generator interval is 0.25 sec */ DL_LFSS_HEARTBEAT_INTERVAL_0_25_SEC = LFSS_HEARTBEAT_HBINTERVAL_HBINT0P25, /*! Heart beat generator interval is 0.5 sec */ DL_LFSS_HEARTBEAT_INTERVAL_05_SEC = LFSS_HEARTBEAT_HBINTERVAL_HBINT0P5, /*! Heart beat generator interval is 1 sec */ DL_LFSS_HEARTBEAT_INTERVAL_1_SEC = LFSS_HEARTBEAT_HBINTERVAL_HBINT1, /*! Heart beat generator interval is 2 sec */ DL_LFSS_HEARTBEAT_INTERVAL_2_SEC = LFSS_HEARTBEAT_HBINTERVAL_HBINT2, /*! Heart beat generator interval is 4 sec */ DL_LFSS_HEARTBEAT_INTERVAL_4_SEC = LFSS_HEARTBEAT_HBINTERVAL_HBINT4, /*! Heart beat generator interval is 8 sec */ DL_LFSS_HEARTBEAT_INTERVAL_8_SEC = LFSS_HEARTBEAT_HBINTERVAL_HBINT8, /*! Heart beat generator interval is 16 sec */ DL_LFSS_HEARTBEAT_INTERVAL_16_SEC = LFSS_HEARTBEAT_HBINTERVAL_HBINT16, } DL_LFSS_HEARTBEAT_INTERVAL; /*! @enum DL_LFSS_HEARTBEAT_PULSE_WIDTH */ typedef enum { /*! Heart beat generator pulse width is 1 msec */ DL_LFSS_HEARTBEAT_PULSE_WIDTH_1_MSEC = LFSS_HEARTBEAT_HBWIDTH_HBPWDTH1, /*! Heart beat generator pulse width is 2 msec */ DL_LFSS_HEARTBEAT_PULSE_WIDTH_2_MSEC = LFSS_HEARTBEAT_HBWIDTH_HBPWDTH2, /*! Heart beat generator pulse width is 4 msec */ DL_LFSS_HEARTBEAT_PULSE_WIDTH_4_MSEC = LFSS_HEARTBEAT_HBWIDTH_HBPWDTH4, /*! Heart beat generator pulse width is 8 msec */ DL_LFSS_HEARTBEAT_PULSE_WIDTH_8_MSEC = LFSS_HEARTBEAT_HBWIDTH_HBPWDTH8, /*! Heart beat generator pulse width is 16 msec */ DL_LFSS_HEARTBEAT_PULSE_WIDTH_16_MSEC = LFSS_HEARTBEAT_HBWIDTH_HBPWDTH16, /*! Heart beat generator pulse width is 32 msec */ DL_LFSS_HEARTBEAT_PULSE_WIDTH_32_MSEC = LFSS_HEARTBEAT_HBWIDTH_HBPWDTH32, /*! Heart beat generator pulse width is 64 msec */ DL_LFSS_HEARTBEAT_PULSE_WIDTH_64_MSEC = LFSS_HEARTBEAT_HBWIDTH_HBPWDTH64, /*! Heart beat generator pulse width is 128 msec */ DL_LFSS_HEARTBEAT_PULSE_WIDTH_128_MSEC = LFSS_HEARTBEAT_HBWIDTH_HBPWDTH128, } DL_LFSS_HEARTBEAT_PULSE_WIDTH; /*! @enum DL_LFSS_HEARTBEAT_MODE */ typedef enum { /*! Heart beat generator mode is disabled */ DL_LFSS_HEARTBEAT_MODE_DISABLED = LFSS_HEARTBEAT_HBMODE_HB_DIS, /*! Heart beat generator mode is always enabled */ DL_LFSS_HEARTBEAT_MODE_ALWAYS_ON = LFSS_HEARTBEAT_HBMODE_HB_ALLWAYS, /*! Heart beat generator mode is enabled when time stamp event is detected */ DL_LFSS_HEARTBEAT_MODE_TIME_STAMP = LFSS_HEARTBEAT_HBMODE_HB_TS, /*! Heart beat generator mode is enabled when the main power supply fails */ DL_LFSS_HEARTBEAT_MODE_POWER_FAIL = LFSS_HEARTBEAT_HBMODE_HB_VDDFAIL, } DL_LFSS_HEARTBEAT_MODE; /*! @enum DL_LFSS_TAMPERIO_IIDX */ typedef enum { /*! LFSS Tamper interrupt index for Tamper IO 0 */ DL_LFSS_TAMPERIO_IIDX_TAMPER_IO_0 = LFSS_CPU_INT_IIDX_STAT_TIO0, /*! LFSS Tamper interrupt index for Tamper IO 1 */ DL_LFSS_TAMPERIO_IIDX_TAMPER_IO_1 = LFSS_CPU_INT_IIDX_STAT_TIO1, /*! LFSS Tamper interrupt index for Tamper IO 2 */ DL_LFSS_TAMPERIO_IIDX_TAMPER_IO_2 = LFSS_CPU_INT_IIDX_STAT_TIO2, /*! LFSS Tamper interrupt index for Tamper IO 3 */ DL_LFSS_TAMPERIO_IIDX_TAMPER_IO_3 = LFSS_CPU_INT_IIDX_STAT_TIO3, /*! LFSS Tamper interrupt index for Tamper IO 4 */ DL_LFSS_TAMPERIO_IIDX_TAMPER_IO_4 = LFSS_CPU_INT_IIDX_STAT_TIO4, /*! LFSS Tamper interrupt index for Tamper IO 5 */ DL_LFSS_TAMPERIO_IIDX_TAMPER_IO_5 = LFSS_CPU_INT_IIDX_STAT_TIO5, /*! LFSS Tamper interrupt index for Tamper IO 6 */ DL_LFSS_TAMPERIO_IIDX_TAMPER_IO_6 = LFSS_CPU_INT_IIDX_STAT_TIO6, /*! LFSS Tamper interrupt index for Tamper IO 7 */ DL_LFSS_TAMPERIO_IIDX_TAMPER_IO_7 = LFSS_CPU_INT_IIDX_STAT_TIO7, /*! LFSS Tamper interrupt index for Tamper IO 8 */ DL_LFSS_TAMPERIO_IIDX_TAMPER_IO_8 = LFSS_CPU_INT_IIDX_STAT_TIO8, /*! LFSS Tamper interrupt index for Tamper IO 9 */ DL_LFSS_TAMPERIO_IIDX_TAMPER_IO_9 = LFSS_CPU_INT_IIDX_STAT_TIO9, /*! LFSS Tamper interrupt index for Tamper IO 10 */ DL_LFSS_TAMPERIO_IIDX_TAMPER_IO_10 = LFSS_CPU_INT_IIDX_STAT_TIO10, /*! LFSS Tamper interrupt index for Tamper IO 11 */ DL_LFSS_TAMPERIO_IIDX_TAMPER_IO_11 = LFSS_CPU_INT_IIDX_STAT_TIO11, /*! LFSS Tamper interrupt index for Tamper IO 12 */ DL_LFSS_TAMPERIO_IIDX_TAMPER_IO_12 = LFSS_CPU_INT_IIDX_STAT_TIO12, /*! LFSS Tamper interrupt index for Tamper IO 13 */ DL_LFSS_TAMPERIO_IIDX_TAMPER_IO_13 = LFSS_CPU_INT_IIDX_STAT_TIO13, /*! LFSS Tamper interrupt index for Tamper IO 14 */ DL_LFSS_TAMPERIO_IIDX_TAMPER_IO_14 = LFSS_CPU_INT_IIDX_STAT_TIO14, /*! LFSS Tamper interrupt index for Tamper IO 15 */ DL_LFSS_TAMPERIO_IIDX_TAMPER_IO_15 = LFSS_CPU_INT_IIDX_STAT_TIO15, } DL_LFSS_TAMPERIO_IIDX; /*! @enum DL_LFSS_SCRATCHPAD_MEM_WORD */ typedef enum { /*! LFSS Scratch Pad memory word 0 */ DL_LFSS_SCRATCHPAD_MEM_WORD_0 = 0x0000, /*! LFSS Scratch Pad memory word 1 */ DL_LFSS_SCRATCHPAD_MEM_WORD_1 = 0x0001, /*! LFSS Scratch Pad memory word 2 */ DL_LFSS_SCRATCHPAD_MEM_WORD_2 = 0x0002, /*! LFSS Scratch Pad memory word 3 */ DL_LFSS_SCRATCHPAD_MEM_WORD_3 = 0x0003, /*! LFSS Scratch Pad memory word 4 */ DL_LFSS_SCRATCHPAD_MEM_WORD_4 = 0x0004, /*! LFSS Scratch Pad memory word 5 */ DL_LFSS_SCRATCHPAD_MEM_WORD_5 = 0x0005, /*! LFSS Scratch Pad memory word 6 */ DL_LFSS_SCRATCHPAD_MEM_WORD_6 = 0x0006, /*! LFSS Scratch Pad memory word 7 */ DL_LFSS_SCRATCHPAD_MEM_WORD_7 = 0x0007, } DL_LFSS_SCRATCHPAD_MEM_WORD; /*! @enum DL_LFSS_SCRATCHPAD_MEM_BYTE */ typedef enum { /*! LFSS Scratch Pad memory byte 0 of the given Scratch Pad memory word */ DL_LFSS_SCRATCHPAD_MEM_BYTE_0 = 0x0000, /*! LFSS Scratch Pad memory byte 1 of the given Scratch Pad memory word */ DL_LFSS_SCRATCHPAD_MEM_BYTE_1 = 0x0001, /*! LFSS Scratch Pad memory byte 2 of the given Scratch Pad memory word */ DL_LFSS_SCRATCHPAD_MEM_BYTE_2 = 0x0002, /*! LFSS Scratch Pad memory byte 3 of the given Scratch Pad memory word */ DL_LFSS_SCRATCHPAD_MEM_BYTE_3 = 0x0003, } DL_LFSS_SCRATCHPAD_MEM_BYTE; /*! @enum DL_LFSS_IWDT_CLOCK_DIVIDE */ typedef enum { /*! WDT Clock divide by 1 */ DL_LFSS_IWDT_CLOCK_DIVIDE_1 = 0x00000000, /*! WDT Clock divide by 2 */ DL_LFSS_IWDT_CLOCK_DIVIDE_2 = 0x00000001, /*! WDT Clock divide by 3 */ DL_LFSS_IWDT_CLOCK_DIVIDE_3 = 0x00000002, /*! WDT Clock divide by 4 */ DL_LFSS_IWDT_CLOCK_DIVIDE_4 = 0x00000003, /*! WDT Clock divide by 5 */ DL_LFSS_IWDT_CLOCK_DIVIDE_5 = 0x00000004, /*! WDT Clock divide by 6 */ DL_LFSS_IWDT_CLOCK_DIVIDE_6 = 0x00000005, /*! WDT Clock divide by 7 */ DL_LFSS_IWDT_CLOCK_DIVIDE_7 = 0x00000006, /*! WDT Clock divide by 8 */ DL_LFSS_IWDT_CLOCK_DIVIDE_8 = 0x00000007 } DL_LFSS_IWDT_CLOCK_DIVIDE; /*! @enum DL_LFSS_IWDT_TIMER_PERIOD */ typedef enum { /*! WDT 2^6 timer period count */ DL_LFSS_IWDT_TIMER_PERIOD_6_BITS = LFSS_WDTCTL_PER_PER_EN_6, /*! WDT 2^8 timer period count */ DL_LFSS_IWDT_TIMER_PERIOD_8_BITS = LFSS_WDTCTL_PER_PER_EN_8, /*! WDT 2^10 timer period count */ DL_LFSS_IWDT_TIMER_PERIOD_10_BITS = LFSS_WDTCTL_PER_PER_EN_10, /*! WDT 2^12 timer period count */ DL_LFSS_IWDT_TIMER_PERIOD_12_BITS = LFSS_WDTCTL_PER_PER_EN_12, /*! WDT 2^15 timer period count */ DL_LFSS_IWDT_TIMER_PERIOD_15_BITS = LFSS_WDTCTL_PER_PER_EN_15, /*! WDT 2^18 timer period count */ DL_LFSS_IWDT_TIMER_PERIOD_18_BITS = LFSS_WDTCTL_PER_PER_EN_18, /*! WDT 2^21 timer period count */ DL_LFSS_IWDT_TIMER_PERIOD_21_BITS = LFSS_WDTCTL_PER_PER_EN_21, /*! WDT 2^25 timer period count */ DL_LFSS_IWDT_TIMER_PERIOD_25_BITS = LFSS_WDTCTL_PER_PER_EN_25 } DL_LFSS_IWDT_TIMER_PERIOD; /* clang-format on */ /** * @brief Enable output inversion for the specified Tamper IO * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] tamperIO Specifies the tamper IO to configure. * One of @ref DL_LFSS_TAMPERIO. */ __STATIC_INLINE void DL_LFSS_TamperIO_enableOutputInversion( LFSS_Regs *lfss, DL_LFSS_TAMPERIO tamperIO) { lfss->IPSPECIFIC_TIO.TIOCTL[(uint32_t) tamperIO] |= LFSS_TIOCTL_OUTINV_ENABLE; } /** * @brief Checks if output inversion is enabled for the specified Tamper IO * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] tamperIO Specifies the tamper IO to configure. * One of @ref DL_LFSS_TAMPERIO * * @return Returns if output inversion is enabled * * @retval true Output inversion for the Tamper I/O is enabled * @retval false Output inversion for the Tamper I/O is disabled */ __STATIC_INLINE bool DL_LFSS_TamperIO_isOutputInversionEnabled( const LFSS_Regs *lfss, DL_LFSS_TAMPERIO tamperIO) { return ((lfss->IPSPECIFIC_TIO.TIOCTL[(uint32_t) tamperIO] & LFSS_TIOCTL_OUTINV_MASK) == LFSS_TIOCTL_OUTINV_ENABLE); } /** * @brief Disable output inversion for the specified Tamper IO * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] tamperIO Specifies the tamper IO to configure. * One of @ref DL_LFSS_TAMPERIO */ __STATIC_INLINE void DL_LFSS_TamperIO_disableOutputInversion( LFSS_Regs *lfss, DL_LFSS_TAMPERIO tamperIO) { lfss->IPSPECIFIC_TIO.TIOCTL[(uint32_t) tamperIO] &= ~(LFSS_TIOCTL_OUTINV_MASK); } /** * @brief Selects the source for the tamper output (TOUT) control for * the specified Tamper IO * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] tamperIO Specifies the tamper IO to configure. * One of @ref DL_LFSS_TAMPERIO * @param[in] source The source for the tamper output control. * One of @ref DL_LFSS_TAMPERIO_OUTPUT_SOURCE. */ __STATIC_INLINE void DL_LFSS_TamperIO_setOutputSource(LFSS_Regs *lfss, DL_LFSS_TAMPERIO tamperIO, DL_LFSS_TAMPERIO_OUTPUT_SOURCE source) { DL_Common_updateReg(&lfss->IPSPECIFIC_TIO.TIOCTL[(uint32_t) tamperIO], (uint32_t) source, LFSS_TIOCTL_TOUTSEL_MASK); } /** * @brief Gets the source for the tamper output (TOUT) control for * the specified Tamper IO * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] tamperIO Specifies the tamper IO. * One of @ref DL_LFSS_TAMPERIO * * @return The output source of the tamper IO * * @retval One of @ref DL_LFSS_TAMPERIO_OUTPUT_SOURCE */ __STATIC_INLINE DL_LFSS_TAMPERIO_OUTPUT_SOURCE DL_LFSS_TamperIO_getOutputSource( const LFSS_Regs *lfss, DL_LFSS_TAMPERIO tamperIO) { return ((DL_LFSS_TAMPERIO_OUTPUT_SOURCE)( lfss->IPSPECIFIC_TIO.TIOCTL[(uint32_t) tamperIO] & LFSS_TIOCTL_TOUTSEL_MASK)); } /** * @brief Selects the filter width for the digital glitch filter for * the specified Tamper IO * * The tamper event detection allows to configure one or more tamper IO’s to * trigger a timestamp event and to generate an interrupt to the CPU. To * minimize false triggers, a digital filter circuit is inserted into the IO * path. Only pulses that are longer than the configured filter width will be * registered as a tamper event. * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] tamperIO Specifies the tamper IO to configure. * One of @ref DL_LFSS_TAMPERIO * @param[in] width The width of the digital glitch filter. Pulses * smaller than this width will be filtered. * One of @ref DL_LFSS_TAMPERIO_GLITCH_FILTER_WIDTH. */ __STATIC_INLINE void DL_LFSS_TamperIO_setGlitchFilterWidth(LFSS_Regs *lfss, DL_LFSS_TAMPERIO tamperIO, DL_LFSS_TAMPERIO_GLITCH_FILTER_WIDTH width) { DL_Common_updateReg(&lfss->IPSPECIFIC_TIO.TIOCTL[(uint32_t) tamperIO], (uint32_t) width, LFSS_TIOCTL_FILTEREN_MASK); } /** * @brief Gets the filter width for the digital glitch filter for * the specified Tamper IO * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] tamperIO Specifies the tamper IO. * One of @ref DL_LFSS_TAMPERIO * * @return The digital glitch filter width * * @retval One of @ref DL_LFSS_TAMPERIO_GLITCH_FILTER_WIDTH */ __STATIC_INLINE DL_LFSS_TAMPERIO_GLITCH_FILTER_WIDTH DL_LFSS_TamperIO_getGlitchFilterWidth( const LFSS_Regs *lfss, DL_LFSS_TAMPERIO tamperIO) { return ((DL_LFSS_TAMPERIO_GLITCH_FILTER_WIDTH)( lfss->IPSPECIFIC_TIO.TIOCTL[(uint32_t) tamperIO] & LFSS_TIOCTL_FILTEREN_MASK)); } /** * @brief Selects the edge detection polarity for the specified Tamper IO * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] tamperIO Specifies the tamper IO to configure. * One of @ref DL_LFSS_TAMPERIO * @param[in] polarity The edge detection polarity. * One of @ref DL_LFSS_TAMPERIO_EDGE_DETECTION_POLARITY. */ __STATIC_INLINE void DL_LFSS_TamperIO_setEdgeDetectionPolarity(LFSS_Regs *lfss, DL_LFSS_TAMPERIO tamperIO, DL_LFSS_TAMPERIO_EDGE_DETECTION_POLARITY polarity) { DL_Common_updateReg(&lfss->IPSPECIFIC_TIO.TIOCTL[(uint32_t) tamperIO], (uint32_t) polarity, LFSS_TIOCTL_POLARITY_MASK); } /** * @brief Gets the edge detection polarity for the specified Tamper IO * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] tamperIO Specifies the tamper IO. * One of @ref DL_LFSS_TAMPERIO * * @return The edge detection polarity for the specified Tamper IO * * @retval One of @ref DL_LFSS_TAMPERIO_EDGE_DETECTION_POLARITY */ __STATIC_INLINE DL_LFSS_TAMPERIO_EDGE_DETECTION_POLARITY DL_LFSS_TamperIO_getEdgeDetectionPolarity( const LFSS_Regs *lfss, DL_LFSS_TAMPERIO tamperIO) { return ((DL_LFSS_TAMPERIO_EDGE_DETECTION_POLARITY)( lfss->IPSPECIFIC_TIO.TIOCTL[(uint32_t) tamperIO] & LFSS_TIOCTL_POLARITY_MASK)); } /** * @brief Enable internal pull-up resistor for the specified Tamper IO * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] tamperIO Specifies the tamper IO to configure. * One of @ref DL_LFSS_TAMPERIO. */ __STATIC_INLINE void DL_LFSS_TamperIO_enableInternalPullUp( LFSS_Regs *lfss, DL_LFSS_TAMPERIO tamperIO) { lfss->IPSPECIFIC_TIO.TIOCTL[(uint32_t) tamperIO] |= LFSS_TIOCTL_PIPU_ENABLE; } /** * @brief Checks if internal pull-up resistor is enabled for the specified * Tamper IO * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] tamperIO Specifies the tamper IO to configure. * One of @ref DL_LFSS_TAMPERIO * * @return Returns the internal pull-up resistor enabled status * * @retval true Internal pull-up resistor for the Tamper I/O is enabled * @retval false Internal pull-up resistor for the Tamper I/O is disabled */ __STATIC_INLINE bool DL_LFSS_TamperIO_isInternalPullUpEnabled( const LFSS_Regs *lfss, DL_LFSS_TAMPERIO tamperIO) { return ((lfss->IPSPECIFIC_TIO.TIOCTL[(uint32_t) tamperIO] & LFSS_TIOCTL_PIPU_MASK) == LFSS_TIOCTL_PIPU_ENABLE); } /** * @brief Disable internal pull-up resistor for the specified Tamper IO * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] tamperIO Specifies the tamper IO to configure. * One of @ref DL_LFSS_TAMPERIO */ __STATIC_INLINE void DL_LFSS_TamperIO_disableInternalPullUp( LFSS_Regs *lfss, DL_LFSS_TAMPERIO tamperIO) { lfss->IPSPECIFIC_TIO.TIOCTL[(uint32_t) tamperIO] &= ~(LFSS_TIOCTL_PIPU_MASK); } /** * @brief Enable internal pull-down resistor for the specified Tamper IO * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] tamperIO Specifies the tamper IO to configure. * One of @ref DL_LFSS_TAMPERIO. */ __STATIC_INLINE void DL_LFSS_TamperIO_enableInternalPullDown( LFSS_Regs *lfss, DL_LFSS_TAMPERIO tamperIO) { lfss->IPSPECIFIC_TIO.TIOCTL[(uint32_t) tamperIO] |= LFSS_TIOCTL_PIPD_ENABLE; } /** * @brief Checks if internal pull-down resistor is enabled for the specified * Tamper IO * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] tamperIO Specifies the tamper IO to configure. * One of @ref DL_LFSS_TAMPERIO * * @return Returns the internal pull-down resistor enabled status * * @retval true Internal pull-down resistor for the Tamper I/O is enabled * @retval false Internal pull-down resistor for the Tamper I/O is disabled */ __STATIC_INLINE bool DL_LFSS_TamperIO_isInternalPullDownEnabled( const LFSS_Regs *lfss, DL_LFSS_TAMPERIO tamperIO) { return ((lfss->IPSPECIFIC_TIO.TIOCTL[(uint32_t) tamperIO] & LFSS_TIOCTL_PIPD_MASK) == LFSS_TIOCTL_PIPD_ENABLE); } /** * @brief Disable internal pull-down resistor for the specified Tamper IO * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] tamperIO Specifies the tamper IO to configure. * One of @ref DL_LFSS_TAMPERIO */ __STATIC_INLINE void DL_LFSS_TamperIO_disableInternalPullDown( LFSS_Regs *lfss, DL_LFSS_TAMPERIO tamperIO) { lfss->IPSPECIFIC_TIO.TIOCTL[(uint32_t) tamperIO] &= ~(LFSS_TIOCTL_PIPD_MASK); } /** * @brief Enable input path for the specified Tamper IO * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] tamperIO Specifies the tamper IO to configure. * One of @ref DL_LFSS_TAMPERIO. */ __STATIC_INLINE void DL_LFSS_TamperIO_enableInput( LFSS_Regs *lfss, DL_LFSS_TAMPERIO tamperIO) { lfss->IPSPECIFIC_TIO.TIOCTL[(uint32_t) tamperIO] |= LFSS_TIOCTL_INENA_ENABLE; } /** * @brief Checks if input is enabled for the specified Tamper IO * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] tamperIO Specifies the tamper IO to configure. * One of @ref DL_LFSS_TAMPERIO * * @return Returns the input enabled status * * @retval true Input for the Tamper I/O is enabled * @retval false Input for the Tamper I/O is disabled */ __STATIC_INLINE bool DL_LFSS_TamperIO_isInputEnabled( const LFSS_Regs *lfss, DL_LFSS_TAMPERIO tamperIO) { return ((lfss->IPSPECIFIC_TIO.TIOCTL[(uint32_t) tamperIO] & LFSS_TIOCTL_INENA_MASK) == LFSS_TIOCTL_INENA_ENABLE); } /** * @brief Disable input path for the specified Tamper IO * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] tamperIO Specifies the tamper IO to configure. * One of @ref DL_LFSS_TAMPERIO */ __STATIC_INLINE void DL_LFSS_TamperIO_disableInput( LFSS_Regs *lfss, DL_LFSS_TAMPERIO tamperIO) { lfss->IPSPECIFIC_TIO.TIOCTL[(uint32_t) tamperIO] &= ~(LFSS_TIOCTL_INENA_MASK); } /** * @brief Selects the mode for the specified Tamper IO * * The tamper IOs have two modes of operation: * - In IOMUX mode (@ref DL_LFSS_TAMPERIO_MODE_IOMUX), the tamper IO input * and output path are connected to the SoC IOMUX module and the IO can * be used as a second function. * - In tamper mode (@ref DL_LFSS_TAMPERIO_MODE_TAMPER), the tamper IO is * completely controlled by the VBAT IP and will remain functional * during the power loss of the main supply or during SHUTDOWN mode. * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] tamperIO Specifies the tamper IO to configure. * One of @ref DL_LFSS_TAMPERIO * @param[in] mode The mode for the specified tamper IO. * One of @ref DL_LFSS_TAMPERIO_MODE. */ __STATIC_INLINE void DL_LFSS_TamperIO_setMode( LFSS_Regs *lfss, DL_LFSS_TAMPERIO tamperIO, DL_LFSS_TAMPERIO_MODE mode) { DL_Common_updateReg(&lfss->IPSPECIFIC_TIO.TIOCTL[(uint32_t) tamperIO], (uint32_t) mode, LFSS_TIOCTL_IOMUX_MASK); } /** * @brief Gets the mode for the specified Tamper IO * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] tamperIO Specifies the tamper IO. * One of @ref DL_LFSS_TAMPERIO * * @return The mode for the specified Tamper IO * * @retval One of @ref DL_LFSS_TAMPERIO_MODE */ __STATIC_INLINE DL_LFSS_TAMPERIO_MODE DL_LFSS_TamperIO_getMode( const LFSS_Regs *lfss, DL_LFSS_TAMPERIO tamperIO) { return ((DL_LFSS_TAMPERIO_MODE)( lfss->IPSPECIFIC_TIO.TIOCTL[(uint32_t) tamperIO] & LFSS_TIOCTL_IOMUX_MASK)); } /** * @brief Enable data output for the specified Tamper IO * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] tamperIO Specifies the tamper IO to configure. * One of @ref DL_LFSS_TAMPERIO. */ __STATIC_INLINE void DL_LFSS_TamperIO_enableOutput( LFSS_Regs *lfss, DL_LFSS_TAMPERIO tamperIO) { volatile uint32_t *pReg = &lfss->IPSPECIFIC_TIO.TOE3_0; /* Point to correct base register */ pReg = (uint32_t *) ((uint8_t *) pReg + (uint8_t)(4 * (tamperIO / 4))); /* Set just the one bit for the specified tamper IO */ *pReg |= LFSS_TAMPER_IO_PIN_ENABLE << (8 * (tamperIO % 4)); } /** * @brief Disable data output for the specified Tamper IO * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] tamperIO Specifies the tamper IO to configure. * One of @ref DL_LFSS_TAMPERIO. */ __STATIC_INLINE void DL_LFSS_TamperIO_disableOutput( LFSS_Regs *lfss, DL_LFSS_TAMPERIO tamperIO) { volatile uint32_t *pReg = &lfss->IPSPECIFIC_TIO.TOE3_0; /* Point to correct base register */ pReg = (uint32_t *) ((uint8_t *) pReg + (uint8_t)(4 * (tamperIO / 4))); /* Clear just the one bit for the specified tamper IO */ *pReg &= ~(LFSS_TAMPER_IO_PIN_ENABLE << (8 * (tamperIO % 4))); } /** * @brief Checks if data output for the specified Tamper IO is enabled * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] tamperIO Specifies the tamper IO. * One of @ref DL_LFSS_TAMPERIO * * @return If data output for the specified Tamper IO is enabled * * @retval true Data output for the tamper IO is enabled * @retval false Data output for the tamper IO is disabled */ __STATIC_INLINE uint32_t DL_LFSS_TamperIO_isOutputEnabled( LFSS_Regs *lfss, DL_LFSS_TAMPERIO tamperIO) { volatile uint32_t *pReg = &lfss->IPSPECIFIC_TIO.TOE3_0; /* Point to correct base register */ pReg = (uint32_t *) ((uint8_t *) pReg + (uint8_t)(4 * (tamperIO / 4))); volatile uint32_t pinMask = LFSS_TAMPER_IO_PIN_MASK << (8 * (tamperIO % 4)); volatile uint32_t enableMask = LFSS_TAMPER_IO_PIN_ENABLE << (8 * (tamperIO % 4)); /* Get just the one bit for the specified tamper IO */ return ((*pReg & pinMask) == enableMask); } /** * @brief Enable data output value as zero for the specified Tamper IO * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] tamperIO Specifies the tamper IO to configure. * One of @ref DL_LFSS_TAMPERIO. * @param[in] outVal The data value to set the tamper IO output to. * One of @ref DL_LFSS_TAMPERIO_VALUE. */ __STATIC_INLINE void DL_LFSS_TamperIO_setOutputValue( LFSS_Regs *lfss, DL_LFSS_TAMPERIO tamperIO, DL_LFSS_TAMPERIO_VALUE outVal) { volatile uint32_t *pReg = &lfss->IPSPECIFIC_TIO.TOUT3_0; /* Point to correct base register */ pReg = (uint32_t *) ((uint8_t *) pReg + (uint8_t)(4 * (tamperIO / 4))); volatile uint32_t valueMask = outVal << (8 * (tamperIO % 4)); volatile uint32_t pinMask = LFSS_TAMPER_IO_PIN_MASK << (8 * (tamperIO % 4)); DL_Common_updateReg(pReg, valueMask, pinMask); } /** * @brief Gets the output data value for the specified Tamper IO * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] tamperIO Specifies the tamper IO. * One of @ref DL_LFSS_TAMPERIO * * @return The output data value for the specified tamper IO * * @retval One of @ref DL_LFSS_TAMPERIO_VALUE */ __STATIC_INLINE DL_LFSS_TAMPERIO_VALUE DL_LFSS_TamperIO_getOutputValue( LFSS_Regs *lfss, DL_LFSS_TAMPERIO tamperIO) { volatile uint32_t *pReg = &lfss->IPSPECIFIC_TIO.TOUT3_0; /* Point to correct base register */ pReg = (uint32_t *) ((uint8_t *) pReg + (uint8_t)(4 * (tamperIO / 4))); volatile uint32_t pinMask = LFSS_TAMPER_IO_PIN_MASK << (8 * (tamperIO % 4)); uint32_t outVal = (*pReg & pinMask) >> (8 * (tamperIO % 4)); return (DL_LFSS_TAMPERIO_VALUE)(outVal); } /** * @brief Gets the input data value for the specified Tamper IO * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] tamperIO Specifies the tamper IO. * One of @ref DL_LFSS_TAMPERIO * * @return The input data value for the specified tamper IO * * @retval One of @ref DL_LFSS_TAMPERIO_VALUE */ __STATIC_INLINE DL_LFSS_TAMPERIO_VALUE DL_LFSS_TamperIO_getInputValue( const LFSS_Regs *lfss, DL_LFSS_TAMPERIO tamperIO) { const volatile uint32_t *pReg = &lfss->IPSPECIFIC_TIO.TIN3_0; /* Point to correct base register */ pReg = (uint32_t *) ((uint8_t *) pReg + (uint8_t)(4 * (tamperIO / 4))); volatile uint32_t pinMask = LFSS_TAMPER_IO_PIN_MASK << (8 * (tamperIO % 4)); uint32_t inputVal = (*pReg & pinMask) >> (8 * (tamperIO % 4)); return (DL_LFSS_TAMPERIO_VALUE)(inputVal); } /** * @brief Sets the interval for the heart beat generator * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] interval The interval of the heart beat generator. * One of @ref DL_LFSS_HEARTBEAT_INTERVAL */ __STATIC_INLINE void DL_LFSS_TamperIO_setHeartBeatInterval( LFSS_Regs *lfss, DL_LFSS_HEARTBEAT_INTERVAL interval) { DL_Common_updateReg(&lfss->IPSPECIFIC_TIO.HEARTBEAT, (uint32_t) interval, LFSS_HEARTBEAT_HBINTERVAL_MASK); } /** * @brief Gets the interval for the heart beat generator * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * * @return The interval for the heart beat generator. * * @retval One of @ref DL_LFSS_HEARTBEAT_INTERVAL */ __STATIC_INLINE DL_LFSS_HEARTBEAT_INTERVAL DL_LFSS_TamperIO_getHeartBeatInterval(const LFSS_Regs *lfss) { uint32_t interval = lfss->IPSPECIFIC_TIO.HEARTBEAT & LFSS_HEARTBEAT_HBINTERVAL_MASK; return (DL_LFSS_HEARTBEAT_INTERVAL)(interval); } /** * @brief Sets the pulse width for the heart beat generator * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] width The pulse width of the heart beat generator. * One of @ref DL_LFSS_HEARTBEAT_PULSE_WIDTH */ __STATIC_INLINE void DL_LFSS_TamperIO_setHeartBeatPulseWidth( LFSS_Regs *lfss, DL_LFSS_HEARTBEAT_PULSE_WIDTH width) { DL_Common_updateReg(&lfss->IPSPECIFIC_TIO.HEARTBEAT, (uint32_t) width, LFSS_HEARTBEAT_HBWIDTH_MASK); } /** * @brief Gets the pulse width for the heart beat generator * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * * @return The pulse width for the heart beat generator. * * @retval One of @ref DL_LFSS_HEARTBEAT_PULSE_WIDTH */ __STATIC_INLINE DL_LFSS_HEARTBEAT_PULSE_WIDTH DL_LFSS_TamperIO_getHeartBeatPulseWidth(const LFSS_Regs *lfss) { uint32_t width = (lfss->IPSPECIFIC_TIO.HEARTBEAT & LFSS_HEARTBEAT_HBWIDTH_MASK); return (DL_LFSS_HEARTBEAT_PULSE_WIDTH)(width); } /** * @brief Sets the mode for the heart beat generator * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] mode The mode of the heart beat generator. * One of @ref DL_LFSS_HEARTBEAT_MODE */ __STATIC_INLINE void DL_LFSS_TamperIO_setHeartBeatMode( LFSS_Regs *lfss, DL_LFSS_HEARTBEAT_MODE mode) { DL_Common_updateReg(&lfss->IPSPECIFIC_TIO.HEARTBEAT, (uint32_t) mode, LFSS_HEARTBEAT_HBMODE_MASK); } /** * @brief Gets the pulse mode for the heart beat generator * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * * @return The pulse mode for the heart beat generator. * * @retval One of @ref DL_LFSS_HEARTBEAT_MODE */ __STATIC_INLINE DL_LFSS_HEARTBEAT_MODE DL_LFSS_TamperIO_getHeartBeatMode( const LFSS_Regs *lfss) { uint32_t mode = (lfss->IPSPECIFIC_TIO.HEARTBEAT & LFSS_HEARTBEAT_HBMODE_MASK); return (DL_LFSS_HEARTBEAT_MODE)(mode); } /** * @brief Enable write protection lock of the TIOCTL and HEARTBEAT * registers from accidental updates * * When enabled, the TIOCTL and HEARTBEAT registers will have read-only access. * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral */ __STATIC_INLINE void DL_LFSS_TamperIO_enableWriteProtectLock(LFSS_Regs *lfss) { lfss->IPSPECIFIC_TIO.TIOLOCK = (LFSS_TIOLOCK_PROTECT_SET | LFSS_TIOLOCK_KEY_UNLOCK_W); } /** * @brief Checks if write protection lock of the TIOCTL and HEARTBEAT * registers is enabled for the specified Tamper IO * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * * @return Returns the enabled status of the write protection lock * * @retval true Write protection lock is enabled * @retval false Write protection lock is disabled */ __STATIC_INLINE bool DL_LFSS_TamperIO_isWriteProtectLockEnabled( const LFSS_Regs *lfss) { return ((lfss->IPSPECIFIC_TIO.TIOLOCK & LFSS_TIOLOCK_PROTECT_MASK) == LFSS_TIOLOCK_PROTECT_SET); } /** * @brief Disable write protection lock of the TIOCTL and HEARTBEAT * registers * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral */ __STATIC_INLINE void DL_LFSS_TamperIO_disableWriteProtectLock(LFSS_Regs *lfss) { lfss->IPSPECIFIC_TIO.TIOLOCK = (LFSS_TIOLOCK_PROTECT_CLR | LFSS_TIOLOCK_KEY_UNLOCK_W); } /** * @brief Enables the Watchdog module * * @param lfss Pointer to the register overlay for the peripheral */ __STATIC_INLINE void DL_LFSS_IWDT_enableModule(LFSS_Regs *lfss) { lfss->IPSPECIFIC_WDT.WDTEN = (LFSS_WDTEN_KEY_UNLOCK_W | LFSS_WDTEN_ENABLE_SET); } /** * @brief Disables the Watchdog module * * @param lfss Pointer to the register overlay for the peripheral */ __STATIC_INLINE void DL_LFSS_IWDT_disableModule(LFSS_Regs *lfss) { lfss->IPSPECIFIC_WDT.WDTEN = (LFSS_WDTEN_KEY_UNLOCK_W | LFSS_WDTEN_ENABLE_CLR); } /** * @brief Returns if Watchdog module is on * * @param lfss Pointer to the register overlay for the peripheral * * @return true Watchdog is enabled * @return false Watchdog is disabled */ __STATIC_INLINE bool DL_LFSS_IWDT_isModuleEnabled(const LFSS_Regs *lfss) { return ((lfss->IPSPECIFIC_WDT.WDTEN & LFSS_WDTEN_ENABLE_MASK) == LFSS_WDTEN_ENABLE_SET); } /** * @brief Enables the Watchdog free run control * * When enabled, the Watchdog will continue to free run and ignores the state * of the CPU halted debug state * * @param lfss Pointer to the register overlay for the peripheral */ __STATIC_INLINE void DL_LFSS_IWDT_enableFreeRun(LFSS_Regs *lfss) { lfss->IPSPECIFIC_WDT.WDTDBGCTL = LFSS_WDTDBGCTL_FREE_RUN; } /** * @brief Disables the Watchdog free run control * * @param lfss Pointer to the register overlay for the peripheral */ __STATIC_INLINE void DL_LFSS_IWDT_disableFreeRun(LFSS_Regs *lfss) { lfss->IPSPECIFIC_WDT.WDTDBGCTL = LFSS_WDTDBGCTL_FREE_STOP; } /** * @brief Returns if Watchdog free run control is enabled * * @param lfss Pointer to the register overlay for the peripheral * * @return true Watchdog free run control is enabled * @return false Watchdog free run control is disabled */ __STATIC_INLINE bool DL_LFSS_IWDT_isFreeRunEnabled(const LFSS_Regs *lfss) { return ((lfss->IPSPECIFIC_WDT.WDTDBGCTL & LFSS_WDTDBGCTL_FREE_MASK) == LFSS_WDTDBGCTL_FREE_RUN); } /** * @brief Sets the clock divider for the WDT module * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] divider The WDT clock divider to set. * One of @ref DL_LFSS_IWDT_CLOCK_DIVIDE. */ __STATIC_INLINE void DL_LFSS_IWDT_setClockDivider( LFSS_Regs *lfss, DL_LFSS_IWDT_CLOCK_DIVIDE divider) { DL_Common_updateReg(&lfss->IPSPECIFIC_WDT.WDTCTL, ((uint32_t) divider | LFSS_WDTCTL_KEY_UNLOCK_W), LFSS_WDTCTL_CLKDIV_MASK | LFSS_WDTCTL_KEY_MASK); } /** * @brief Gets the clock divider for the WDT module * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * * @return The clock divider for the WDT module * * @retval One of @ref DL_LFSS_IWDT_CLOCK_DIVIDE */ __STATIC_INLINE DL_LFSS_IWDT_CLOCK_DIVIDE DL_LFSS_IWDT_getClockDivider( const LFSS_Regs *lfss) { uint32_t divider = (lfss->IPSPECIFIC_WDT.WDTCTL & LFSS_WDTCTL_CLKDIV_MASK) + (uint32_t) 1; return (DL_LFSS_IWDT_CLOCK_DIVIDE)(divider); } /** * @brief Sets the timer period for the WDT module * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] period The WDT timer period to set. * One of @ref DL_LFSS_IWDT_TIMER_PERIOD. */ __STATIC_INLINE void DL_LFSS_IWDT_setTimerPeriod( LFSS_Regs *lfss, DL_LFSS_IWDT_TIMER_PERIOD period) { DL_Common_updateReg(&lfss->IPSPECIFIC_WDT.WDTCTL, ((uint32_t) period | LFSS_WDTCTL_KEY_UNLOCK_W), LFSS_WDTCTL_PER_MASK | LFSS_WDTCTL_KEY_MASK); } /*! * @brief Get the timer period for the WDT module * * @param[in] lfss Pointer to the register overlay for peripheral * * @return The current timer period for the WDT module * * @retval One of @ref DL_LFSS_IWDT_TIMER_PERIOD */ __STATIC_INLINE DL_LFSS_IWDT_TIMER_PERIOD DL_LFSS_IWDT_getTimerPeriod( const LFSS_Regs *lfss) { uint32_t period = (lfss->IPSPECIFIC_WDT.WDTCTL & LFSS_WDTCTL_PER_MASK); return (DL_LFSS_IWDT_TIMER_PERIOD)(period); } /*! * @brief Restarts the Watchdog * * @param[in] lfss Pointer to the register overlay for peripheral */ __STATIC_INLINE void DL_LFSS_IWDT_restart(LFSS_Regs *lfss) { lfss->IPSPECIFIC_WDT.WDTCNTRST = LFSS_WDTCNTRST_RESTART_VALUE; } /** * @brief Returns if Watchdog module is running * * @param lfss Pointer to the register overlay for the peripheral * * @return true Watchdog module is running * @return false Watchdog counter has stopped */ __STATIC_INLINE bool DL_LFSS_IWDT_isWatchdogRunning(const LFSS_Regs *lfss) { return ((lfss->IPSPECIFIC_WDT.WDTSTAT & LFSS_WDTSTAT_RUN_MASK) == LFSS_WDTSTAT_RUN_RUN); } /** * @brief Enable write protection lock of the WDTEN and WDTCTL * registers from accidental updates * * When enabled, the WDTEN and WDTCTL registers will have read-only access. * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral */ __STATIC_INLINE void DL_LFSS_IWDT_enableWriteProtect(LFSS_Regs *lfss) { lfss->IPSPECIFIC_WDT.WDTLOCK = (LFSS_WDTLOCK_PROTECT_SET | LFSS_WDTLOCK_KEY_UNLOCK_W); } /** * @brief Checks if write protection lock of the WDTEN and WDTCTL * registers is enabled * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * * @return Returns the enabled status of the write protection lock * * @retval true Write protection lock is enabled * @retval false Write protection lock is disabled */ __STATIC_INLINE bool DL_LFSS_IWDT_isWriteProtectEnabled(const LFSS_Regs *lfss) { return ((lfss->IPSPECIFIC_WDT.WDTLOCK & LFSS_WDTLOCK_PROTECT_MASK) == LFSS_WDTLOCK_PROTECT_SET); } /** * @brief Disable write protection lock of the WDTEN and WDTCTL * registers * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral */ __STATIC_INLINE void DL_LFSS_IWDT_disableWriteProtect(LFSS_Regs *lfss) { lfss->IPSPECIFIC_WDT.WDTLOCK = (LFSS_WDTLOCK_PROTECT_CLR | LFSS_WDTLOCK_KEY_UNLOCK_W); } /** * @brief Write a word in scratch pad memory * * The VBAT scratch pad memory is register based memory that will retain data * as long as VBAT is supplied. Refer to the device TRM for details on the * specific size and implementation of the scratch pad memory. * * This API wil write 32-bit data to the selected word in the scratch pad * memory. * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] memIndex The specified scratch pad memory word to write to. * One of @ref DL_LFSS_SCRATCHPAD_MEM_WORD * @param[in] data The 32-bit data to write to the specified scratch pad * memory word. Value in range of [0x0, 0xFFFFFFF]. */ __STATIC_INLINE void DL_LFSS_writeScratchPadData32( LFSS_Regs *lfss, DL_LFSS_SCRATCHPAD_MEM_WORD memIndex, uint32_t data) { lfss->IPSPECIFIC_MEM.SPMEM[(uint32_t) memIndex] = data; } /** * @brief Write to a single byte in scratch pad memory * * The VBAT scratch pad memory is register based memory that will retain data * as long as VBAT is supplied. Refer to the device TRM for details on the * specific size and implementation of the scratch pad memory. * * This API will write 8-bit data to the selected byte in the scratch pad * memory. The byte to write to is given in context of the scratch pad memory * word that contains that byte. * For example, to write to BYTE5 of scratch pad memory, the user will call * this API with parameters @ref DL_LFSS_SCRATCHPAD_MEM_WORD_1 and * @ref DL_LFSS_SCRATCHPAD_MEM_BYTE_1. * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] memIndex The specified scratch pad memory word to write to. * One of @ref DL_LFSS_SCRATCHPAD_MEM_WORD * @param[in] byteIndex The specified scratch pad memory byte to write to. * One of @ref DL_LFSS_SCRATCHPAD_MEM_BYTE * @param[in] data The 8-bit data to write to the specified scratch pad * memory byte. Value in range of [0x0, 0xFF]. */ __STATIC_INLINE void DL_LFSS_writeScratchPadData8(LFSS_Regs *lfss, DL_LFSS_SCRATCHPAD_MEM_WORD memIndex, DL_LFSS_SCRATCHPAD_MEM_BYTE byteIndex, uint32_t data) { /* Point to correct SPMEM word */ volatile uint32_t *pReg = &lfss->IPSPECIFIC_MEM.SPMEM[(uint32_t) memIndex]; /* Get the correct bit based on the byteIndex */ uint32_t offset = ((uint32_t) byteIndex * (uint32_t) 8); data = data << offset; uint32_t mask = ((uint32_t) 0x000000FFU) << offset; DL_Common_updateReg(pReg, data, mask); } /** * @brief Read the specified word in scratch pad memory * * The VBAT scratch pad memory is register based memory that will retain data * as long as VBAT is supplied. Refer to the device TRM for details on the * specific size and implementation of the scratch pad memory. * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] memIndex The specified scratch pad memory word to read. * One of @ref DL_LFSS_SCRATCHPAD_MEM_WORD * * @return The 32-bit data in the specified scratch pad memory word */ __STATIC_INLINE uint32_t DL_LFSS_readScratchPadDataWord( const LFSS_Regs *lfss, DL_LFSS_SCRATCHPAD_MEM_WORD memIndex) { return (lfss->IPSPECIFIC_MEM.SPMEM[(uint32_t) memIndex]); } /** * @brief Read the specified byte in scratch pad memory * * The VBAT scratch pad memory is register based memory that will retain data * as long as VBAT is supplied. Refer to the device TRM for details on the * specific size and implementation of the scratch pad memory. * * This API will read 8-bit data from the selected byte in the scratch pad * memory. The byte to read to is given in context of the scratch pad memory * word that contains that byte. * For example, to read BYTE5 of scratch pad memory, the user will call * this API with parameters @ref DL_LFSS_SCRATCHPAD_MEM_WORD_1 and * @ref DL_LFSS_SCRATCHPAD_MEM_BYTE_1. * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] memIndex The specified scratch pad memory word to read. * One of @ref DL_LFSS_SCRATCHPAD_MEM_WORD * @param[in] byteIndex The specified scratch pad memory byte to read. * One of @ref DL_LFSS_SCRATCHPAD_MEM_BYTE * * @return The 8-bit data in the specified scratch pad memory byte */ __STATIC_INLINE uint8_t DL_LFSS_readScratchPadDataByte(LFSS_Regs *lfss, DL_LFSS_SCRATCHPAD_MEM_WORD memIndex, DL_LFSS_SCRATCHPAD_MEM_BYTE byteIndex) { /* Point to correct SPMEM word */ volatile uint32_t *pReg = &lfss->IPSPECIFIC_MEM.SPMEM[(uint32_t) memIndex]; /* Get the correct bit based on the byteIndex */ uint32_t offset = ((uint32_t) byteIndex * (uint32_t) 8); uint32_t mask = ((uint32_t) 0x000000FFU) << offset; return (((*pReg & mask)) >> offset); } /** * @brief Enable write protection lock of the specified byte in scratch pad * memory from accidental updates * * When enabled, the specified byte in scratch pad memory will have read-only * access. * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] memIndex The specified scratch pad memory word. * One of @ref DL_LFSS_SCRATCHPAD_MEM_WORD * @param[in] byteIndex The specified byte in scratch pad memory word to * enable write protection for */ __STATIC_INLINE void DL_LFSS_enableScratchPadWriteProtectByte(LFSS_Regs *lfss, DL_LFSS_SCRATCHPAD_MEM_WORD memIndex, DL_LFSS_SCRATCHPAD_MEM_BYTE byteIndex) { /* Point to correct SPMWPROT register */ uint32_t regIndex = (uint32_t) memIndex >> (uint32_t) 2; volatile uint32_t *pReg = &lfss->IPSPECIFIC_MEM.SPMWPROT0 + regIndex; /* Get the correct bit based on the byteIndex */ uint32_t mask = (uint32_t) 1 << ((((uint32_t) memIndex % (uint32_t) 4) << (uint32_t) 2) + (uint32_t) byteIndex); *pReg |= (LFSS_SPMWPROT0_KEY_UNLOCK_W | mask); } /** * @brief Checks if write protection is enabled for the specified byte in * scratch pad memory * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] memIndex The specified scratch pad memory word. * One of @ref DL_LFSS_SCRATCHPAD_MEM_WORD * @param[in] byteIndex The specified scratch pad memory byte. * One of @ref DL_LFSS_SCRATCHPAD_MEM_BYTE * * @return Returns if write protection is enabled for the specified byte * * @retval true Write protection for the specified byte is enabled * @retval false Write protection for the specified byte is disabled */ __STATIC_INLINE bool DL_LFSS_isScratchPadWriteProtectByteEnabled( LFSS_Regs *lfss, DL_LFSS_SCRATCHPAD_MEM_WORD memIndex, DL_LFSS_SCRATCHPAD_MEM_BYTE byteIndex) { /* Point to correct SPMWPROT index */ uint32_t regIndex = (uint32_t) memIndex >> (uint32_t) 2; volatile uint32_t *pReg = &lfss->IPSPECIFIC_MEM.SPMWPROT0 + regIndex; /* Get the correct bit based on the byteIndex */ uint32_t mask = (uint32_t) 1 << ((((uint32_t) memIndex % (uint32_t) 4) << (uint32_t) 2) + (uint32_t) byteIndex); return ((*pReg & mask) == mask); } /** * @brief Disable write protection lock of the specified byte in scratch * pad memory * * When disables, the specified byte in scratch pad memory will have read-only * access. * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] memIndex The specified scratch pad memory word. * One of @ref DL_LFSS_SCRATCHPAD_MEM_WORD * @param[in] byteIndex The specified byte in scratch pad memory word to * disable write protection for. * One of @ref DL_LFSS_SCRATCHPAD_MEM_BYTE */ __STATIC_INLINE void DL_LFSS_disableScratchPadWriteProtectByte(LFSS_Regs *lfss, DL_LFSS_SCRATCHPAD_MEM_WORD memIndex, DL_LFSS_SCRATCHPAD_MEM_BYTE byteIndex) { /* Point to correct SPMWPROT index */ uint32_t regIndex = (uint32_t) memIndex >> (uint32_t) 2; volatile uint32_t *pReg = &lfss->IPSPECIFIC_MEM.SPMWPROT0 + regIndex; /* Get the correct bit based on the byteIndex */ uint32_t mask = (uint32_t) 1 << ((((uint32_t) memIndex % (uint32_t) 4) << (uint32_t) 2) + (uint32_t) byteIndex); *pReg = ((*pReg & (~mask)) | LFSS_SPMWPROT1_KEY_UNLOCK_W); } /** * @brief Enable tamper erase of the specified byte in scratch pad * memory * * When enabled, the specified byte in scratch pad memory will be erased in the * event of a tamper detect. * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] memIndex The specified scratch pad memory word. * One of @ref DL_LFSS_SCRATCHPAD_MEM_WORD * @param[in] byteIndex The specified byte in scratch pad memory word to * enable tamper erase for. * One of @ref DL_LFSS_SCRATCHPAD_MEM_BYTE */ __STATIC_INLINE void DL_LFSS_enableScratchPadTamperEraseByte(LFSS_Regs *lfss, DL_LFSS_SCRATCHPAD_MEM_WORD memIndex, DL_LFSS_SCRATCHPAD_MEM_BYTE byteIndex) { /* Point to correct SPMTERASE index */ uint32_t regIndex = (uint32_t) memIndex >> (uint32_t) 2; volatile uint32_t *pReg = &lfss->IPSPECIFIC_MEM.SPMTERASE0 + regIndex; /* Get the correct bit based on the byteIndex */ uint32_t mask = (uint32_t) 1 << ((((uint32_t) memIndex % (uint32_t) 4) << (uint32_t) 2) + (uint32_t) byteIndex); *pReg |= (LFSS_SPMTERASE0_KEY_UNLOCK_W | mask); } /** * @brief Checks if tamper erase is enabled for the specified byte in * scratch pad memory * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] memIndex The specified scratch pad memory word. * One of @ref DL_LFSS_SCRATCHPAD_MEM_WORD * @param[in] byteIndex The specified byte in scratch pad memory byte. * One of @ref DL_LFSS_SCRATCHPAD_MEM_BYTE * * @return Returns if tamper erase is enabled for the specified byte * * @retval true Tamper erase for the specified byte is enabled * @retval false tamper erase for the specified byte is disabled */ __STATIC_INLINE bool DL_LFSS_isScratchPadTamperEraseByteEnabled( LFSS_Regs *lfss, DL_LFSS_SCRATCHPAD_MEM_WORD memIndex, DL_LFSS_SCRATCHPAD_MEM_BYTE byteIndex) { /* Point to correct SPMTERASE index */ uint32_t regIndex = (uint32_t) memIndex >> (uint32_t) 2; volatile uint32_t *pReg = &lfss->IPSPECIFIC_MEM.SPMTERASE0 + regIndex; /* Get the correct bit based on the byteIndex */ uint32_t mask = (uint32_t) 1 << ((((uint32_t) memIndex % (uint32_t) 4) << (uint32_t) 2) + (uint32_t) byteIndex); return ((*pReg & mask) == mask); } /** * @brief Disable tamper erase of the specified byte in scratch pad memory * * The specified byte in scratch pad memory will not be erased in the event of * a tamper detect. * * @param[in] lfss Pointer to the register overlay for the LFSS peripheral * @param[in] memIndex The specified scratch pad memory word to write to. * One of @ref DL_LFSS_SCRATCHPAD_MEM_WORD * @param[in] byteIndex The specified byte in scratch pad memory word to * disable tamper erase for. * One of @ref DL_LFSS_SCRATCHPAD_MEM_BYTE */ __STATIC_INLINE void DL_LFSS_disableScratchPadTamperEraseByte(LFSS_Regs *lfss, DL_LFSS_SCRATCHPAD_MEM_WORD memIndex, DL_LFSS_SCRATCHPAD_MEM_BYTE byteIndex) { /* Point to correct SPMTERASE index */ uint32_t regIndex = (uint32_t) memIndex >> (uint32_t) 2; volatile uint32_t *pReg = &lfss->IPSPECIFIC_MEM.SPMTERASE0 + regIndex; /* Get the correct bit based on the byteIndex */ uint32_t mask = (uint32_t) 1 << ((((uint32_t) memIndex % (uint32_t) 4) << (uint32_t) 2) + (uint32_t) byteIndex); *pReg = ((*pReg & (~mask)) | LFSS_SPMWPROT2_KEY_UNLOCK_W); } /** * @brief Enable LFSS Tamper Interrupts * * @param[in] lfss Pointer to the register overlay for the LFSS Tamper peripheral * * @param[in] interruptMask Bit mask of interrupts to enable. Logical OR of * @ref DL_LFSS_TAMPERIO_INTERRUPT. */ __STATIC_INLINE void DL_LFSS_TamperIO_enableInterrupt( LFSS_Regs *lfss, uint32_t interruptMask) { lfss->CPU_INT.IMASK |= interruptMask; } /** * @brief Disable LFSS Tamper interrupts * * @param[in] lfss Pointer to the register overlay for the LFSS Tamper peripheral * * @param[in] interruptMask Bit mask of interrupts to enable. Logical OR of * @ref DL_LFSS_TAMPERIO_INTERRUPT */ __STATIC_INLINE void DL_LFSS_TamperIO_disableInterrupt( LFSS_Regs *lfss, uint32_t interruptMask) { lfss->CPU_INT.IMASK &= ~(interruptMask); } /** * @brief Check which LFSS Tamper interrupts are enabled * * @param[in] lfss Pointer to the register overlay for the LFSS Tamper peripheral * * @param[in] interruptMask Bit mask of interrupts to check. Logical OR of * @ref DL_LFSS_TAMPERIO_INTERRUPT * * @return Which of the requested LFSS interrupts are enabled * * @retval Logical OR of @ref DL_LFSS_TAMPERIO_INTERRUPT values */ __STATIC_INLINE uint32_t DL_LFSS_TamperIO_getEnabledInterrupts( const LFSS_Regs *lfss, uint32_t interruptMask) { return (lfss->CPU_INT.IMASK & interruptMask); } /** * @brief Check interrupt flag of enabled LFSS Tamper interrupts * * Checks if any of the LFSS Tamper interrupts that were previously enabled are * pending. * * @param[in] lfss Pointer to the register overlay for the LFSS Tamper peripheral * * @param[in] interruptMask Bit mask of interrupts to check. Logical OR of * @ref DL_LFSS_TAMPERIO_INTERRUPT * * @return Which of the requested LFSS Tamper interrupts are pending * * @retval Logical OR of @ref DL_LFSS_TAMPERIO_INTERRUPT values * * @sa DL_LFSS_TAMPERIO_enableInterrupt */ __STATIC_INLINE uint32_t DL_LFSS_TamperIO_getEnabledInterruptStatus( const LFSS_Regs *lfss, uint32_t interruptMask) { return (lfss->CPU_INT.MIS & interruptMask); } /** * @brief Check interrupt flag of any LFSS Tamper interrupt * * Checks if any of the LFSS Tamper interrupts are pending. Interrupts do not have to * be previously enabled. * * @param[in] lfss Pointer to the register overlay for the LFSS Tamper peripheral * * @param[in] interruptMask Bit mask of interrupts to check. Logical OR of * @ref DL_LFSS_TAMPERIO_INTERRUPT * * @return Which of the requested LFSS Tamper interrupts are pending * * @retval Logical OR of @ref DL_LFSS_TAMPERIO_INTERRUPT values */ __STATIC_INLINE uint32_t DL_LFSS_TamperIO_getRawInterruptStatus( const LFSS_Regs *lfss, uint32_t interruptMask) { return (lfss->CPU_INT.RIS & interruptMask); } /** * @brief Get highest priority pending LFSS interrupt * * Checks if any of the LFSS interrupts are pending. Interrupts do not have to * be previously enabled. * * @param[in] lfss Pointer to the register overlay for the LFSS Tamper peripheral * * @return The highest priority pending LFSS Tamper interrupt * * @retval One of @ref DL_LFSS_TAMPERIO_IIDX */ __STATIC_INLINE DL_LFSS_TAMPERIO_IIDX DL_LFSS_TamperIO_getPendingInterrupt( const LFSS_Regs *lfss) { return (DL_LFSS_TAMPERIO_IIDX)(lfss->CPU_INT.IIDX); } /** * @brief Clear pending LFSS Tamper interrupts * * @param[in] lfss Pointer to the register overlay for the LFSS Tamper peripheral * * @param[in] interruptMask Bit mask of interrupts to check. Logical OR of * @ref DL_LFSS_TAMPERIO_INTERRUPT */ __STATIC_INLINE void DL_LFSS_TamperIO_clearInterruptStatus( LFSS_Regs *lfss, uint32_t interruptMask) { lfss->CPU_INT.ICLR = interruptMask; } /** * @brief Enable LFSS Tamper event * * @param[in] lfss Pointer to the register overlay for the peripheral * @param[in] eventMask Bit mask of interrupts to enable. Bitwise OR of * @ref DL_LFSS_TAMPERIO_EVENT. */ __STATIC_INLINE void DL_LFSS_TamperIO_enableEvent( LFSS_Regs *lfss, uint32_t eventMask) { lfss->GEN_EVENT.IMASK |= (eventMask); } /** * @brief Disable LFSS Tamper event * * @param[in] lfss Pointer to the register overlay for the peripheral * @param[in] eventMask Bit mask of interrupts to enable. Bitwise OR of * @ref DL_LFSS_TAMPERIO_EVENT. */ __STATIC_INLINE void DL_LFSS_TamperIO_disableEvent( LFSS_Regs *lfss, uint32_t eventMask) { lfss->GEN_EVENT.IMASK &= ~(eventMask); } /** * @brief Check which LFSS Tamper events are enabled * * @param[in] lfss Pointer to the register overlay for the peripheral * @param[in] eventMask Bit mask of interrupts to check. Bitwise OR of * @ref DL_LFSS_TAMPERIO_EVENT. * * @return Which of the requested LFSS Tamper interrupts are enabled * * @retval Bitwise OR of @ref DL_LFSS_TAMPERIO_EVENT values */ __STATIC_INLINE uint32_t DL_LFSS_TamperIO_getEnabledEvents( const LFSS_Regs *lfss, uint32_t eventMask) { return ((lfss->GEN_EVENT.IMASK) & (eventMask)); } /** * @brief Check event flag of enabled LFSS Tamper event * * Checks if any of the LFSS Tamper events that were previously enabled are * pending. * * @param[in] lfss Pointer to the register overlay for the peripheral * @param[in] eventMask Bit mask of interrupts to check. Bitwise OR of * @ref DL_LFSS_TAMPERIO_EVENT. * * @return Which of the requested LFSS Tamper interrupts are pending * * @retval Bitwise OR of @ref DL_LFSS_TAMPERIO_EVENT values * * @sa DL_LFSS_TamperIO_enableInterrupt */ __STATIC_INLINE uint32_t DL_LFSS_TamperIO_getEnabledEventStatus( const LFSS_Regs *lfss, uint32_t eventMask) { return ((lfss->GEN_EVENT.MIS) & eventMask); } /** * @brief Check interrupt flag of any LFSS Tamper event * * Checks if any events are pending. Events do not have to * be previously enabled. * * @param[in] lfss Pointer to the register overlay for the peripheral * @param[in] eventMask Bit mask of interrupts to check. Bitwise OR of * @ref DL_LFSS_TAMPERIO_EVENT. * * @return Which of the requested LFSS Tamper interrupts are pending * * @retval Bitwise OR of @ref DL_LFSS_TAMPERIO_EVENT values */ __STATIC_INLINE uint32_t DL_LFSS_TamperIO_getRawEventsStatus( const LFSS_Regs *lfss, uint32_t eventMask) { return ((lfss->GEN_EVENT.RIS) & eventMask); } /** * @brief Clear pending LFSS Tamper events * * @param[in] lfss Pointer to the register overlay for the peripheral * @param[in] eventMask Bit mask of interrupts to clear. Bitwise OR of * @ref DL_LFSS_TAMPERIO_EVENT. */ __STATIC_INLINE void DL_LFSS_TamperIO_clearEventsStatus( LFSS_Regs *lfss, uint32_t eventMask) { lfss->GEN_EVENT.ICLR |= (eventMask); } /** * @brief Sets the LFSS Tamper event publisher channel ID * * @param[in] lfss Pointer to the register overlay for the peripheral * @param[in] chanID Channel ID number. Valid range 0-15. If ChanID == 0 * publisher is disconnected. */ __STATIC_INLINE void DL_LFSS_TamperIO_setPublisherChanID( LFSS_Regs *lfss, uint8_t chanID) { lfss->FPUB_0 = (chanID & LFSS_FPUB_0_CHANID_MAXIMUM); } /** * @brief Gets the event publisher channel ID * * @param[in] lfss Pointer to the register overlay for the peripheral * * @return Event publisher channel ID * */ __STATIC_INLINE uint8_t DL_LFSS_TamperIO_getPublisherChanID( const LFSS_Regs *lfss) { return (uint8_t)(lfss->FPUB_0 & LFSS_FPUB_0_CHANID_MAXIMUM); } /** * @brief Requests a reset to the LFSS module * * @param[in] lfss Pointer to the register overlay for the peripheral * * */ __STATIC_INLINE void DL_LFSS_reset(LFSS_Regs *lfss) { lfss->IPSPECIFIC_RTC.LFSSRST = (LFSS_LFSSRST_KEY_UNLOCK_W | LFSS_LFSSRST_VBATPOR_SET); } #ifdef __cplusplus } #endif #endif /* __MSPM0_HAS_LFSS__ */ #endif /* ti_dl_dl_lfss__include */ /** @}*/