1 /**************************************************************************//** 2 * @file ttmr_reg.h 3 * @version V1.00 4 * @brief TTMR register definition header file 5 * 6 * SPDX-License-Identifier: Apache-2.0 7 * @copyright (C) 2023 Nuvoton Technology Corp. All rights reserved. 8 *****************************************************************************/ 9 #ifndef __TTMR_REG_H__ 10 #define __TTMR_REG_H__ 11 12 #if defined ( __CC_ARM ) 13 #pragma anon_unions 14 #endif 15 16 /** 17 @addtogroup REGISTER Control Register 18 @{ 19 */ 20 21 /** 22 @addtogroup TTMR Tick Timer Controller (TTMR) 23 Memory Mapped Structure for TTMR Controller 24 @{ */ 25 26 typedef struct 27 { 28 29 30 /** 31 * @var TTMR_T::CTL 32 * Offset: 0x00 TTMR Control Register 33 * --------------------------------------------------------------------------------------------------- 34 * |Bits |Field |Descriptions 35 * | :----: | :----: | :---- | 36 * |[7:0] |PSC |Prescale Counter 37 * | | |Tick Timer input clock or event source is divided by (PSC+1) before it is fed to the tick timer up counter. 38 * | | |If this field is 0 (PSC = 0), then there is no scaling. 39 * | | |Note: Update prescale counter value will reset internal 8-bit prescale counter and 24-bit up counter value. 40 * |[16] |PDCLKEN |Power-down Engine Clock Enable 41 * | | |0 = Disable engine clock in Power-down mode. 42 * | | |1 = Enable engine clock in Power-down mode. 43 * |[20] |PERIOSEL |Periodic Mode Behavior Selection Enable Bit 44 * | | |0 = The behavior selection in periodic mode is Disabled. 45 * | | |When user updates CMPDAT while timer is running in periodic mode, 46 * | | |CNT will be reset to default value. 47 * | | |1 = The behavior selection in periodic mode is Enabled. 48 * | | |When user updates CMPDAT while timer is running in periodic mode, the limitations as bellows list, 49 * | | |If updated CMPDAT value > CNT, CMPDAT will be updated and CNT keep running continually. 50 * | | |If updated CMPDAT value = CNT, timer time-out interrupt will be asserted immediately. 51 * | | |If updated CMPDAT value < CNT, CNT will be reset to default value. 52 * |[23] |WKEN |Wake-up Function Enable Bit 53 * | | |If this bit is set to 1, while timer interrupt flag TIF (TTMRx_INTSTS[0]) is 1 and INTEN (TTMRx_CTL[29]) is enabled, the tick timer interrupt signal will generate a wake-up trigger event to CPU. 54 * | | |0 = Wake-up function Disabled if timer interrupt signal generated. 55 * | | |1 = Wake-up function Enabled if timer interrupt signal generated. 56 * |[25] |ACTSTS |Tick Timer Active Status Bit (Read Only) 57 * | | |This bit indicates the 24-bit up counter status. 58 * | | |0 = 24-bit up counter is not active. 59 * | | |1 = 24-bit up counter is active. 60 * | | |Note: This bit may be active when CNT 0 is transitioned to CNT 1. 61 * |[28:27] |OPMODE |Tick Timer Counting Mode Select 62 * | | |00 = Tick timer controller is operated in One-shot mode. 63 * | | |01 = Tick timer controller is operated in Periodic mode. 64 * | | |11 = Tick timer controller is operated in Continuous Counting mode. 65 * |[29] |INTEN |Tick Timer Interrupt Enable Bit 66 * | | |0 = Tick Timer time-out interrupt Disabled. 67 * | | |1 = Tick Timer time-out interrupt Enabled. 68 * | | |Note: If this bit is enabled, when the tick timer time-out interrupt flag TIF is set to 1, the tick timer interrupt signal is generated and inform to CPU. 69 * |[30] |CNTEN |Tick Timer Counting Enable Bit 70 * | | |0 = Stops/Suspends counting. 71 * | | |1 = Starts counting. 72 * | | |Note 1: In stop status, and then set CNTEN to 1 will enable the 24-bit up counter to keep counting from the last stop counting value. 73 * | | |Note 2: This bit is auto-cleared by hardware in one-shot mode (TTMR_CTL[28:27] = 00) when the tick timer time-out interrupt flag TIF (TTMRx_INTSTS[0]) is generated. 74 * | | |Note 3: Set enable/disable this bit needs 2 * TTMR_CLK period to become active, user can read ACTSTS (TTMRx_CTL[25]) to check enable/disable command is completed or not. 75 * |[31] |ICEDEBUG |ICE Debug Mode Acknowledge Disable Bit (Write Protect) 76 * | | |0 = ICE debug mode acknowledgement effects TTMR counting. 77 * | | |TTMR counter will be held while CPU is held by ICE. 78 * | | |1 = ICE debug mode acknowledgement Disabled. 79 * | | |TTMR counter will keep going no matter CPU is held by ICE or not. 80 * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. 81 * @var TTMR_T::CMP 82 * Offset: 0x04 TTMR Comparator Register 83 * --------------------------------------------------------------------------------------------------- 84 * |Bits |Field |Descriptions 85 * | :----: | :----: | :---- | 86 * |[23:0] |CMPDAT |Tick Timer Comparator Value 87 * | | |CMPDAT is a 24-bit compared value register 88 * | | |When the internal 24-bit up counter value is equal to CMPDAT value, the TIF (TTMRx_INTSTS[0] Tick Timer Interrupt Flag) will set to 1. 89 * | | |Time-out period = (Period of timer clock input) * (8-bit PSC + 1) * (24-bit CMPDAT). 90 * | | |Note 1: Never write 0x0 or 0x1 in CMPDAT field, or the core will run into unknown state. 91 * | | |Note 2: When timer is operating at continuous counting mode, the 24-bit up counter will keep counting continuously even if user writes a new value into CMPDAT field 92 * | | |But if timer is operating at other modes, the 24-bit up counter will restart counting from 0 and using newest CMPDAT value to be the tick timer compared value while user writes a new value into CMPDAT field. 93 * @var TTMR_T::INTSTS 94 * Offset: 0x08 TTMR Interrupt Status Register 95 * --------------------------------------------------------------------------------------------------- 96 * |Bits |Field |Descriptions 97 * | :----: | :----: | :---- | 98 * |[0] |TIF |Tick Timer Interrupt Flag 99 * | | |This bit indicates the interrupt flag status of Tick Timer while 24-bit timer up counter CNT (TTMRx_CNT[23:0]) value reaches to CMPDAT (TTMRx_CMP[23:0]) value. 100 * | | |0 = No effect. 101 * | | |1 = CNT value matches the CMPDAT value. 102 * | | |Note: This bit is cleared by writing 1 to it. 103 * |[1] |TWKF |Tick Timer Wake-up Flag 104 * | | |This bit indicates the interrupt wake-up flag status of timer. 105 * | | |0 = Tick Timer does not cause CPU wake-up. 106 * | | |1 = CPU wake-up from Idle or Power-down mode if timer time-out interrupt signal generated. 107 * | | |Note: This bit is cleared by writing 1 to it. 108 * @var TTMR_T::CNT 109 * Offset: 0x0C TTMR Data Register 110 * --------------------------------------------------------------------------------------------------- 111 * |Bits |Field |Descriptions 112 * | :----: | :----: | :---- | 113 * |[23:0] |CNT |Tick Timer Data Register 114 * | | |Read operation: 115 * | | |Read this register to get CNT value. For example: 116 * | | |Write operation: 117 * | | |Writing any value to this register will reset current CNT value to 0 and reload internal 8-bit prescale counter. 118 * |[31] |RSTACT |Tick Timer Data Register Reset Active (Read Only) 119 * | | |This bit indicates if the counter reset operation active. 120 * | | |When user writes this CNT register, tick timer starts to reset its internal 24-bit timer up-counter to 0 and reload 8-bit pre-scale counter 121 * | | |At the same time, timer set this flag to 1 to indicate the counter reset operation is in progress 122 * | | |Once the counter reset operation done, tick timer clear this bit to 0 automatically. 123 * | | |0 = Reset operation is done. 124 * | | |1 = Reset operation triggered by writing TTMRx_CNT is in progress. 125 * @var TTMR_T::TRGCTL 126 * Offset: 0x1C TTMR Trigger Control Register 127 * --------------------------------------------------------------------------------------------------- 128 * |Bits |Field |Descriptions 129 * | :----: | :----: | :---- | 130 * |[1] |TRGEN |Trigger Low power IPs Enable Bit 131 * | | |If this bit is set to 1, each timer time-out event or capture event can be triggered Low Power IPs conversion. 132 * | | |0 = Tick Timer interrupt trigger Low Power IPs Disabled. 133 * | | |1 = Tick Timer interrupt trigger Low Power IPs Enabled. 134 * |[4] |TRGLPPDMA |Trigger LPPDMA Enable Bit 135 * | | |If this bit is set to 1, each timer time-out event or capture event can be triggered LPPDMA transfer. 136 * | | |0 = Tick Timer interrupt trigger LPPDMA Disabled. 137 * | | |1 = Tick Timer interrupt trigger LPPDMA Enabled. 138 */ 139 __IO uint32_t CTL; /*!< [0x0000] TTMR Control Register */ 140 __IO uint32_t CMP; /*!< [0x0004] TTMR Comparator Register */ 141 __IO uint32_t INTSTS; /*!< [0x0008] TTMR Interrupt Status Register */ 142 __IO uint32_t CNT; /*!< [0x000c] TTMR Data Register */ 143 __I uint32_t RESERVE0[3]; 144 __IO uint32_t TRGCTL; /*!< [0x001c] TTMR Trigger Control Register */ 145 146 } TTMR_T; 147 148 /** 149 @addtogroup TTMR_CONST TTMR Bit Field Definition 150 Constant Definitions for TTMR Controller 151 @{ */ 152 153 #define TTMR_CTL_PSC_Pos (0) /*!< TTMR_T::CTL: PSC Position */ 154 #define TTMR_CTL_PSC_Msk (0xfful << TTMR_CTL_PSC_Pos) /*!< TTMR_T::CTL: PSC Mask */ 155 156 #define TTMR_CTL_PDCLKEN_Pos (16) /*!< TTMR_T::CTL: PDCLKEN Position */ 157 #define TTMR_CTL_PDCLKEN_Msk (0x1uL << TTMR_CTL_PDCLKEN_Pos) /*!< TTMR_T::CTL: PDCLKEN Mask */ 158 159 #define TTMR_CTL_PERIOSEL_Pos (20) /*!< TTMR_T::CTL: PERIOSEL Position */ 160 #define TTMR_CTL_PERIOSEL_Msk (0x1ul << TTMR_CTL_PERIOSEL_Pos) /*!< TTMR_T::CTL: PERIOSEL Mask */ 161 162 #define TTMR_CTL_WKEN_Pos (23) /*!< TTMR_T::CTL: WKEN Position */ 163 #define TTMR_CTL_WKEN_Msk (0x1ul << TTMR_CTL_WKEN_Pos) /*!< TTMR_T::CTL: WKEN Mask */ 164 165 #define TTMR_CTL_ACTSTS_Pos (25) /*!< TTMR_T::CTL: ACTSTS Position */ 166 #define TTMR_CTL_ACTSTS_Msk (0x1ul << TTMR_CTL_ACTSTS_Pos) /*!< TTMR_T::CTL: ACTSTS Mask */ 167 168 #define TTMR_CTL_OPMODE_Pos (27) /*!< TTMR_T::CTL: OPMODE Position */ 169 #define TTMR_CTL_OPMODE_Msk (0x3ul << TTMR_CTL_OPMODE_Pos) /*!< TTMR_T::CTL: OPMODE Mask */ 170 171 #define TTMR_CTL_INTEN_Pos (29) /*!< TTMR_T::CTL: INTEN Position */ 172 #define TTMR_CTL_INTEN_Msk (0x1ul << TTMR_CTL_INTEN_Pos) /*!< TTMR_T::CTL: INTEN Mask */ 173 174 #define TTMR_CTL_CNTEN_Pos (30) /*!< TTMR_T::CTL: CNTEN Position */ 175 #define TTMR_CTL_CNTEN_Msk (0x1ul << TTMR_CTL_CNTEN_Pos) /*!< TTMR_T::CTL: CNTEN Mask */ 176 177 #define TTMR_CTL_ICEDEBUG_Pos (31) /*!< TTMR_T::CTL: ICEDEBUG Position */ 178 #define TTMR_CTL_ICEDEBUG_Msk (0x1ul << TTMR_CTL_ICEDEBUG_Pos) /*!< TTMR_T::CTL: ICEDEBUG Mask */ 179 180 #define TTMR_CMP_CMPDAT_Pos (0) /*!< TTMR_T::CMP: CMPDAT Position */ 181 #define TTMR_CMP_CMPDAT_Msk (0xfffffful << TTMR_CMP_CMPDAT_Pos) /*!< TTMR_T::CMP: CMPDAT Mask */ 182 183 #define TTMR_INTSTS_TIF_Pos (0) /*!< TTMR_T::INTSTS: TIF Position */ 184 #define TTMR_INTSTS_TIF_Msk (0x1ul << TTMR_INTSTS_TIF_Pos) /*!< TTMR_T::INTSTS: TIF Mask */ 185 186 #define TTMR_INTSTS_TWKF_Pos (1) /*!< TTMR_T::INTSTS: TWKF Position */ 187 #define TTMR_INTSTS_TWKF_Msk (0x1ul << TTMR_INTSTS_TWKF_Pos) /*!< TTMR_T::INTSTS: TWKF Mask */ 188 189 #define TTMR_CNT_CNT_Pos (0) /*!< TTMR_T::CNT: CNT Position */ 190 #define TTMR_CNT_CNT_Msk (0xfffffful << TTMR_CNT_CNT_Pos) /*!< TTMR_T::CNT: CNT Mask */ 191 192 #define TTMR_CNT_RSTACT_Pos (31) /*!< TTMR_T::CNT: RSTACT Position */ 193 #define TTMR_CNT_RSTACT_Msk (0x1ul << TTMR_CNT_RSTACT_Pos) /*!< TTMR_T::CNT: RSTACT Mask */ 194 195 #define TTMR_TRGCTL_TRGEN_Pos (1) /*!< TTMR_T::TRGCTL: TRGEN Position */ 196 #define TTMR_TRGCTL_TRGEN_Msk (0x1ul << TTMR_TRGCTL_TRGEN_Pos) /*!< TTMR_T::TRGCTL: TRGEN Mask */ 197 198 #define TTMR_TRGCTL_TRGLPPDMA_Pos (4) /*!< TTMR_T::TRGCTL: TRGLPPDMA Position */ 199 #define TTMR_TRGCTL_TRGLPPDMA_Msk (0x1ul << TTMR_TRGCTL_TRGLPPDMA_Pos) /*!< TTMR_T::TRGCTL: TRGLPPDMA Mask */ 200 201 /**@}*/ /* TTMR_CONST */ 202 /**@}*/ /* end of TTMR register group */ 203 /**@}*/ /* end of REGISTER group */ 204 205 #if defined ( __CC_ARM ) 206 #pragma no_anon_unions 207 #endif 208 209 #endif /* __TTMR_REG_H__ */ 210