1 /*! 2 \file gd32f4xx_rcu.h 3 \brief definitions for the RCU 4 5 \version 2016-08-15, V1.0.0, firmware for GD32F4xx 6 \version 2018-12-12, V2.0.0, firmware for GD32F4xx 7 \version 2020-09-30, V2.1.0, firmware for GD32F4xx 8 \version 2022-03-09, V3.0.0, firmware for GD32F4xx 9 */ 10 11 /* 12 Copyright (c) 2022, GigaDevice Semiconductor Inc. 13 14 Redistribution and use in source and binary forms, with or without modification, 15 are permitted provided that the following conditions are met: 16 17 1. Redistributions of source code must retain the above copyright notice, this 18 list of conditions and the following disclaimer. 19 2. Redistributions in binary form must reproduce the above copyright notice, 20 this list of conditions and the following disclaimer in the documentation 21 and/or other materials provided with the distribution. 22 3. Neither the name of the copyright holder nor the names of its contributors 23 may be used to endorse or promote products derived from this software without 24 specific prior written permission. 25 26 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 27 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 28 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 29 IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 30 INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 31 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 32 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 33 WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 34 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 35 OF SUCH DAMAGE. 36 */ 37 38 #ifndef GD32F4XX_RCU_H 39 #define GD32F4XX_RCU_H 40 41 #include "gd32f4xx.h" 42 43 /* RCU definitions */ 44 #define RCU RCU_BASE 45 46 /* registers definitions */ 47 #define RCU_CTL REG32(RCU + 0x00U) /*!< control register */ 48 #define RCU_PLL REG32(RCU + 0x04U) /*!< PLL register */ 49 #define RCU_CFG0 REG32(RCU + 0x08U) /*!< clock configuration register 0 */ 50 #define RCU_INT REG32(RCU + 0x0CU) /*!< clock interrupt register */ 51 #define RCU_AHB1RST REG32(RCU + 0x10U) /*!< AHB1 reset register */ 52 #define RCU_AHB2RST REG32(RCU + 0x14U) /*!< AHB2 reset register */ 53 #define RCU_AHB3RST REG32(RCU + 0x18U) /*!< AHB3 reset register */ 54 #define RCU_APB1RST REG32(RCU + 0x20U) /*!< APB1 reset register */ 55 #define RCU_APB2RST REG32(RCU + 0x24U) /*!< APB2 reset register */ 56 #define RCU_AHB1EN REG32(RCU + 0x30U) /*!< AHB1 enable register */ 57 #define RCU_AHB2EN REG32(RCU + 0x34U) /*!< AHB2 enable register */ 58 #define RCU_AHB3EN REG32(RCU + 0x38U) /*!< AHB3 enable register */ 59 #define RCU_APB1EN REG32(RCU + 0x40U) /*!< APB1 enable register */ 60 #define RCU_APB2EN REG32(RCU + 0x44U) /*!< APB2 enable register */ 61 #define RCU_AHB1SPEN REG32(RCU + 0x50U) /*!< AHB1 sleep mode enable register */ 62 #define RCU_AHB2SPEN REG32(RCU + 0x54U) /*!< AHB2 sleep mode enable register */ 63 #define RCU_AHB3SPEN REG32(RCU + 0x58U) /*!< AHB3 sleep mode enable register */ 64 #define RCU_APB1SPEN REG32(RCU + 0x60U) /*!< APB1 sleep mode enable register */ 65 #define RCU_APB2SPEN REG32(RCU + 0x64U) /*!< APB2 sleep mode enable register */ 66 #define RCU_BDCTL REG32(RCU + 0x70U) /*!< backup domain control register */ 67 #define RCU_RSTSCK REG32(RCU + 0x74U) /*!< reset source / clock register */ 68 #define RCU_PLLSSCTL REG32(RCU + 0x80U) /*!< PLL clock spread spectrum control register */ 69 #define RCU_PLLI2S REG32(RCU + 0x84U) /*!< PLLI2S register */ 70 #define RCU_PLLSAI REG32(RCU + 0x88U) /*!< PLLSAI register */ 71 #define RCU_CFG1 REG32(RCU + 0x8CU) /*!< clock configuration register 1 */ 72 #define RCU_ADDCTL REG32(RCU + 0xC0U) /*!< Additional clock control register */ 73 #define RCU_ADDINT REG32(RCU + 0xCCU) /*!< Additional clock interrupt register */ 74 #define RCU_ADDAPB1RST REG32(RCU + 0xE0U) /*!< APB1 additional reset register */ 75 #define RCU_ADDAPB1EN REG32(RCU + 0xE4U) /*!< APB1 additional enable register */ 76 #define RCU_ADDAPB1SPEN REG32(RCU + 0xE8U) /*!< APB1 additional sleep mode enable register */ 77 #define RCU_VKEY REG32(RCU + 0x100U) /*!< voltage key register */ 78 #define RCU_DSV REG32(RCU + 0x134U) /*!< deep-sleep mode voltage register */ 79 80 /* bits definitions */ 81 /* RCU_CTL */ 82 #define RCU_CTL_IRC16MEN BIT(0) /*!< internal high speed oscillator enable */ 83 #define RCU_CTL_IRC16MSTB BIT(1) /*!< IRC16M high speed internal oscillator stabilization flag */ 84 #define RCU_CTL_IRC16MADJ BITS(3,7) /*!< high speed internal oscillator clock trim adjust value */ 85 #define RCU_CTL_IRC16MCALIB BITS(8,15) /*!< high speed internal oscillator calibration value register */ 86 #define RCU_CTL_HXTALEN BIT(16) /*!< external high speed oscillator enable */ 87 #define RCU_CTL_HXTALSTB BIT(17) /*!< external crystal oscillator clock stabilization flag */ 88 #define RCU_CTL_HXTALBPS BIT(18) /*!< external crystal oscillator clock bypass mode enable */ 89 #define RCU_CTL_CKMEN BIT(19) /*!< HXTAL clock monitor enable */ 90 #define RCU_CTL_PLLEN BIT(24) /*!< PLL enable */ 91 #define RCU_CTL_PLLSTB BIT(25) /*!< PLL Clock Stabilization Flag */ 92 #define RCU_CTL_PLLI2SEN BIT(26) /*!< PLLI2S enable */ 93 #define RCU_CTL_PLLI2SSTB BIT(27) /*!< PLLI2S Clock Stabilization Flag */ 94 #define RCU_CTL_PLLSAIEN BIT(28) /*!< PLLSAI enable */ 95 #define RCU_CTL_PLLSAISTB BIT(29) /*!< PLLSAI Clock Stabilization Flag */ 96 97 /* RCU_PLL */ 98 #define RCU_PLL_PLLPSC BITS(0,5) /*!< The PLL VCO source clock prescaler */ 99 #define RCU_PLL_PLLN BITS(6,14) /*!< The PLL VCO clock multi factor */ 100 #define RCU_PLL_PLLP BITS(16,17) /*!< The PLLP output frequency division factor from PLL VCO clock */ 101 #define RCU_PLL_PLLSEL BIT(22) /*!< PLL Clock Source Selection */ 102 #define RCU_PLL_PLLQ BITS(24,27) /*!< The PLL Q output frequency division factor from PLL VCO clock */ 103 104 /* RCU_CFG0 */ 105 #define RCU_CFG0_SCS BITS(0,1) /*!< system clock switch */ 106 #define RCU_CFG0_SCSS BITS(2,3) /*!< system clock switch status */ 107 #define RCU_CFG0_AHBPSC BITS(4,7) /*!< AHB prescaler selection */ 108 #define RCU_CFG0_APB1PSC BITS(10,12) /*!< APB1 prescaler selection */ 109 #define RCU_CFG0_APB2PSC BITS(13,15) /*!< APB2 prescaler selection */ 110 #define RCU_CFG0_RTCDIV BITS(16,20) /*!< RTC clock divider factor */ 111 #define RCU_CFG0_CKOUT0SEL BITS(21,22) /*!< CKOUT0 Clock Source Selection */ 112 #define RCU_CFG0_I2SSEL BIT(23) /*!< I2S Clock Source Selection */ 113 #define RCU_CFG0_CKOUT0DIV BITS(24,26) /*!< The CK_OUT0 divider which the CK_OUT0 frequency can be reduced */ 114 #define RCU_CFG0_CKOUT1DIV BITS(27,29) /*!< The CK_OUT1 divider which the CK_OUT1 frequency can be reduced */ 115 #define RCU_CFG0_CKOUT1SEL BITS(30,31) /*!< CKOUT1 Clock Source Selection */ 116 117 /* RCU_INT */ 118 #define RCU_INT_IRC32KSTBIF BIT(0) /*!< IRC32K stabilization interrupt flag */ 119 #define RCU_INT_LXTALSTBIF BIT(1) /*!< LXTAL stabilization interrupt flag */ 120 #define RCU_INT_IRC16MSTBIF BIT(2) /*!< IRC16M stabilization interrupt flag */ 121 #define RCU_INT_HXTALSTBIF BIT(3) /*!< HXTAL stabilization interrupt flag */ 122 #define RCU_INT_PLLSTBIF BIT(4) /*!< PLL stabilization interrupt flag */ 123 #define RCU_INT_PLLI2SSTBIF BIT(5) /*!< PLLI2S stabilization interrupt flag */ 124 #define RCU_INT_PLLSAISTBIF BIT(6) /*!< PLLSAI stabilization interrupt flag */ 125 #define RCU_INT_CKMIF BIT(7) /*!< HXTAL clock stuck interrupt flag */ 126 #define RCU_INT_IRC32KSTBIE BIT(8) /*!< IRC32K stabilization interrupt enable */ 127 #define RCU_INT_LXTALSTBIE BIT(9) /*!< LXTAL stabilization interrupt enable */ 128 #define RCU_INT_IRC16MSTBIE BIT(10) /*!< IRC16M stabilization interrupt enable */ 129 #define RCU_INT_HXTALSTBIE BIT(11) /*!< HXTAL stabilization interrupt enable */ 130 #define RCU_INT_PLLSTBIE BIT(12) /*!< PLL stabilization interrupt enable */ 131 #define RCU_INT_PLLI2SSTBIE BIT(13) /*!< PLLI2S Stabilization Interrupt Enable */ 132 #define RCU_INT_PLLSAISTBIE BIT(14) /*!< PLLSAI Stabilization Interrupt Enable */ 133 #define RCU_INT_IRC32KSTBIC BIT(16) /*!< IRC32K Stabilization Interrupt Clear */ 134 #define RCU_INT_LXTALSTBIC BIT(17) /*!< LXTAL Stabilization Interrupt Clear */ 135 #define RCU_INT_IRC16MSTBIC BIT(18) /*!< IRC16M Stabilization Interrupt Clear */ 136 #define RCU_INT_HXTALSTBIC BIT(19) /*!< HXTAL Stabilization Interrupt Clear */ 137 #define RCU_INT_PLLSTBIC BIT(20) /*!< PLL stabilization Interrupt Clear */ 138 #define RCU_INT_PLLI2SSTBIC BIT(21) /*!< PLLI2S stabilization Interrupt Clear */ 139 #define RCU_INT_PLLSAISTBIC BIT(22) /*!< PLLSAI stabilization Interrupt Clear */ 140 #define RCU_INT_CKMIC BIT(23) /*!< HXTAL Clock Stuck Interrupt Clear */ 141 142 /* RCU_AHB1RST */ 143 #define RCU_AHB1RST_PARST BIT(0) /*!< GPIO port A reset */ 144 #define RCU_AHB1RST_PBRST BIT(1) /*!< GPIO port B reset */ 145 #define RCU_AHB1RST_PCRST BIT(2) /*!< GPIO port C reset */ 146 #define RCU_AHB1RST_PDRST BIT(3) /*!< GPIO port D reset */ 147 #define RCU_AHB1RST_PERST BIT(4) /*!< GPIO port E reset */ 148 #define RCU_AHB1RST_PFRST BIT(5) /*!< GPIO port F reset */ 149 #define RCU_AHB1RST_PGRST BIT(6) /*!< GPIO port G reset */ 150 #define RCU_AHB1RST_PHRST BIT(7) /*!< GPIO port H reset */ 151 #define RCU_AHB1RST_PIRST BIT(8) /*!< GPIO port I reset */ 152 #define RCU_AHB1RST_CRCRST BIT(12) /*!< CRC reset */ 153 #define RCU_AHB1RST_DMA0RST BIT(21) /*!< DMA0 reset */ 154 #define RCU_AHB1RST_DMA1RST BIT(22) /*!< DMA1 reset */ 155 #define RCU_AHB1RST_IPARST BIT(23) /*!< IPA reset */ 156 #define RCU_AHB1RST_ENETRST BIT(25) /*!< ENET reset */ 157 #define RCU_AHB1RST_USBHSRST BIT(29) /*!< USBHS reset */ 158 159 /* RCU_AHB2RST */ 160 #define RCU_AHB2RST_DCIRST BIT(0) /*!< DCI reset */ 161 #define RCU_AHB2RST_TRNGRST BIT(6) /*!< TRNG reset */ 162 #define RCU_AHB2RST_USBFSRST BIT(7) /*!< USBFS reset */ 163 164 /* RCU_AHB3RST */ 165 #define RCU_AHB3RST_EXMCRST BIT(0) /*!< EXMC reset */ 166 167 /* RCU_APB1RST */ 168 #define RCU_APB1RST_TIMER1RST BIT(0) /*!< TIMER1 reset */ 169 #define RCU_APB1RST_TIMER2RST BIT(1) /*!< TIMER2 reset */ 170 #define RCU_APB1RST_TIMER3RST BIT(2) /*!< TIMER3 reset */ 171 #define RCU_APB1RST_TIMER4RST BIT(3) /*!< TIMER4 reset */ 172 #define RCU_APB1RST_TIMER5RST BIT(4) /*!< TIMER5 reset */ 173 #define RCU_APB1RST_TIMER6RST BIT(5) /*!< TIMER6 reset */ 174 #define RCU_APB1RST_TIMER11RST BIT(6) /*!< TIMER11 reset */ 175 #define RCU_APB1RST_TIMER12RST BIT(7) /*!< TIMER12 reset */ 176 #define RCU_APB1RST_TIMER13RST BIT(8) /*!< TIMER13 reset */ 177 #define RCU_APB1RST_WWDGTRST BIT(11) /*!< WWDGT reset */ 178 #define RCU_APB1RST_SPI1RST BIT(14) /*!< SPI1 reset */ 179 #define RCU_APB1RST_SPI2RST BIT(15) /*!< SPI2 reset */ 180 #define RCU_APB1RST_USART1RST BIT(17) /*!< USART1 reset */ 181 #define RCU_APB1RST_USART2RST BIT(18) /*!< USART2 reset */ 182 #define RCU_APB1RST_UART3RST BIT(19) /*!< UART3 reset */ 183 #define RCU_APB1RST_UART4RST BIT(20) /*!< UART4 reset */ 184 #define RCU_APB1RST_I2C0RST BIT(21) /*!< I2C0 reset */ 185 #define RCU_APB1RST_I2C1RST BIT(22) /*!< I2C1 reset */ 186 #define RCU_APB1RST_I2C2RST BIT(23) /*!< I2C2 reset */ 187 #define RCU_APB1RST_CAN0RST BIT(25) /*!< CAN0 reset */ 188 #define RCU_APB1RST_CAN1RST BIT(26) /*!< CAN1 reset */ 189 #define RCU_APB1RST_PMURST BIT(28) /*!< PMU reset */ 190 #define RCU_APB1RST_DACRST BIT(29) /*!< DAC reset */ 191 #define RCU_APB1RST_UART6RST BIT(30) /*!< UART6 reset */ 192 #define RCU_APB1RST_UART7RST BIT(31) /*!< UART7 reset */ 193 194 /* RCU_APB2RST */ 195 #define RCU_APB2RST_TIMER0RST BIT(0) /*!< TIMER0 reset */ 196 #define RCU_APB2RST_TIMER7RST BIT(1) /*!< TIMER7 reset */ 197 #define RCU_APB2RST_USART0RST BIT(4) /*!< USART0 reset */ 198 #define RCU_APB2RST_USART5RST BIT(5) /*!< USART5 reset */ 199 #define RCU_APB2RST_ADCRST BIT(8) /*!< ADC reset */ 200 #define RCU_APB2RST_SDIORST BIT(11) /*!< SDIO reset */ 201 #define RCU_APB2RST_SPI0RST BIT(12) /*!< SPI0 reset */ 202 #define RCU_APB2RST_SPI3RST BIT(13) /*!< SPI3 reset */ 203 #define RCU_APB2RST_SYSCFGRST BIT(14) /*!< SYSCFG reset */ 204 #define RCU_APB2RST_TIMER8RST BIT(16) /*!< TIMER8 reset */ 205 #define RCU_APB2RST_TIMER9RST BIT(17) /*!< TIMER9 reset */ 206 #define RCU_APB2RST_TIMER10RST BIT(18) /*!< TIMER10 reset */ 207 #define RCU_APB2RST_SPI4RST BIT(20) /*!< SPI4 reset */ 208 #define RCU_APB2RST_SPI5RST BIT(21) /*!< SPI5 reset */ 209 #define RCU_APB2RST_TLIRST BIT(26) /*!< TLI reset */ 210 211 /* RCU_AHB1EN */ 212 #define RCU_AHB1EN_PAEN BIT(0) /*!< GPIO port A clock enable */ 213 #define RCU_AHB1EN_PBEN BIT(1) /*!< GPIO port B clock enable */ 214 #define RCU_AHB1EN_PCEN BIT(2) /*!< GPIO port C clock enable */ 215 #define RCU_AHB1EN_PDEN BIT(3) /*!< GPIO port D clock enable */ 216 #define RCU_AHB1EN_PEEN BIT(4) /*!< GPIO port E clock enable */ 217 #define RCU_AHB1EN_PFEN BIT(5) /*!< GPIO port F clock enable */ 218 #define RCU_AHB1EN_PGEN BIT(6) /*!< GPIO port G clock enable */ 219 #define RCU_AHB1EN_PHEN BIT(7) /*!< GPIO port H clock enable */ 220 #define RCU_AHB1EN_PIEN BIT(8) /*!< GPIO port I clock enable */ 221 #define RCU_AHB1EN_CRCEN BIT(12) /*!< CRC clock enable */ 222 #define RCU_AHB1EN_BKPSRAMEN BIT(18) /*!< BKPSRAM clock enable */ 223 #define RCU_AHB1EN_TCMSRAMEN BIT(20) /*!< TCMSRAM clock enable */ 224 #define RCU_AHB1EN_DMA0EN BIT(21) /*!< DMA0 clock enable */ 225 #define RCU_AHB1EN_DMA1EN BIT(22) /*!< DMA1 clock enable */ 226 #define RCU_AHB1EN_IPAEN BIT(23) /*!< IPA clock enable */ 227 #define RCU_AHB1EN_ENETEN BIT(25) /*!< ENET clock enable */ 228 #define RCU_AHB1EN_ENETTXEN BIT(26) /*!< Ethernet TX clock enable */ 229 #define RCU_AHB1EN_ENETRXEN BIT(27) /*!< Ethernet RX clock enable */ 230 #define RCU_AHB1EN_ENETPTPEN BIT(28) /*!< Ethernet PTP clock enable */ 231 #define RCU_AHB1EN_USBHSEN BIT(29) /*!< USBHS clock enable */ 232 #define RCU_AHB1EN_USBHSULPIEN BIT(30) /*!< USBHS ULPI clock enable */ 233 234 /* RCU_AHB2EN */ 235 #define RCU_AHB2EN_DCIEN BIT(0) /*!< DCI clock enable */ 236 #define RCU_AHB2EN_TRNGEN BIT(6) /*!< TRNG clock enable */ 237 #define RCU_AHB2EN_USBFSEN BIT(7) /*!< USBFS clock enable */ 238 239 /* RCU_AHB3EN */ 240 #define RCU_AHB3EN_EXMCEN BIT(0) /*!< EXMC clock enable */ 241 242 /* RCU_APB1EN */ 243 #define RCU_APB1EN_TIMER1EN BIT(0) /*!< TIMER1 clock enable */ 244 #define RCU_APB1EN_TIMER2EN BIT(1) /*!< TIMER2 clock enable */ 245 #define RCU_APB1EN_TIMER3EN BIT(2) /*!< TIMER3 clock enable */ 246 #define RCU_APB1EN_TIMER4EN BIT(3) /*!< TIMER4 clock enable */ 247 #define RCU_APB1EN_TIMER5EN BIT(4) /*!< TIMER5 clock enable */ 248 #define RCU_APB1EN_TIMER6EN BIT(5) /*!< TIMER6 clock enable */ 249 #define RCU_APB1EN_TIMER11EN BIT(6) /*!< TIMER11 clock enable */ 250 #define RCU_APB1EN_TIMER12EN BIT(7) /*!< TIMER12 clock enable */ 251 #define RCU_APB1EN_TIMER13EN BIT(8) /*!< TIMER13 clock enable */ 252 #define RCU_APB1EN_WWDGTEN BIT(11) /*!< WWDGT clock enable */ 253 #define RCU_APB1EN_SPI1EN BIT(14) /*!< SPI1 clock enable */ 254 #define RCU_APB1EN_SPI2EN BIT(15) /*!< SPI2 clock enable */ 255 #define RCU_APB1EN_USART1EN BIT(17) /*!< USART1 clock enable */ 256 #define RCU_APB1EN_USART2EN BIT(18) /*!< USART2 clock enable */ 257 #define RCU_APB1EN_UART3EN BIT(19) /*!< UART3 clock enable */ 258 #define RCU_APB1EN_UART4EN BIT(20) /*!< UART4 clock enable */ 259 #define RCU_APB1EN_I2C0EN BIT(21) /*!< I2C0 clock enable */ 260 #define RCU_APB1EN_I2C1EN BIT(22) /*!< I2C1 clock enable */ 261 #define RCU_APB1EN_I2C2EN BIT(23) /*!< I2C2 clock enable */ 262 #define RCU_APB1EN_CAN0EN BIT(25) /*!< CAN0 clock enable */ 263 #define RCU_APB1EN_CAN1EN BIT(26) /*!< CAN1 clock enable */ 264 #define RCU_APB1EN_PMUEN BIT(28) /*!< PMU clock enable */ 265 #define RCU_APB1EN_DACEN BIT(29) /*!< DAC clock enable */ 266 #define RCU_APB1EN_UART6EN BIT(30) /*!< UART6 clock enable */ 267 #define RCU_APB1EN_UART7EN BIT(31) /*!< UART7 clock enable */ 268 269 /* RCU_APB2EN */ 270 #define RCU_APB2EN_TIMER0EN BIT(0) /*!< TIMER0 clock enable */ 271 #define RCU_APB2EN_TIMER7EN BIT(1) /*!< TIMER7 clock enable */ 272 #define RCU_APB2EN_USART0EN BIT(4) /*!< USART0 clock enable */ 273 #define RCU_APB2EN_USART5EN BIT(5) /*!< USART5 clock enable */ 274 #define RCU_APB2EN_ADC0EN BIT(8) /*!< ADC0 clock enable */ 275 #define RCU_APB2EN_ADC1EN BIT(9) /*!< ADC1 clock enable */ 276 #define RCU_APB2EN_ADC2EN BIT(10) /*!< ADC2 clock enable */ 277 #define RCU_APB2EN_SDIOEN BIT(11) /*!< SDIO clock enable */ 278 #define RCU_APB2EN_SPI0EN BIT(12) /*!< SPI0 clock enable */ 279 #define RCU_APB2EN_SPI3EN BIT(13) /*!< SPI3 clock enable */ 280 #define RCU_APB2EN_SYSCFGEN BIT(14) /*!< SYSCFG clock enable */ 281 #define RCU_APB2EN_TIMER8EN BIT(16) /*!< TIMER8 clock enable */ 282 #define RCU_APB2EN_TIMER9EN BIT(17) /*!< TIMER9 clock enable */ 283 #define RCU_APB2EN_TIMER10EN BIT(18) /*!< TIMER10 clock enable */ 284 #define RCU_APB2EN_SPI4EN BIT(20) /*!< SPI4 clock enable */ 285 #define RCU_APB2EN_SPI5EN BIT(21) /*!< SPI5 clock enable */ 286 #define RCU_APB2EN_TLIEN BIT(26) /*!< TLI clock enable */ 287 288 /* RCU_AHB1SPEN */ 289 #define RCU_AHB1SPEN_PASPEN BIT(0) /*!< GPIO port A clock enable when sleep mode */ 290 #define RCU_AHB1SPEN_PBSPEN BIT(1) /*!< GPIO port B clock enable when sleep mode */ 291 #define RCU_AHB1SPEN_PCSPEN BIT(2) /*!< GPIO port C clock enable when sleep mode */ 292 #define RCU_AHB1SPEN_PDSPEN BIT(3) /*!< GPIO port D clock enable when sleep mode */ 293 #define RCU_AHB1SPEN_PESPEN BIT(4) /*!< GPIO port E clock enable when sleep mode */ 294 #define RCU_AHB1SPEN_PFSPEN BIT(5) /*!< GPIO port F clock enable when sleep mode */ 295 #define RCU_AHB1SPEN_PGSPEN BIT(6) /*!< GPIO port G clock enable when sleep mode */ 296 #define RCU_AHB1SPEN_PHSPEN BIT(7) /*!< GPIO port H clock enable when sleep mode */ 297 #define RCU_AHB1SPEN_PISPEN BIT(8) /*!< GPIO port I clock enable when sleep mode */ 298 #define RCU_AHB1SPEN_CRCSPEN BIT(12) /*!< CRC clock enable when sleep mode */ 299 #define RCU_AHB1SPEN_FMCSPEN BIT(15) /*!< FMC clock enable when sleep mode */ 300 #define RCU_AHB1SPEN_SRAM0SPEN BIT(16) /*!< SRAM0 clock enable when sleep mode */ 301 #define RCU_AHB1SPEN_SRAM1SPEN BIT(17) /*!< SRAM1 clock enable when sleep mode */ 302 #define RCU_AHB1SPEN_BKPSRAMSPEN BIT(18) /*!< BKPSRAM clock enable when sleep mode */ 303 #define RCU_AHB1SPEN_SRAM2SPEN BIT(19) /*!< SRAM2 clock enable when sleep mode */ 304 #define RCU_AHB1SPEN_DMA0SPEN BIT(21) /*!< DMA0 clock when sleep mode enable */ 305 #define RCU_AHB1SPEN_DMA1SPEN BIT(22) /*!< DMA1 clock when sleep mode enable */ 306 #define RCU_AHB1SPEN_IPASPEN BIT(23) /*!< IPA clock enable when sleep mode */ 307 #define RCU_AHB1SPEN_ENETSPEN BIT(25) /*!< ENET clock enable when sleep mode */ 308 #define RCU_AHB1SPEN_ENETTXSPEN BIT(26) /*!< Ethernet TX clock enable when sleep mode */ 309 #define RCU_AHB1SPEN_ENETRXSPEN BIT(27) /*!< Ethernet RX clock enable when sleep mode */ 310 #define RCU_AHB1SPEN_ENETPTPSPEN BIT(28) /*!< Ethernet PTP clock enable when sleep mode */ 311 #define RCU_AHB1SPEN_USBHSSPEN BIT(29) /*!< USBHS clock enable when sleep mode */ 312 #define RCU_AHB1SPEN_USBHSULPISPEN BIT(30) /*!< USBHS ULPI clock enable when sleep mode */ 313 314 /* RCU_AHB2SPEN */ 315 #define RCU_AHB2SPEN_DCISPEN BIT(0) /*!< DCI clock enable when sleep mode */ 316 #define RCU_AHB2SPEN_TRNGSPEN BIT(6) /*!< TRNG clock enable when sleep mode */ 317 #define RCU_AHB2SPEN_USBFSSPEN BIT(7) /*!< USBFS clock enable when sleep mode */ 318 319 /* RCU_AHB3SPEN */ 320 #define RCU_AHB3SPEN_EXMCSPEN BIT(0) /*!< EXMC clock enable when sleep mode */ 321 322 /* RCU_APB1SPEN */ 323 #define RCU_APB1SPEN_TIMER1SPEN BIT(0) /*!< TIMER1 clock enable when sleep mode */ 324 #define RCU_APB1SPEN_TIMER2SPEN BIT(1) /*!< TIMER2 clock enable when sleep mode */ 325 #define RCU_APB1SPEN_TIMER3SPEN BIT(2) /*!< TIMER3 clock enable when sleep mode */ 326 #define RCU_APB1SPEN_TIMER4SPEN BIT(3) /*!< TIMER4 clock enable when sleep mode */ 327 #define RCU_APB1SPEN_TIMER5SPEN BIT(4) /*!< TIMER5 clock enable when sleep mode */ 328 #define RCU_APB1SPEN_TIMER6SPEN BIT(5) /*!< TIMER6 clock enable when sleep mode */ 329 #define RCU_APB1SPEN_TIMER11SPEN BIT(6) /*!< TIMER11 clock enable when sleep mode */ 330 #define RCU_APB1SPEN_TIMER12SPEN BIT(7) /*!< TIMER12 clock enable when sleep mode */ 331 #define RCU_APB1SPEN_TIMER13SPEN BIT(8) /*!< TIMER13 clock enable when sleep mode */ 332 #define RCU_APB1SPEN_WWDGTSPEN BIT(11) /*!< WWDGT clock enable when sleep mode */ 333 #define RCU_APB1SPEN_SPI1SPEN BIT(14) /*!< SPI1 clock enable when sleep mode */ 334 #define RCU_APB1SPEN_SPI2SPEN BIT(15) /*!< SPI2 clock enable when sleep mode */ 335 #define RCU_APB1SPEN_USART1SPEN BIT(17) /*!< USART1 clock enable when sleep mode*/ 336 #define RCU_APB1SPEN_USART2SPEN BIT(18) /*!< USART2 clock enable when sleep mode*/ 337 #define RCU_APB1SPEN_UART3SPEN BIT(19) /*!< UART3 clock enable when sleep mode*/ 338 #define RCU_APB1SPEN_UART4SPEN BIT(20) /*!< UART4 clock enable when sleep mode */ 339 #define RCU_APB1SPEN_I2C0SPEN BIT(21) /*!< I2C0 clock enable when sleep mode */ 340 #define RCU_APB1SPEN_I2C1SPEN BIT(22) /*!< I2C1 clock enable when sleep mode*/ 341 #define RCU_APB1SPEN_I2C2SPEN BIT(23) /*!< I2C2 clock enable when sleep mode */ 342 #define RCU_APB1SPEN_CAN0SPEN BIT(25) /*!< CAN0 clock enable when sleep mode*/ 343 #define RCU_APB1SPEN_CAN1SPEN BIT(26) /*!< CAN1 clock enable when sleep mode */ 344 #define RCU_APB1SPEN_PMUSPEN BIT(28) /*!< PMU clock enable when sleep mode */ 345 #define RCU_APB1SPEN_DACSPEN BIT(29) /*!< DAC clock enable when sleep mode */ 346 #define RCU_APB1SPEN_UART6SPEN BIT(30) /*!< UART6 clock enable when sleep mode */ 347 #define RCU_APB1SPEN_UART7SPEN BIT(31) /*!< UART7 clock enable when sleep mode */ 348 349 /* RCU_APB2SPEN */ 350 #define RCU_APB2SPEN_TIMER0SPEN BIT(0) /*!< TIMER0 clock enable when sleep mode */ 351 #define RCU_APB2SPEN_TIMER7SPEN BIT(1) /*!< TIMER7 clock enable when sleep mode */ 352 #define RCU_APB2SPEN_USART0SPEN BIT(4) /*!< USART0 clock enable when sleep mode */ 353 #define RCU_APB2SPEN_USART5SPEN BIT(5) /*!< USART5 clock enable when sleep mode */ 354 #define RCU_APB2SPEN_ADC0SPEN BIT(8) /*!< ADC0 clock enable when sleep mode */ 355 #define RCU_APB2SPEN_ADC1SPEN BIT(9) /*!< ADC1 clock enable when sleep mode */ 356 #define RCU_APB2SPEN_ADC2SPEN BIT(10) /*!< ADC2 clock enable when sleep mode */ 357 #define RCU_APB2SPEN_SDIOSPEN BIT(11) /*!< SDIO clock enable when sleep mode */ 358 #define RCU_APB2SPEN_SPI0SPEN BIT(12) /*!< SPI0 clock enable when sleep mode */ 359 #define RCU_APB2SPEN_SPI3SPEN BIT(13) /*!< SPI3 clock enable when sleep mode */ 360 #define RCU_APB2SPEN_SYSCFGSPEN BIT(14) /*!< SYSCFG clock enable when sleep mode */ 361 #define RCU_APB2SPEN_TIMER8SPEN BIT(16) /*!< TIMER8 clock enable when sleep mode */ 362 #define RCU_APB2SPEN_TIMER9SPEN BIT(17) /*!< TIMER9 clock enable when sleep mode */ 363 #define RCU_APB2SPEN_TIMER10SPEN BIT(18) /*!< TIMER10 clock enable when sleep mode */ 364 #define RCU_APB2SPEN_SPI4SPEN BIT(20) /*!< SPI4 clock enable when sleep mode */ 365 #define RCU_APB2SPEN_SPI5SPEN BIT(21) /*!< SPI5 clock enable when sleep mode */ 366 #define RCU_APB2SPEN_TLISPEN BIT(26) /*!< TLI clock enable when sleep mode*/ 367 368 /* RCU_BDCTL */ 369 #define RCU_BDCTL_LXTALEN BIT(0) /*!< LXTAL enable */ 370 #define RCU_BDCTL_LXTALSTB BIT(1) /*!< low speed crystal oscillator stabilization flag */ 371 #define RCU_BDCTL_LXTALBPS BIT(2) /*!< LXTAL bypass mode enable */ 372 #define RCU_BDCTL_LXTALDRI BIT(3) /*!< LXTAL drive capability */ 373 #define RCU_BDCTL_RTCSRC BITS(8,9) /*!< RTC clock entry selection */ 374 #define RCU_BDCTL_RTCEN BIT(15) /*!< RTC clock enable */ 375 #define RCU_BDCTL_BKPRST BIT(16) /*!< backup domain reset */ 376 377 /* RCU_RSTSCK */ 378 #define RCU_RSTSCK_IRC32KEN BIT(0) /*!< IRC32K enable */ 379 #define RCU_RSTSCK_IRC32KSTB BIT(1) /*!< IRC32K stabilization flag */ 380 #define RCU_RSTSCK_RSTFC BIT(24) /*!< reset flag clear */ 381 #define RCU_RSTSCK_BORRSTF BIT(25) /*!< BOR reset flag */ 382 #define RCU_RSTSCK_EPRSTF BIT(26) /*!< external pin reset flag */ 383 #define RCU_RSTSCK_PORRSTF BIT(27) /*!< power reset flag */ 384 #define RCU_RSTSCK_SWRSTF BIT(28) /*!< software reset flag */ 385 #define RCU_RSTSCK_FWDGTRSTF BIT(29) /*!< free watchdog timer reset flag */ 386 #define RCU_RSTSCK_WWDGTRSTF BIT(30) /*!< window watchdog timer reset flag */ 387 #define RCU_RSTSCK_LPRSTF BIT(31) /*!< low-power reset flag */ 388 389 /* RCU_PLLSSCTL */ 390 #define RCU_PLLSSCTL_MODCNT BITS(0,12) /*!< these bits configure PLL spread spectrum modulation 391 profile amplitude and frequency. the following criteria 392 must be met: MODSTEP*MODCNT=215-1 */ 393 #define RCU_PLLSSCTL_MODSTEP BITS(13,27) /*!< these bits configure PLL spread spectrum modulation 394 profile amplitude and frequency. the following criteria 395 must be met: MODSTEP*MODCNT=215-1 */ 396 #define RCU_PLLSSCTL_SS_TYPE BIT(30) /*!< PLL spread spectrum modulation type select */ 397 #define RCU_PLLSSCTL_SSCGON BIT(31) /*!< PLL spread spectrum modulation enable */ 398 399 /* RCU_PLLI2S */ 400 #define RCU_PLLI2S_PLLI2SN BITS(6,14) /*!< the PLLI2S VCO clock multi factor */ 401 #define RCU_PLLI2S_PLLI2SQ BITS(24,27) /*!< the PLLI2S Q output frequency division factor from PLLI2S VCO clock */ 402 #define RCU_PLLI2S_PLLI2SR BITS(28,30) /*!< the PLLI2S R output frequency division factor from PLLI2S VCO clock */ 403 404 /* RCU_PLLSAI */ 405 #define RCU_PLLSAI_PLLSAIN BITS(6,14) /*!< the PLLSAI VCO clock multi factor */ 406 #define RCU_PLLSAI_PLLSAIP BITS(16,17) /*!< the PLLSAI P output frequency division factor from PLLSAI VCO clock */ 407 #define RCU_PLLSAI_PLLSAIQ BITS(24,27) /*!< the PLLSAI Q output frequency division factor from PLLSAI VCO clock */ 408 #define RCU_PLLSAI_PLLSAIR BITS(28,30) /*!< the PLLSAI R output frequency division factor from PLLSAI VCO clock */ 409 410 /* RCU_CFG1 */ 411 #define RCU_CFG1_PLLSAIRDIV BITS(16,17) /*!< the divider factor from PLLSAIR clock */ 412 #define RCU_CFG1_TIMERSEL BIT(24) /*!< TIMER clock selection */ 413 414 /* RCU_ADDCTL */ 415 #define RCU_ADDCTL_CK48MSEL BIT(0) /*!< 48MHz clock selection */ 416 #define RCU_ADDCTL_PLL48MSEL BIT(1) /*!< PLL48M clock selection */ 417 #define RCU_ADDCTL_IRC48MEN BIT(16) /*!< internal 48MHz RC oscillator enable */ 418 #define RCU_ADDCTL_IRC48MSTB BIT(17) /*!< internal 48MHz RC oscillator clock stabilization flag */ 419 #define RCU_ADDCTL_IRC48MCAL BITS(24,31) /*!< internal 48MHz RC oscillator calibration value register */ 420 421 /* RCU_ADDINT */ 422 #define RCU_ADDINT_IRC48MSTBIF BIT(6) /*!< IRC48M stabilization interrupt flag */ 423 #define RCU_ADDINT_IRC48MSTBIE BIT(14) /*!< internal 48 MHz RC oscillator stabilization interrupt enable */ 424 #define RCU_ADDINT_IRC48MSTBIC BIT(22) /*!< internal 48 MHz RC oscillator stabilization interrupt clear */ 425 426 /* RCU_ADDAPB1RST */ 427 #define RCU_ADDAPB1RST_CTCRST BIT(27) /*!< CTC reset */ 428 #define RCU_ADDAPB1RST_IREFRST BIT(31) /*!< IREF reset */ 429 430 /* RCU_ADDAPB1EN */ 431 #define RCU_ADDAPB1EN_CTCEN BIT(27) /*!< CTC clock enable */ 432 #define RCU_ADDAPB1EN_IREFEN BIT(31) /*!< IREF interface clock enable */ 433 434 /* RCU_ADDAPB1SPEN */ 435 #define RCU_ADDAPB1SPEN_CTCSPEN BIT(27) /*!< CTC clock enable during sleep mode */ 436 #define RCU_ADDAPB1SPEN_IREFSPEN BIT(31) /*!< IREF interface clock enable during sleep mode */ 437 438 /* RCU_VKEY */ 439 #define RCU_VKEY_KEY BITS(0,31) /*!< RCU_DSV key register */ 440 441 /* RCU_DSV */ 442 #define RCU_DSV_DSLPVS BITS(0,2) /*!< deep-sleep mode voltage select */ 443 444 /* constants definitions */ 445 /* define the peripheral clock enable bit position and its register index offset */ 446 #define RCU_REGIDX_BIT(regidx, bitpos) (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos)) 447 #define RCU_REG_VAL(periph) (REG32(RCU + ((uint32_t)(periph) >> 6))) 448 #define RCU_BIT_POS(val) ((uint32_t)(val) & 0x1FU) 449 /* define the voltage key unlock value */ 450 #define RCU_VKEY_UNLOCK ((uint32_t)0x1A2B3C4DU) 451 452 /* register offset */ 453 /* peripherals enable */ 454 #define AHB1EN_REG_OFFSET 0x30U /*!< AHB1 enable register offset */ 455 #define AHB2EN_REG_OFFSET 0x34U /*!< AHB2 enable register offset */ 456 #define AHB3EN_REG_OFFSET 0x38U /*!< AHB3 enable register offset */ 457 #define APB1EN_REG_OFFSET 0x40U /*!< APB1 enable register offset */ 458 #define APB2EN_REG_OFFSET 0x44U /*!< APB2 enable register offset */ 459 #define AHB1SPEN_REG_OFFSET 0x50U /*!< AHB1 sleep mode enable register offset */ 460 #define AHB2SPEN_REG_OFFSET 0x54U /*!< AHB2 sleep mode enable register offset */ 461 #define AHB3SPEN_REG_OFFSET 0x58U /*!< AHB3 sleep mode enable register offset */ 462 #define APB1SPEN_REG_OFFSET 0x60U /*!< APB1 sleep mode enable register offset */ 463 #define APB2SPEN_REG_OFFSET 0x64U /*!< APB2 sleep mode enable register offset */ 464 #define ADD_APB1EN_REG_OFFSET 0xE4U /*!< APB1 additional enable register offset */ 465 #define ADD_APB1SPEN_REG_OFFSET 0xE8U /*!< APB1 additional sleep mode enable register offset */ 466 467 /* peripherals reset */ 468 #define AHB1RST_REG_OFFSET 0x10U /*!< AHB1 reset register offset */ 469 #define AHB2RST_REG_OFFSET 0x14U /*!< AHB2 reset register offset */ 470 #define AHB3RST_REG_OFFSET 0x18U /*!< AHB3 reset register offset */ 471 #define APB1RST_REG_OFFSET 0x20U /*!< APB1 reset register offset */ 472 #define APB2RST_REG_OFFSET 0x24U /*!< APB2 reset register offset */ 473 #define ADD_APB1RST_REG_OFFSET 0xE0U /*!< APB1 additional reset register offset */ 474 #define RSTSCK_REG_OFFSET 0x74U /*!< reset source/clock register offset */ 475 476 /* clock control */ 477 #define CTL_REG_OFFSET 0x00U /*!< control register offset */ 478 #define BDCTL_REG_OFFSET 0x70U /*!< backup domain control register offset */ 479 #define ADDCTL_REG_OFFSET 0xC0U /*!< additional clock control register offset */ 480 481 /* clock stabilization and stuck interrupt */ 482 #define INT_REG_OFFSET 0x0CU /*!< clock interrupt register offset */ 483 #define ADDINT_REG_OFFSET 0xCCU /*!< additional clock interrupt register offset */ 484 485 /* configuration register */ 486 #define PLL_REG_OFFSET 0x04U /*!< PLL register offset */ 487 #define CFG0_REG_OFFSET 0x08U /*!< clock configuration register 0 offset */ 488 #define PLLSSCTL_REG_OFFSET 0x80U /*!< PLL clock spread spectrum control register offset */ 489 #define PLLI2S_REG_OFFSET 0x84U /*!< PLLI2S register offset */ 490 #define PLLSAI_REG_OFFSET 0x88U /*!< PLLSAI register offset */ 491 #define CFG1_REG_OFFSET 0x8CU /*!< clock configuration register 1 offset */ 492 493 /* peripheral clock enable */ 494 typedef enum 495 { 496 /* AHB1 peripherals */ 497 RCU_GPIOA = RCU_REGIDX_BIT(AHB1EN_REG_OFFSET, 0U), /*!< GPIOA clock */ 498 RCU_GPIOB = RCU_REGIDX_BIT(AHB1EN_REG_OFFSET, 1U), /*!< GPIOB clock */ 499 RCU_GPIOC = RCU_REGIDX_BIT(AHB1EN_REG_OFFSET, 2U), /*!< GPIOC clock */ 500 RCU_GPIOD = RCU_REGIDX_BIT(AHB1EN_REG_OFFSET, 3U), /*!< GPIOD clock */ 501 RCU_GPIOE = RCU_REGIDX_BIT(AHB1EN_REG_OFFSET, 4U), /*!< GPIOE clock */ 502 RCU_GPIOF = RCU_REGIDX_BIT(AHB1EN_REG_OFFSET, 5U), /*!< GPIOF clock */ 503 RCU_GPIOG = RCU_REGIDX_BIT(AHB1EN_REG_OFFSET, 6U), /*!< GPIOG clock */ 504 RCU_GPIOH = RCU_REGIDX_BIT(AHB1EN_REG_OFFSET, 7U), /*!< GPIOH clock */ 505 RCU_GPIOI = RCU_REGIDX_BIT(AHB1EN_REG_OFFSET, 8U), /*!< GPIOI clock */ 506 RCU_CRC = RCU_REGIDX_BIT(AHB1EN_REG_OFFSET, 12U), /*!< CRC clock */ 507 RCU_BKPSRAM = RCU_REGIDX_BIT(AHB1EN_REG_OFFSET, 18U), /*!< BKPSRAM clock */ 508 RCU_TCMSRAM = RCU_REGIDX_BIT(AHB1EN_REG_OFFSET, 20U), /*!< TCMSRAM clock */ 509 RCU_DMA0 = RCU_REGIDX_BIT(AHB1EN_REG_OFFSET, 21U), /*!< DMA0 clock */ 510 RCU_DMA1 = RCU_REGIDX_BIT(AHB1EN_REG_OFFSET, 22U), /*!< DMA1 clock */ 511 RCU_IPA = RCU_REGIDX_BIT(AHB1EN_REG_OFFSET, 23U), /*!< IPA clock */ 512 RCU_ENET = RCU_REGIDX_BIT(AHB1EN_REG_OFFSET, 25U), /*!< ENET clock */ 513 RCU_ENETTX = RCU_REGIDX_BIT(AHB1EN_REG_OFFSET, 26U), /*!< ENETTX clock */ 514 RCU_ENETRX = RCU_REGIDX_BIT(AHB1EN_REG_OFFSET, 27U), /*!< ENETRX clock */ 515 RCU_ENETPTP = RCU_REGIDX_BIT(AHB1EN_REG_OFFSET, 28U), /*!< ENETPTP clock */ 516 RCU_USBHS = RCU_REGIDX_BIT(AHB1EN_REG_OFFSET, 29U), /*!< USBHS clock */ 517 RCU_USBHSULPI = RCU_REGIDX_BIT(AHB1EN_REG_OFFSET, 30U), /*!< USBHSULPI clock */ 518 /* AHB2 peripherals */ 519 RCU_DCI = RCU_REGIDX_BIT(AHB2EN_REG_OFFSET, 0U), /*!< DCI clock */ 520 RCU_TRNG = RCU_REGIDX_BIT(AHB2EN_REG_OFFSET, 6U), /*!< TRNG clock */ 521 RCU_USBFS = RCU_REGIDX_BIT(AHB2EN_REG_OFFSET, 7U), /*!< USBFS clock */ 522 /* AHB3 peripherals */ 523 RCU_EXMC = RCU_REGIDX_BIT(AHB3EN_REG_OFFSET, 0U), /*!< EXMC clock */ 524 /* APB1 peripherals */ 525 RCU_TIMER1 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 0U), /*!< TIMER1 clock */ 526 RCU_TIMER2 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 1U), /*!< TIMER2 clock */ 527 RCU_TIMER3 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 2U), /*!< TIMER3 clock */ 528 RCU_TIMER4 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 3U), /*!< TIMER4 clock */ 529 RCU_TIMER5 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 4U), /*!< TIMER5 clock */ 530 RCU_TIMER6 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 5U), /*!< TIMER6 clock */ 531 RCU_TIMER11 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 6U), /*!< TIMER11 clock */ 532 RCU_TIMER12 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 7U), /*!< TIMER12 clock */ 533 RCU_TIMER13 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 8U), /*!< TIMER13 clock */ 534 RCU_WWDGT = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 11U), /*!< WWDGT clock */ 535 RCU_SPI1 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 14U), /*!< SPI1 clock */ 536 RCU_SPI2 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 15U), /*!< SPI2 clock */ 537 RCU_USART1 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 17U), /*!< USART1 clock */ 538 RCU_USART2 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 18U), /*!< USART2 clock */ 539 RCU_UART3 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 19U), /*!< UART3 clock */ 540 RCU_UART4 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 20U), /*!< UART4 clock */ 541 RCU_I2C0 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 21U), /*!< I2C0 clock */ 542 RCU_I2C1 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 22U), /*!< I2C1 clock */ 543 RCU_I2C2 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 23U), /*!< I2C2 clock */ 544 RCU_CAN0 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 25U), /*!< CAN0 clock */ 545 RCU_CAN1 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 26U), /*!< CAN1 clock */ 546 RCU_PMU = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 28U), /*!< PMU clock */ 547 RCU_DAC = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 29U), /*!< DAC clock */ 548 RCU_UART6 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 30U), /*!< UART6 clock */ 549 RCU_UART7 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 31U), /*!< UART7 clock */ 550 RCU_RTC = RCU_REGIDX_BIT(BDCTL_REG_OFFSET, 15U), /*!< RTC clock */ 551 /* APB2 peripherals */ 552 RCU_TIMER0 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 0U), /*!< TIMER0 clock */ 553 RCU_TIMER7 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 1U), /*!< TIMER7 clock */ 554 RCU_USART0 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 4U), /*!< USART0 clock */ 555 RCU_USART5 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 5U), /*!< USART5 clock */ 556 RCU_ADC0 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 8U), /*!< ADC0 clock */ 557 RCU_ADC1 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 9U), /*!< ADC1 clock */ 558 RCU_ADC2 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 10U), /*!< ADC2 clock */ 559 RCU_SDIO = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 11U), /*!< SDIO clock */ 560 RCU_SPI0 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 12U), /*!< SPI0 clock */ 561 RCU_SPI3 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 13U), /*!< SPI3 clock */ 562 RCU_SYSCFG = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 14U), /*!< SYSCFG clock */ 563 RCU_TIMER8 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 16U), /*!< TIMER8 clock */ 564 RCU_TIMER9 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 17U), /*!< TIMER9 clock */ 565 RCU_TIMER10 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 18U), /*!< TIMER10 clock */ 566 RCU_SPI4 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 20U), /*!< SPI4 clock */ 567 RCU_SPI5 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 21U), /*!< SPI5 clock */ 568 RCU_TLI = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 26U), /*!< TLI clock */ 569 /* APB1 additional peripherals */ 570 RCU_CTC = RCU_REGIDX_BIT(ADD_APB1EN_REG_OFFSET, 27U), /*!< CTC clock */ 571 RCU_IREF = RCU_REGIDX_BIT(ADD_APB1EN_REG_OFFSET, 31U), /*!< IREF clock */ 572 }rcu_periph_enum; 573 574 /* peripheral clock enable when sleep mode*/ 575 typedef enum 576 { 577 /* AHB1 peripherals */ 578 RCU_GPIOA_SLP = RCU_REGIDX_BIT(AHB1SPEN_REG_OFFSET, 0U), /*!< GPIOA clock */ 579 RCU_GPIOB_SLP = RCU_REGIDX_BIT(AHB1SPEN_REG_OFFSET, 1U), /*!< GPIOB clock */ 580 RCU_GPIOC_SLP = RCU_REGIDX_BIT(AHB1SPEN_REG_OFFSET, 2U), /*!< GPIOC clock */ 581 RCU_GPIOD_SLP = RCU_REGIDX_BIT(AHB1SPEN_REG_OFFSET, 3U), /*!< GPIOD clock */ 582 RCU_GPIOE_SLP = RCU_REGIDX_BIT(AHB1SPEN_REG_OFFSET, 4U), /*!< GPIOE clock */ 583 RCU_GPIOF_SLP = RCU_REGIDX_BIT(AHB1SPEN_REG_OFFSET, 5U), /*!< GPIOF clock */ 584 RCU_GPIOG_SLP = RCU_REGIDX_BIT(AHB1SPEN_REG_OFFSET, 6U), /*!< GPIOG clock */ 585 RCU_GPIOH_SLP = RCU_REGIDX_BIT(AHB1SPEN_REG_OFFSET, 7U), /*!< GPIOH clock */ 586 RCU_GPIOI_SLP = RCU_REGIDX_BIT(AHB1SPEN_REG_OFFSET, 8U), /*!< GPIOI clock */ 587 RCU_CRC_SLP = RCU_REGIDX_BIT(AHB1SPEN_REG_OFFSET, 12U), /*!< CRC clock */ 588 RCU_FMC_SLP = RCU_REGIDX_BIT(AHB1SPEN_REG_OFFSET, 15U), /*!< FMC clock */ 589 RCU_SRAM0_SLP = RCU_REGIDX_BIT(AHB1SPEN_REG_OFFSET, 16U), /*!< SRAM0 clock */ 590 RCU_SRAM1_SLP = RCU_REGIDX_BIT(AHB1SPEN_REG_OFFSET, 17U), /*!< SRAM1 clock */ 591 RCU_BKPSRAM_SLP = RCU_REGIDX_BIT(AHB1SPEN_REG_OFFSET, 18U), /*!< BKPSRAM clock */ 592 RCU_SRAM2_SLP = RCU_REGIDX_BIT(AHB1SPEN_REG_OFFSET, 19U), /*!< SRAM2 clock */ 593 RCU_DMA0_SLP = RCU_REGIDX_BIT(AHB1SPEN_REG_OFFSET, 21U), /*!< DMA0 clock */ 594 RCU_DMA1_SLP = RCU_REGIDX_BIT(AHB1SPEN_REG_OFFSET, 22U), /*!< DMA1 clock */ 595 RCU_IPA_SLP = RCU_REGIDX_BIT(AHB1SPEN_REG_OFFSET, 23U), /*!< IPA clock */ 596 RCU_ENET_SLP = RCU_REGIDX_BIT(AHB1SPEN_REG_OFFSET, 25U), /*!< ENET clock */ 597 RCU_ENETTX_SLP = RCU_REGIDX_BIT(AHB1SPEN_REG_OFFSET, 26U), /*!< ENETTX clock */ 598 RCU_ENETRX_SLP = RCU_REGIDX_BIT(AHB1SPEN_REG_OFFSET, 27U), /*!< ENETRX clock */ 599 RCU_ENETPTP_SLP = RCU_REGIDX_BIT(AHB1SPEN_REG_OFFSET, 28U), /*!< ENETPTP clock */ 600 RCU_USBHS_SLP = RCU_REGIDX_BIT(AHB1SPEN_REG_OFFSET, 29U), /*!< USBHS clock */ 601 RCU_USBHSULPI_SLP = RCU_REGIDX_BIT(AHB1SPEN_REG_OFFSET, 30U), /*!< USBHSULPI clock */ 602 /* AHB2 peripherals */ 603 RCU_DCI_SLP = RCU_REGIDX_BIT(AHB2SPEN_REG_OFFSET, 0U), /*!< DCI clock */ 604 RCU_TRNG_SLP = RCU_REGIDX_BIT(AHB2SPEN_REG_OFFSET, 6U), /*!< TRNG clock */ 605 RCU_USBFS_SLP = RCU_REGIDX_BIT(AHB2SPEN_REG_OFFSET, 7U), /*!< USBFS clock */ 606 /* AHB3 peripherals */ 607 RCU_EXMC_SLP = RCU_REGIDX_BIT(AHB3SPEN_REG_OFFSET, 0U), /*!< EXMC clock */ 608 /* APB1 peripherals */ 609 RCU_TIMER1_SLP = RCU_REGIDX_BIT(APB1SPEN_REG_OFFSET, 0U), /*!< TIMER1 clock */ 610 RCU_TIMER2_SLP = RCU_REGIDX_BIT(APB1SPEN_REG_OFFSET, 1U), /*!< TIMER2 clock */ 611 RCU_TIMER3_SLP = RCU_REGIDX_BIT(APB1SPEN_REG_OFFSET, 2U), /*!< TIMER3 clock */ 612 RCU_TIMER4_SLP = RCU_REGIDX_BIT(APB1SPEN_REG_OFFSET, 3U), /*!< TIMER4 clock */ 613 RCU_TIMER5_SLP = RCU_REGIDX_BIT(APB1SPEN_REG_OFFSET, 4U), /*!< TIMER5 clock */ 614 RCU_TIMER6_SLP = RCU_REGIDX_BIT(APB1SPEN_REG_OFFSET, 5U), /*!< TIMER6 clock */ 615 RCU_TIMER11_SLP = RCU_REGIDX_BIT(APB1SPEN_REG_OFFSET, 6U), /*!< TIMER11 clock */ 616 RCU_TIMER12_SLP = RCU_REGIDX_BIT(APB1SPEN_REG_OFFSET, 7U), /*!< TIMER12 clock */ 617 RCU_TIMER13_SLP = RCU_REGIDX_BIT(APB1SPEN_REG_OFFSET, 8U), /*!< TIMER13 clock */ 618 RCU_WWDGT_SLP = RCU_REGIDX_BIT(APB1SPEN_REG_OFFSET, 11U), /*!< WWDGT clock */ 619 RCU_SPI1_SLP = RCU_REGIDX_BIT(APB1SPEN_REG_OFFSET, 14U), /*!< SPI1 clock */ 620 RCU_SPI2_SLP = RCU_REGIDX_BIT(APB1SPEN_REG_OFFSET, 15U), /*!< SPI2 clock */ 621 RCU_USART1_SLP = RCU_REGIDX_BIT(APB1SPEN_REG_OFFSET, 17U), /*!< USART1 clock */ 622 RCU_USART2_SLP = RCU_REGIDX_BIT(APB1SPEN_REG_OFFSET, 18U), /*!< USART2 clock */ 623 RCU_UART3_SLP = RCU_REGIDX_BIT(APB1SPEN_REG_OFFSET, 19U), /*!< UART3 clock */ 624 RCU_UART4_SLP = RCU_REGIDX_BIT(APB1SPEN_REG_OFFSET, 20U), /*!< UART4 clock */ 625 RCU_I2C0_SLP = RCU_REGIDX_BIT(APB1SPEN_REG_OFFSET, 21U), /*!< I2C0 clock */ 626 RCU_I2C1_SLP = RCU_REGIDX_BIT(APB1SPEN_REG_OFFSET, 22U), /*!< I2C1 clock */ 627 RCU_I2C2_SLP = RCU_REGIDX_BIT(APB1SPEN_REG_OFFSET, 23U), /*!< I2C2 clock */ 628 RCU_CAN0_SLP = RCU_REGIDX_BIT(APB1SPEN_REG_OFFSET, 25U), /*!< CAN0 clock */ 629 RCU_CAN1_SLP = RCU_REGIDX_BIT(APB1SPEN_REG_OFFSET, 26U), /*!< CAN1 clock */ 630 RCU_PMU_SLP = RCU_REGIDX_BIT(APB1SPEN_REG_OFFSET, 28U), /*!< PMU clock */ 631 RCU_DAC_SLP = RCU_REGIDX_BIT(APB1SPEN_REG_OFFSET, 29U), /*!< DAC clock */ 632 RCU_UART6_SLP = RCU_REGIDX_BIT(APB1SPEN_REG_OFFSET, 30U), /*!< UART6 clock */ 633 RCU_UART7_SLP = RCU_REGIDX_BIT(APB1SPEN_REG_OFFSET, 31U), /*!< UART7 clock */ 634 /* APB2 peripherals */ 635 RCU_TIMER0_SLP = RCU_REGIDX_BIT(APB2SPEN_REG_OFFSET, 0U), /*!< TIMER0 clock */ 636 RCU_TIMER7_SLP = RCU_REGIDX_BIT(APB2SPEN_REG_OFFSET, 1U), /*!< TIMER7 clock */ 637 RCU_USART0_SLP = RCU_REGIDX_BIT(APB2SPEN_REG_OFFSET, 4U), /*!< USART0 clock */ 638 RCU_USART5_SLP = RCU_REGIDX_BIT(APB2SPEN_REG_OFFSET, 5U), /*!< USART5 clock */ 639 RCU_ADC0_SLP = RCU_REGIDX_BIT(APB2SPEN_REG_OFFSET, 8U), /*!< ADC0 clock */ 640 RCU_ADC1_SLP = RCU_REGIDX_BIT(APB2SPEN_REG_OFFSET, 9U), /*!< ADC1 clock */ 641 RCU_ADC2_SLP = RCU_REGIDX_BIT(APB2SPEN_REG_OFFSET, 10U), /*!< ADC2 clock */ 642 RCU_SDIO_SLP = RCU_REGIDX_BIT(APB2SPEN_REG_OFFSET, 11U), /*!< SDIO clock */ 643 RCU_SPI0_SLP = RCU_REGIDX_BIT(APB2SPEN_REG_OFFSET, 12U), /*!< SPI0 clock */ 644 RCU_SPI3_SLP = RCU_REGIDX_BIT(APB2SPEN_REG_OFFSET, 13U), /*!< SPI3 clock */ 645 RCU_SYSCFG_SLP = RCU_REGIDX_BIT(APB2SPEN_REG_OFFSET, 14U), /*!< SYSCFG clock */ 646 RCU_TIMER8_SLP = RCU_REGIDX_BIT(APB2SPEN_REG_OFFSET, 16U), /*!< TIMER8 clock */ 647 RCU_TIMER9_SLP = RCU_REGIDX_BIT(APB2SPEN_REG_OFFSET, 17U), /*!< TIMER9 clock */ 648 RCU_TIMER10_SLP = RCU_REGIDX_BIT(APB2SPEN_REG_OFFSET, 18U), /*!< TIMER10 clock */ 649 RCU_SPI4_SLP = RCU_REGIDX_BIT(APB2SPEN_REG_OFFSET, 20U), /*!< SPI4 clock */ 650 RCU_SPI5_SLP = RCU_REGIDX_BIT(APB2SPEN_REG_OFFSET, 21U), /*!< SPI5 clock */ 651 RCU_TLI_SLP = RCU_REGIDX_BIT(APB2SPEN_REG_OFFSET, 26U), /*!< TLI clock */ 652 /* APB1 additional peripherals */ 653 RCU_CTC_SLP = RCU_REGIDX_BIT(ADD_APB1SPEN_REG_OFFSET, 27U), /*!< CTC clock */ 654 RCU_IREF_SLP = RCU_REGIDX_BIT(ADD_APB1SPEN_REG_OFFSET, 31U), /*!< IREF clock */ 655 }rcu_periph_sleep_enum; 656 657 /* peripherals reset */ 658 typedef enum 659 { 660 /* AHB1 peripherals */ 661 RCU_GPIOARST = RCU_REGIDX_BIT(AHB1RST_REG_OFFSET, 0U), /*!< GPIOA clock reset */ 662 RCU_GPIOBRST = RCU_REGIDX_BIT(AHB1RST_REG_OFFSET, 1U), /*!< GPIOB clock reset */ 663 RCU_GPIOCRST = RCU_REGIDX_BIT(AHB1RST_REG_OFFSET, 2U), /*!< GPIOC clock reset */ 664 RCU_GPIODRST = RCU_REGIDX_BIT(AHB1RST_REG_OFFSET, 3U), /*!< GPIOD clock reset */ 665 RCU_GPIOERST = RCU_REGIDX_BIT(AHB1RST_REG_OFFSET, 4U), /*!< GPIOE clock reset */ 666 RCU_GPIOFRST = RCU_REGIDX_BIT(AHB1RST_REG_OFFSET, 5U), /*!< GPIOF clock reset */ 667 RCU_GPIOGRST = RCU_REGIDX_BIT(AHB1RST_REG_OFFSET, 6U), /*!< GPIOG clock reset */ 668 RCU_GPIOHRST = RCU_REGIDX_BIT(AHB1RST_REG_OFFSET, 7U), /*!< GPIOH clock reset */ 669 RCU_GPIOIRST = RCU_REGIDX_BIT(AHB1RST_REG_OFFSET, 8U), /*!< GPIOI clock reset */ 670 RCU_CRCRST = RCU_REGIDX_BIT(AHB1RST_REG_OFFSET, 12U), /*!< CRC clock reset */ 671 RCU_DMA0RST = RCU_REGIDX_BIT(AHB1RST_REG_OFFSET, 21U), /*!< DMA0 clock reset */ 672 RCU_DMA1RST = RCU_REGIDX_BIT(AHB1RST_REG_OFFSET, 22U), /*!< DMA1 clock reset */ 673 RCU_IPARST = RCU_REGIDX_BIT(AHB1RST_REG_OFFSET, 23U), /*!< IPA clock reset */ 674 RCU_ENETRST = RCU_REGIDX_BIT(AHB1RST_REG_OFFSET, 25U), /*!< ENET clock reset */ 675 RCU_USBHSRST = RCU_REGIDX_BIT(AHB1RST_REG_OFFSET, 29U), /*!< USBHS clock reset */ 676 /* AHB2 peripherals */ 677 RCU_DCIRST = RCU_REGIDX_BIT(AHB2RST_REG_OFFSET, 0U), /*!< DCI clock reset */ 678 RCU_TRNGRST = RCU_REGIDX_BIT(AHB2RST_REG_OFFSET, 6U), /*!< TRNG clock reset */ 679 RCU_USBFSRST = RCU_REGIDX_BIT(AHB2RST_REG_OFFSET, 7U), /*!< USBFS clock reset */ 680 /* AHB3 peripherals */ 681 RCU_EXMCRST = RCU_REGIDX_BIT(AHB3RST_REG_OFFSET, 0U), /*!< EXMC clock reset */ 682 /* APB1 peripherals */ 683 RCU_TIMER1RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 0U), /*!< TIMER1 clock reset */ 684 RCU_TIMER2RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 1U), /*!< TIMER2 clock reset */ 685 RCU_TIMER3RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 2U), /*!< TIMER3 clock reset */ 686 RCU_TIMER4RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 3U), /*!< TIMER4 clock reset */ 687 RCU_TIMER5RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 4U), /*!< TIMER5 clock reset */ 688 RCU_TIMER6RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 5U), /*!< TIMER6 clock reset */ 689 RCU_TIMER11RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 6U), /*!< TIMER11 clock reset */ 690 RCU_TIMER12RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 7U), /*!< TIMER12 clock reset */ 691 RCU_TIMER13RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 8U), /*!< TIMER13 clock reset */ 692 RCU_WWDGTRST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 11U), /*!< WWDGT clock reset */ 693 RCU_SPI1RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 14U), /*!< SPI1 clock reset */ 694 RCU_SPI2RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 15U), /*!< SPI2 clock reset */ 695 RCU_USART1RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 17U), /*!< USART1 clock reset */ 696 RCU_USART2RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 18U), /*!< USART2 clock reset */ 697 RCU_UART3RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 19U), /*!< UART3 clock reset */ 698 RCU_UART4RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 20U), /*!< UART4 clock reset */ 699 RCU_I2C0RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 21U), /*!< I2C0 clock reset */ 700 RCU_I2C1RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 22U), /*!< I2C1 clock reset */ 701 RCU_I2C2RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 23U), /*!< I2C2 clock reset */ 702 RCU_CAN0RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 25U), /*!< CAN0 clock reset */ 703 RCU_CAN1RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 26U), /*!< CAN1 clock reset */ 704 RCU_PMURST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 28U), /*!< PMU clock reset */ 705 RCU_DACRST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 29U), /*!< DAC clock reset */ 706 RCU_UART6RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 30U), /*!< UART6 clock reset */ 707 RCU_UART7RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 31U), /*!< UART7 clock reset */ 708 /* APB2 peripherals */ 709 RCU_TIMER0RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 0U), /*!< TIMER0 clock reset */ 710 RCU_TIMER7RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 1U), /*!< TIMER7 clock reset */ 711 RCU_USART0RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 4U), /*!< USART0 clock reset */ 712 RCU_USART5RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 5U), /*!< USART5 clock reset */ 713 RCU_ADCRST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 8U), /*!< ADCs all clock reset */ 714 RCU_SDIORST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 11U), /*!< SDIO clock reset */ 715 RCU_SPI0RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 12U), /*!< SPI0 clock reset */ 716 RCU_SPI3RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 13U), /*!< SPI3 clock reset */ 717 RCU_SYSCFGRST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 14U), /*!< SYSCFG clock reset */ 718 RCU_TIMER8RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 16U), /*!< TIMER8 clock reset */ 719 RCU_TIMER9RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 17U), /*!< TIMER9 clock reset */ 720 RCU_TIMER10RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 18U), /*!< TIMER10 clock reset */ 721 RCU_SPI4RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 20U), /*!< SPI4 clock reset */ 722 RCU_SPI5RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 21U), /*!< SPI5 clock reset */ 723 RCU_TLIRST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 26U), /*!< TLI clock reset */ 724 /* APB1 additional peripherals */ 725 RCU_CTCRST = RCU_REGIDX_BIT(ADD_APB1RST_REG_OFFSET, 27U), /*!< CTC clock reset */ 726 RCU_IREFRST = RCU_REGIDX_BIT(ADD_APB1RST_REG_OFFSET, 31U) /*!< IREF clock reset */ 727 }rcu_periph_reset_enum; 728 729 /* clock stabilization and peripheral reset flags */ 730 typedef enum 731 { 732 /* clock stabilization flags */ 733 RCU_FLAG_IRC16MSTB = RCU_REGIDX_BIT(CTL_REG_OFFSET, 1U), /*!< IRC16M stabilization flags */ 734 RCU_FLAG_HXTALSTB = RCU_REGIDX_BIT(CTL_REG_OFFSET, 17U), /*!< HXTAL stabilization flags */ 735 RCU_FLAG_PLLSTB = RCU_REGIDX_BIT(CTL_REG_OFFSET, 25U), /*!< PLL stabilization flags */ 736 RCU_FLAG_PLLI2SSTB = RCU_REGIDX_BIT(CTL_REG_OFFSET, 27U), /*!< PLLI2S stabilization flags */ 737 RCU_FLAG_PLLSAISTB = RCU_REGIDX_BIT(CTL_REG_OFFSET, 29U), /*!< PLLSAI stabilization flags */ 738 RCU_FLAG_LXTALSTB = RCU_REGIDX_BIT(BDCTL_REG_OFFSET, 1U), /*!< LXTAL stabilization flags */ 739 RCU_FLAG_IRC32KSTB = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 1U), /*!< IRC32K stabilization flags */ 740 RCU_FLAG_IRC48MSTB = RCU_REGIDX_BIT(ADDCTL_REG_OFFSET, 17U), /*!< IRC48M stabilization flags */ 741 /* reset source flags */ 742 RCU_FLAG_BORRST = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 25U), /*!< BOR reset flags */ 743 RCU_FLAG_EPRST = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 26U), /*!< External PIN reset flags */ 744 RCU_FLAG_PORRST = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 27U), /*!< power reset flags */ 745 RCU_FLAG_SWRST = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 28U), /*!< Software reset flags */ 746 RCU_FLAG_FWDGTRST = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 29U), /*!< FWDGT reset flags */ 747 RCU_FLAG_WWDGTRST = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 30U), /*!< WWDGT reset flags */ 748 RCU_FLAG_LPRST = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 31U), /*!< Low-power reset flags */ 749 }rcu_flag_enum; 750 751 /* clock stabilization and ckm interrupt flags */ 752 typedef enum 753 { 754 RCU_INT_FLAG_IRC32KSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 0U), /*!< IRC32K stabilization interrupt flag */ 755 RCU_INT_FLAG_LXTALSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 1U), /*!< LXTAL stabilization interrupt flag */ 756 RCU_INT_FLAG_IRC16MSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 2U), /*!< IRC16M stabilization interrupt flag */ 757 RCU_INT_FLAG_HXTALSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 3U), /*!< HXTAL stabilization interrupt flag */ 758 RCU_INT_FLAG_PLLSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 4U), /*!< PLL stabilization interrupt flag */ 759 RCU_INT_FLAG_PLLI2SSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 5U), /*!< PLLI2S stabilization interrupt flag */ 760 RCU_INT_FLAG_PLLSAISTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 6U), /*!< PLLSAI stabilization interrupt flag */ 761 RCU_INT_FLAG_CKM = RCU_REGIDX_BIT(INT_REG_OFFSET, 7U), /*!< HXTAL clock stuck interrupt flag */ 762 RCU_INT_FLAG_IRC48MSTB = RCU_REGIDX_BIT(ADDINT_REG_OFFSET, 6U), /*!< IRC48M stabilization interrupt flag */ 763 }rcu_int_flag_enum; 764 765 /* clock stabilization and stuck interrupt flags clear */ 766 typedef enum 767 { 768 RCU_INT_FLAG_IRC32KSTB_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 16U), /*!< IRC32K stabilization interrupt flags clear */ 769 RCU_INT_FLAG_LXTALSTB_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 17U), /*!< LXTAL stabilization interrupt flags clear */ 770 RCU_INT_FLAG_IRC16MSTB_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 18U), /*!< IRC16M stabilization interrupt flags clear */ 771 RCU_INT_FLAG_HXTALSTB_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 19U), /*!< HXTAL stabilization interrupt flags clear */ 772 RCU_INT_FLAG_PLLSTB_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 20U), /*!< PLL stabilization interrupt flags clear */ 773 RCU_INT_FLAG_PLLI2SSTB_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 21U), /*!< PLLI2S stabilization interrupt flags clear */ 774 RCU_INT_FLAG_PLLSAISTB_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 22U), /*!< PLLSAI stabilization interrupt flags clear */ 775 RCU_INT_FLAG_CKM_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 23U), /*!< CKM interrupt flags clear */ 776 RCU_INT_FLAG_IRC48MSTB_CLR = RCU_REGIDX_BIT(ADDINT_REG_OFFSET, 22U), /*!< internal 48 MHz RC oscillator stabilization interrupt clear */ 777 }rcu_int_flag_clear_enum; 778 779 /* clock stabilization interrupt enable or disable */ 780 typedef enum 781 { 782 RCU_INT_IRC32KSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 8U), /*!< IRC32K stabilization interrupt */ 783 RCU_INT_LXTALSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 9U), /*!< LXTAL stabilization interrupt */ 784 RCU_INT_IRC16MSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 10U), /*!< IRC16M stabilization interrupt */ 785 RCU_INT_HXTALSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 11U), /*!< HXTAL stabilization interrupt */ 786 RCU_INT_PLLSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 12U), /*!< PLL stabilization interrupt */ 787 RCU_INT_PLLI2SSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 13U), /*!< PLLI2S stabilization interrupt */ 788 RCU_INT_PLLSAISTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 14U), /*!< PLLSAI stabilization interrupt */ 789 RCU_INT_IRC48MSTB = RCU_REGIDX_BIT(ADDINT_REG_OFFSET, 14U), /*!< internal 48 MHz RC oscillator stabilization interrupt */ 790 }rcu_int_enum; 791 792 /* oscillator types */ 793 typedef enum 794 { 795 RCU_HXTAL = RCU_REGIDX_BIT(CTL_REG_OFFSET, 16U), /*!< HXTAL */ 796 RCU_LXTAL = RCU_REGIDX_BIT(BDCTL_REG_OFFSET, 0U), /*!< LXTAL */ 797 RCU_IRC16M = RCU_REGIDX_BIT(CTL_REG_OFFSET, 0U), /*!< IRC16M */ 798 RCU_IRC48M = RCU_REGIDX_BIT(ADDCTL_REG_OFFSET, 16U), /*!< IRC48M */ 799 RCU_IRC32K = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 0U), /*!< IRC32K */ 800 RCU_PLL_CK = RCU_REGIDX_BIT(CTL_REG_OFFSET, 24U), /*!< PLL */ 801 RCU_PLLI2S_CK = RCU_REGIDX_BIT(CTL_REG_OFFSET, 26U), /*!< PLLI2S */ 802 RCU_PLLSAI_CK = RCU_REGIDX_BIT(CTL_REG_OFFSET, 28U), /*!< PLLSAI */ 803 }rcu_osci_type_enum; 804 805 /* rcu clock frequency */ 806 typedef enum 807 { 808 CK_SYS = 0, /*!< system clock */ 809 CK_AHB, /*!< AHB clock */ 810 CK_APB1, /*!< APB1 clock */ 811 CK_APB2, /*!< APB2 clock */ 812 }rcu_clock_freq_enum; 813 814 /* RCU_CFG0 register bit define */ 815 /* system clock source select */ 816 #define CFG0_SCS(regval) (BITS(0,1) & ((uint32_t)(regval) << 0)) 817 #define RCU_CKSYSSRC_IRC16M CFG0_SCS(0) /*!< system clock source select IRC16M */ 818 #define RCU_CKSYSSRC_HXTAL CFG0_SCS(1) /*!< system clock source select HXTAL */ 819 #define RCU_CKSYSSRC_PLLP CFG0_SCS(2) /*!< system clock source select PLLP */ 820 821 /* system clock source select status */ 822 #define CFG0_SCSS(regval) (BITS(2,3) & ((uint32_t)(regval) << 2)) 823 #define RCU_SCSS_IRC16M CFG0_SCSS(0) /*!< system clock source select IRC16M */ 824 #define RCU_SCSS_HXTAL CFG0_SCSS(1) /*!< system clock source select HXTAL */ 825 #define RCU_SCSS_PLLP CFG0_SCSS(2) /*!< system clock source select PLLP */ 826 827 /* AHB prescaler selection */ 828 #define CFG0_AHBPSC(regval) (BITS(4,7) & ((uint32_t)(regval) << 4)) 829 #define RCU_AHB_CKSYS_DIV1 CFG0_AHBPSC(0) /*!< AHB prescaler select CK_SYS */ 830 #define RCU_AHB_CKSYS_DIV2 CFG0_AHBPSC(8) /*!< AHB prescaler select CK_SYS/2 */ 831 #define RCU_AHB_CKSYS_DIV4 CFG0_AHBPSC(9) /*!< AHB prescaler select CK_SYS/4 */ 832 #define RCU_AHB_CKSYS_DIV8 CFG0_AHBPSC(10) /*!< AHB prescaler select CK_SYS/8 */ 833 #define RCU_AHB_CKSYS_DIV16 CFG0_AHBPSC(11) /*!< AHB prescaler select CK_SYS/16 */ 834 #define RCU_AHB_CKSYS_DIV64 CFG0_AHBPSC(12) /*!< AHB prescaler select CK_SYS/64 */ 835 #define RCU_AHB_CKSYS_DIV128 CFG0_AHBPSC(13) /*!< AHB prescaler select CK_SYS/128 */ 836 #define RCU_AHB_CKSYS_DIV256 CFG0_AHBPSC(14) /*!< AHB prescaler select CK_SYS/256 */ 837 #define RCU_AHB_CKSYS_DIV512 CFG0_AHBPSC(15) /*!< AHB prescaler select CK_SYS/512 */ 838 839 /* APB1 prescaler selection */ 840 #define CFG0_APB1PSC(regval) (BITS(10,12) & ((uint32_t)(regval) << 10)) 841 #define RCU_APB1_CKAHB_DIV1 CFG0_APB1PSC(0) /*!< APB1 prescaler select CK_AHB */ 842 #define RCU_APB1_CKAHB_DIV2 CFG0_APB1PSC(4) /*!< APB1 prescaler select CK_AHB/2 */ 843 #define RCU_APB1_CKAHB_DIV4 CFG0_APB1PSC(5) /*!< APB1 prescaler select CK_AHB/4 */ 844 #define RCU_APB1_CKAHB_DIV8 CFG0_APB1PSC(6) /*!< APB1 prescaler select CK_AHB/8 */ 845 #define RCU_APB1_CKAHB_DIV16 CFG0_APB1PSC(7) /*!< APB1 prescaler select CK_AHB/16 */ 846 847 /* APB2 prescaler selection */ 848 #define CFG0_APB2PSC(regval) (BITS(13,15) & ((uint32_t)(regval) << 13)) 849 #define RCU_APB2_CKAHB_DIV1 CFG0_APB2PSC(0) /*!< APB2 prescaler select CK_AHB */ 850 #define RCU_APB2_CKAHB_DIV2 CFG0_APB2PSC(4) /*!< APB2 prescaler select CK_AHB/2 */ 851 #define RCU_APB2_CKAHB_DIV4 CFG0_APB2PSC(5) /*!< APB2 prescaler select CK_AHB/4 */ 852 #define RCU_APB2_CKAHB_DIV8 CFG0_APB2PSC(6) /*!< APB2 prescaler select CK_AHB/8 */ 853 #define RCU_APB2_CKAHB_DIV16 CFG0_APB2PSC(7) /*!< APB2 prescaler select CK_AHB/16 */ 854 855 /* RTC clock divider factor from HXTAL clock */ 856 #define CFG0_RTCDIV(regval) (BITS(16,20) & ((uint32_t)(regval) << 16)) 857 #define RCU_RTC_HXTAL_NONE CFG0_RTCDIV(0) /*!< no clock for RTC */ 858 #define RCU_RTC_HXTAL_DIV2 CFG0_RTCDIV(2) /*!< RTCDIV clock select CK_HXTAL/2 */ 859 #define RCU_RTC_HXTAL_DIV3 CFG0_RTCDIV(3) /*!< RTCDIV clock select CK_HXTAL/3 */ 860 #define RCU_RTC_HXTAL_DIV4 CFG0_RTCDIV(4) /*!< RTCDIV clock select CK_HXTAL/4 */ 861 #define RCU_RTC_HXTAL_DIV5 CFG0_RTCDIV(5) /*!< RTCDIV clock select CK_HXTAL/5 */ 862 #define RCU_RTC_HXTAL_DIV6 CFG0_RTCDIV(6) /*!< RTCDIV clock select CK_HXTAL/6 */ 863 #define RCU_RTC_HXTAL_DIV7 CFG0_RTCDIV(7) /*!< RTCDIV clock select CK_HXTAL/7 */ 864 #define RCU_RTC_HXTAL_DIV8 CFG0_RTCDIV(8) /*!< RTCDIV clock select CK_HXTAL/8 */ 865 #define RCU_RTC_HXTAL_DIV9 CFG0_RTCDIV(9) /*!< RTCDIV clock select CK_HXTAL/9 */ 866 #define RCU_RTC_HXTAL_DIV10 CFG0_RTCDIV(10) /*!< RTCDIV clock select CK_HXTAL/10 */ 867 #define RCU_RTC_HXTAL_DIV11 CFG0_RTCDIV(11) /*!< RTCDIV clock select CK_HXTAL/11 */ 868 #define RCU_RTC_HXTAL_DIV12 CFG0_RTCDIV(12) /*!< RTCDIV clock select CK_HXTAL/12 */ 869 #define RCU_RTC_HXTAL_DIV13 CFG0_RTCDIV(13) /*!< RTCDIV clock select CK_HXTAL/13 */ 870 #define RCU_RTC_HXTAL_DIV14 CFG0_RTCDIV(14) /*!< RTCDIV clock select CK_HXTAL/14 */ 871 #define RCU_RTC_HXTAL_DIV15 CFG0_RTCDIV(15) /*!< RTCDIV clock select CK_HXTAL/15 */ 872 #define RCU_RTC_HXTAL_DIV16 CFG0_RTCDIV(16) /*!< RTCDIV clock select CK_HXTAL/16 */ 873 #define RCU_RTC_HXTAL_DIV17 CFG0_RTCDIV(17) /*!< RTCDIV clock select CK_HXTAL/17 */ 874 #define RCU_RTC_HXTAL_DIV18 CFG0_RTCDIV(18) /*!< RTCDIV clock select CK_HXTAL/18 */ 875 #define RCU_RTC_HXTAL_DIV19 CFG0_RTCDIV(19) /*!< RTCDIV clock select CK_HXTAL/19 */ 876 #define RCU_RTC_HXTAL_DIV20 CFG0_RTCDIV(20) /*!< RTCDIV clock select CK_HXTAL/20 */ 877 #define RCU_RTC_HXTAL_DIV21 CFG0_RTCDIV(21) /*!< RTCDIV clock select CK_HXTAL/21 */ 878 #define RCU_RTC_HXTAL_DIV22 CFG0_RTCDIV(22) /*!< RTCDIV clock select CK_HXTAL/22 */ 879 #define RCU_RTC_HXTAL_DIV23 CFG0_RTCDIV(23) /*!< RTCDIV clock select CK_HXTAL/23 */ 880 #define RCU_RTC_HXTAL_DIV24 CFG0_RTCDIV(24) /*!< RTCDIV clock select CK_HXTAL/24 */ 881 #define RCU_RTC_HXTAL_DIV25 CFG0_RTCDIV(25) /*!< RTCDIV clock select CK_HXTAL/25 */ 882 #define RCU_RTC_HXTAL_DIV26 CFG0_RTCDIV(26) /*!< RTCDIV clock select CK_HXTAL/26 */ 883 #define RCU_RTC_HXTAL_DIV27 CFG0_RTCDIV(27) /*!< RTCDIV clock select CK_HXTAL/27 */ 884 #define RCU_RTC_HXTAL_DIV28 CFG0_RTCDIV(28) /*!< RTCDIV clock select CK_HXTAL/28 */ 885 #define RCU_RTC_HXTAL_DIV29 CFG0_RTCDIV(29) /*!< RTCDIV clock select CK_HXTAL/29 */ 886 #define RCU_RTC_HXTAL_DIV30 CFG0_RTCDIV(30) /*!< RTCDIV clock select CK_HXTAL/30 */ 887 #define RCU_RTC_HXTAL_DIV31 CFG0_RTCDIV(31) /*!< RTCDIV clock select CK_HXTAL/31 */ 888 889 /* CKOUT0 Clock source selection */ 890 #define CFG0_CKOUT0SEL(regval) (BITS(21,22) & ((uint32_t)(regval) << 21)) 891 #define RCU_CKOUT0SRC_IRC16M CFG0_CKOUT0SEL(0) /*!< internal 16M RC oscillator clock selected */ 892 #define RCU_CKOUT0SRC_LXTAL CFG0_CKOUT0SEL(1) /*!< low speed crystal oscillator clock (LXTAL) selected */ 893 #define RCU_CKOUT0SRC_HXTAL CFG0_CKOUT0SEL(2) /*!< high speed crystal oscillator clock (HXTAL) selected */ 894 #define RCU_CKOUT0SRC_PLLP CFG0_CKOUT0SEL(3) /*!< CK_PLLP clock selected */ 895 896 /* I2S Clock source selection */ 897 #define RCU_I2SSRC_PLLI2S ((uint32_t)0x00000000U) /*!< PLLI2S output clock selected as I2S source clock */ 898 #define RCU_I2SSRC_I2S_CKIN RCU_CFG0_I2SSEL /*!< external I2S_CKIN pin selected as I2S source clock */ 899 900 /* The CK_OUT0 divider */ 901 #define CFG0_CKOUT0DIV(regval) (BITS(24,26) & ((uint32_t)(regval) << 24)) 902 #define RCU_CKOUT0_DIV1 CFG0_CKOUT0DIV(0) /*!< CK_OUT0 is divided by 1 */ 903 #define RCU_CKOUT0_DIV2 CFG0_CKOUT0DIV(4) /*!< CK_OUT0 is divided by 2 */ 904 #define RCU_CKOUT0_DIV3 CFG0_CKOUT0DIV(5) /*!< CK_OUT0 is divided by 3 */ 905 #define RCU_CKOUT0_DIV4 CFG0_CKOUT0DIV(6) /*!< CK_OUT0 is divided by 4 */ 906 #define RCU_CKOUT0_DIV5 CFG0_CKOUT0DIV(7) /*!< CK_OUT0 is divided by 5 */ 907 908 /* The CK_OUT1 divider */ 909 #define CFG0_CKOUT1DIV(regval) (BITS(27,29) & ((uint32_t)(regval) << 27)) 910 #define RCU_CKOUT1_DIV1 CFG0_CKOUT1DIV(0) /*!< CK_OUT1 is divided by 1 */ 911 #define RCU_CKOUT1_DIV2 CFG0_CKOUT1DIV(4) /*!< CK_OUT1 is divided by 2 */ 912 #define RCU_CKOUT1_DIV3 CFG0_CKOUT1DIV(5) /*!< CK_OUT1 is divided by 3 */ 913 #define RCU_CKOUT1_DIV4 CFG0_CKOUT1DIV(6) /*!< CK_OUT1 is divided by 4 */ 914 #define RCU_CKOUT1_DIV5 CFG0_CKOUT1DIV(7) /*!< CK_OUT1 is divided by 5 */ 915 916 /* CKOUT1 Clock source selection */ 917 #define CFG0_CKOUT1SEL(regval) (BITS(30,31) & ((uint32_t)(regval) << 30)) 918 #define RCU_CKOUT1SRC_SYSTEMCLOCK CFG0_CKOUT1SEL(0) /*!< system clock selected */ 919 #define RCU_CKOUT1SRC_PLLI2SR CFG0_CKOUT1SEL(1) /*!< CK_PLLI2SR clock selected */ 920 #define RCU_CKOUT1SRC_HXTAL CFG0_CKOUT1SEL(2) /*!< high speed crystal oscillator clock (HXTAL) selected */ 921 #define RCU_CKOUT1SRC_PLLP CFG0_CKOUT1SEL(3) /*!< CK_PLLP clock selected */ 922 923 /* RCU_CFG1 register bit define */ 924 /* the divider factor from PLLI2SQ clock */ 925 #define CFG1_PLLI2SQDIV(regval) (BITS(0,4) & ((uint32_t)(regval) << 0)) 926 #define RCU_PLLI2SQ_DIV1 CFG1_PLLI2SQDIV(0) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/1 */ 927 #define RCU_PLLI2SQ_DIV2 CFG1_PLLI2SQDIV(1) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/2 */ 928 #define RCU_PLLI2SQ_DIV3 CFG1_PLLI2SQDIV(2) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/3 */ 929 #define RCU_PLLI2SQ_DIV4 CFG1_PLLI2SQDIV(3) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/4 */ 930 #define RCU_PLLI2SQ_DIV5 CFG1_PLLI2SQDIV(4) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/5 */ 931 #define RCU_PLLI2SQ_DIV6 CFG1_PLLI2SQDIV(5) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/6 */ 932 #define RCU_PLLI2SQ_DIV7 CFG1_PLLI2SQDIV(6) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/7 */ 933 #define RCU_PLLI2SQ_DIV8 CFG1_PLLI2SQDIV(7) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/8 */ 934 #define RCU_PLLI2SQ_DIV9 CFG1_PLLI2SQDIV(8) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/9 */ 935 #define RCU_PLLI2SQ_DIV10 CFG1_PLLI2SQDIV(9) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/10 */ 936 #define RCU_PLLI2SQ_DIV11 CFG1_PLLI2SQDIV(10) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/11 */ 937 #define RCU_PLLI2SQ_DIV12 CFG1_PLLI2SQDIV(11) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/12 */ 938 #define RCU_PLLI2SQ_DIV13 CFG1_PLLI2SQDIV(12) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/13 */ 939 #define RCU_PLLI2SQ_DIV14 CFG1_PLLI2SQDIV(13) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/14 */ 940 #define RCU_PLLI2SQ_DIV15 CFG1_PLLI2SQDIV(14) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/15 */ 941 #define RCU_PLLI2SQ_DIV16 CFG1_PLLI2SQDIV(15) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/16 */ 942 #define RCU_PLLI2SQ_DIV17 CFG1_PLLI2SQDIV(16) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/17 */ 943 #define RCU_PLLI2SQ_DIV18 CFG1_PLLI2SQDIV(17) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/18 */ 944 #define RCU_PLLI2SQ_DIV19 CFG1_PLLI2SQDIV(18) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/19 */ 945 #define RCU_PLLI2SQ_DIV20 CFG1_PLLI2SQDIV(19) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/20 */ 946 #define RCU_PLLI2SQ_DIV21 CFG1_PLLI2SQDIV(20) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/21 */ 947 #define RCU_PLLI2SQ_DIV22 CFG1_PLLI2SQDIV(21) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/22 */ 948 #define RCU_PLLI2SQ_DIV23 CFG1_PLLI2SQDIV(22) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/23 */ 949 #define RCU_PLLI2SQ_DIV24 CFG1_PLLI2SQDIV(23) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/24 */ 950 #define RCU_PLLI2SQ_DIV25 CFG1_PLLI2SQDIV(24) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/25 */ 951 #define RCU_PLLI2SQ_DIV26 CFG1_PLLI2SQDIV(25) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/26 */ 952 #define RCU_PLLI2SQ_DIV27 CFG1_PLLI2SQDIV(26) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/27 */ 953 #define RCU_PLLI2SQ_DIV28 CFG1_PLLI2SQDIV(27) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/28 */ 954 #define RCU_PLLI2SQ_DIV29 CFG1_PLLI2SQDIV(28) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/29 */ 955 #define RCU_PLLI2SQ_DIV30 CFG1_PLLI2SQDIV(29) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/30 */ 956 #define RCU_PLLI2SQ_DIV31 CFG1_PLLI2SQDIV(30) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/31 */ 957 #define RCU_PLLI2SQ_DIV32 CFG1_PLLI2SQDIV(31) /*!< CK_PLLI2SQDIV clock select CK_PLLI2SQ/32 */ 958 959 /* the divider factor from PLLSAIR clock */ 960 #define CFG1_PLLSAIRDIV(regval) (BITS(16,17) & ((uint32_t)(regval) << 16)) 961 #define RCU_PLLSAIR_DIV2 CFG1_PLLSAIRDIV(0) /*!< CK_PLLSAIRDIV clock select CK_PLLSAIR/2 */ 962 #define RCU_PLLSAIR_DIV4 CFG1_PLLSAIRDIV(1) /*!< CK_PLLSAIRDIV clock select CK_PLLSAIR/4 */ 963 #define RCU_PLLSAIR_DIV8 CFG1_PLLSAIRDIV(2) /*!< CK_PLLSAIRDIV clock select CK_PLLSAIR/8 */ 964 #define RCU_PLLSAIR_DIV16 CFG1_PLLSAIRDIV(3) /*!< CK_PLLSAIRDIV clock select CK_PLLSAIR/16 */ 965 966 /* TIMER clock selection */ 967 #define RCU_TIMER_PSC_MUL2 ~RCU_CFG1_TIMERSEL /*!< if APB1PSC/APB2PSC in RCU_CFG0 register is 0b0xx(CK_APBx = CK_AHB) 968 or 0b100(CK_APBx = CK_AHB/2), the TIMER clock is equal to CK_AHB(CK_TIMERx = CK_AHB). 969 or else, the TIMER clock is twice the corresponding APB clock (TIMER in APB1 domain: CK_TIMERx = 2 x CK_APB1; 970 TIMER in APB2 domain: CK_TIMERx = 2 x CK_APB2) */ 971 #define RCU_TIMER_PSC_MUL4 RCU_CFG1_TIMERSEL /*!< if APB1PSC/APB2PSC in RCU_CFG0 register is 0b0xx(CK_APBx = CK_AHB), 972 0b100(CK_APBx = CK_AHB/2), or 0b101(CK_APBx = CK_AHB/4), the TIMER clock is equal to CK_AHB(CK_TIMERx = CK_AHB). 973 or else, the TIMER clock is four timers the corresponding APB clock (TIMER in APB1 domain: CK_TIMERx = 4 x CK_APB1; 974 TIMER in APB2 domain: CK_TIMERx = 4 x CK_APB2) */ 975 976 /* RCU_PLLSSCTL register bit define */ 977 /* PLL spread spectrum modulation type select */ 978 #define RCU_SS_TYPE_CENTER ((uint32_t)0x00000000U) /*!< center type is selected */ 979 #define RCU_SS_TYPE_DOWN RCU_PLLSSCTL_SS_TYPE /*!< down type is selected */ 980 981 /* RCU_PLL register bit define */ 982 /* The PLL VCO source clock prescaler */ 983 #define RCU_PLLPSC_DIV_MIN ((uint32_t)2U) /*!< PLLPSC_DIV min value */ 984 #define RCU_PLLPSC_DIV_MAX ((uint32_t)63U) /*!< PLLPSC_DIV max value */ 985 986 /* The PLL VCO clock multi factor */ 987 #define RCU_PLLN_MUL_MIN ((uint32_t)64U) /*!< PLLN_MUL min value */ 988 #define RCU_PLLN_MUL_MAX ((uint32_t)500U) /*!< PLLN_MUL max value */ 989 #define RCU_SS_MODULATION_CENTER_INC ((uint32_t)5U) /*!< minimum factor of PLLN in center mode */ 990 #define RCU_SS_MODULATION_DOWN_INC ((uint32_t)7U) /*!< minimum factor of PLLN in down mode */ 991 992 /* The PLLP output frequency division factor from PLL VCO clock */ 993 #define RCU_PLLP_DIV_MIN ((uint32_t)2U) /*!< PLLP_DIV min value */ 994 #define RCU_PLLP_DIV_MAX ((uint32_t)8U) /*!< PLLP_DIV max value */ 995 996 /* PLL Clock Source Selection */ 997 #define RCU_PLLSRC_IRC16M ((uint32_t)0x00000000U) /*!< IRC16M clock selected as source clock of PLL, PLLSAI, PLLI2S */ 998 #define RCU_PLLSRC_HXTAL RCU_PLL_PLLSEL /*!< HXTAL clock selected as source clock of PLL, PLLSAI, PLLI2S */ 999 1000 /* The PLL Q output frequency division factor from PLL VCO clock */ 1001 #define RCU_PLLQ_DIV_MIN ((uint32_t)2U) /*!< PLLQ_DIV min value */ 1002 #define RCU_PLLQ_DIV_MAX ((uint32_t)15U) /*!< PLLQ_DIV max value */ 1003 1004 #define CHECK_PLL_PSC_VALID(val) (((val) >= RCU_PLLPSC_DIV_MIN)&&((val) <= RCU_PLLPSC_DIV_MAX)) 1005 #define CHECK_PLL_N_VALID(val, inc) (((val) >= (RCU_PLLN_MUL_MIN + (inc)))&&((val) <= RCU_PLLN_MUL_MAX)) 1006 #define CHECK_PLL_P_VALID(val) (((val) == 2U) || ((val) == 4U) || ((val) == 6U) || ((val) == 8U)) 1007 #define CHECK_PLL_Q_VALID(val) (((val) >= RCU_PLLQ_DIV_MIN)&&((val) <= RCU_PLLQ_DIV_MAX)) 1008 1009 /* RCU_BDCTL register bit define */ 1010 /* LXTAL drive capability */ 1011 #define RCU_LXTALDRI_LOWER_DRIVE ((uint32_t)0x00000000) /*!< LXTAL drive capability is selected lower */ 1012 #define RCU_LXTALDRI_HIGHER_DRIVE RCU_BDCTL_LXTALDRI /*!< LXTAL drive capability is selected higher */ 1013 1014 /* RTC clock entry selection */ 1015 #define BDCTL_RTCSRC(regval) (BITS(8,9) & ((uint32_t)(regval) << 8)) 1016 #define RCU_RTCSRC_NONE BDCTL_RTCSRC(0) /*!< no clock selected */ 1017 #define RCU_RTCSRC_LXTAL BDCTL_RTCSRC(1) /*!< RTC source clock select LXTAL */ 1018 #define RCU_RTCSRC_IRC32K BDCTL_RTCSRC(2) /*!< RTC source clock select IRC32K */ 1019 #define RCU_RTCSRC_HXTAL_DIV_RTCDIV BDCTL_RTCSRC(3) /*!< RTC source clock select HXTAL/RTCDIV */ 1020 1021 /* RCU_PLLI2S register bit define */ 1022 /* The PLLI2S VCO clock multi factor */ 1023 #define RCU_PLLI2SN_MUL_MIN 50U 1024 #define RCU_PLLI2SN_MUL_MAX 500U 1025 1026 /* The PLLI2S Q output frequency division factor from PLLI2S VCO clock */ 1027 #define RCU_PLLI2SQ_DIV_MIN 2U 1028 #define RCU_PLLI2SQ_DIV_MAX 15U 1029 1030 /* The PLLI2S R output frequency division factor from PLLI2S VCO clock */ 1031 #define RCU_PLLI2SR_DIV_MIN 2U 1032 #define RCU_PLLI2SR_DIV_MAX 7U 1033 1034 /* RCU_PLLSAI register bit define */ 1035 /* The PLLSAI VCO clock multi factor */ 1036 #define RCU_PLLSAIN_MUL_MIN 50U 1037 #define RCU_PLLSAIN_MUL_MAX 500U 1038 1039 /* The PLLSAI P output frequency division factor from PLLSAI VCO clock */ 1040 #define RCU_PLLSAIP_DIV_MIN 2U 1041 #define RCU_PLLSAIP_DIV_MAX 8U 1042 1043 /* The PLLSAI Q output frequency division factor from PLLSAI VCO clock */ 1044 #define RCU_PLLSAIQ_DIV_MIN 2U 1045 #define RCU_PLLSAIQ_DIV_MAX 15U 1046 1047 /* The PLLSAI R output frequency division factor from PLLSAI VCO clock */ 1048 #define RCU_PLLSAIR_DIV_MIN 2U 1049 #define RCU_PLLSAIR_DIV_MAX 7U 1050 1051 #define CHECK_PLLI2S_PSC_VALID(val) (((val) >= RCU_PLLI2SPSC_DIV_MIN)&&((val) <= RCU_PLLI2SPSC_DIV_MAX)) 1052 #define CHECK_PLLI2S_N_VALID(val) (((val) >= RCU_PLLI2SN_MUL_MIN)&&((val) <= RCU_PLLI2SN_MUL_MAX)) 1053 #define CHECK_PLLI2S_Q_VALID(val) (((val) >= RCU_PLLI2SQ_DIV_MIN)&&((val) <= RCU_PLLI2SQ_DIV_MAX)) 1054 #define CHECK_PLLI2S_R_VALID(val) (((val) >= RCU_PLLI2SR_DIV_MIN)&&((val) <= RCU_PLLI2SR_DIV_MAX)) 1055 1056 #define CHECK_PLLSAI_N_VALID(val) (((val) >= (RCU_PLLSAIN_MUL_MIN))&&((val) <= RCU_PLLSAIN_MUL_MAX)) 1057 #define CHECK_PLLSAI_P_VALID(val) (((val) == 2U) || ((val) == 4U) || ((val) == 6U) || ((val) == 8U)) 1058 #define CHECK_PLLSAI_Q_VALID(val) (((val) >= RCU_PLLSAIQ_DIV_MIN)&&((val) <= RCU_PLLSAIQ_DIV_MAX)) 1059 #define CHECK_PLLSAI_R_VALID(val) (((val) >= RCU_PLLSAIR_DIV_MIN)&&((val) <= RCU_PLLSAIR_DIV_MAX)) 1060 1061 /* RCU_ADDCTL register bit define */ 1062 /* 48MHz clock selection */ 1063 #define RCU_CK48MSRC_PLL48M ((uint32_t)0x00000000U) /*!< CK48M source clock select PLL48M */ 1064 #define RCU_CK48MSRC_IRC48M RCU_ADDCTL_CK48MSEL /*!< CK48M source clock select IRC48M */ 1065 1066 /* PLL48M clock selection */ 1067 #define RCU_PLL48MSRC_PLLQ ((uint32_t)0x00000000U) /*!< PLL48M source clock select PLLQ */ 1068 #define RCU_PLL48MSRC_PLLSAIP RCU_ADDCTL_PLL48MSEL /*!< PLL48M source clock select PLLSAIP */ 1069 1070 /* Deep-sleep mode voltage */ 1071 #define DSV_DSLPVS(regval) (BITS(0,2) & ((uint32_t)(regval) << 0)) 1072 #define RCU_DEEPSLEEP_V_0 DSV_DSLPVS(0) /*!< core voltage is default value in deep-sleep mode */ 1073 #define RCU_DEEPSLEEP_V_1 DSV_DSLPVS(1) /*!< core voltage is (default value-0.1)V in deep-sleep mode(customers are not recommended to use it)*/ 1074 #define RCU_DEEPSLEEP_V_2 DSV_DSLPVS(2) /*!< core voltage is (default value-0.2)V in deep-sleep mode(customers are not recommended to use it)*/ 1075 #define RCU_DEEPSLEEP_V_3 DSV_DSLPVS(3) /*!< core voltage is (default value-0.3)V in deep-sleep mode(customers are not recommended to use it)*/ 1076 1077 1078 /* function declarations */ 1079 /* deinitialize the RCU */ 1080 void rcu_deinit(void); 1081 /* enable the peripherals clock */ 1082 void rcu_periph_clock_enable(rcu_periph_enum periph); 1083 /* disable the peripherals clock */ 1084 void rcu_periph_clock_disable(rcu_periph_enum periph); 1085 /* enable the peripherals clock when sleep mode */ 1086 void rcu_periph_clock_sleep_enable(rcu_periph_sleep_enum periph); 1087 /* disable the peripherals clock when sleep mode */ 1088 void rcu_periph_clock_sleep_disable(rcu_periph_sleep_enum periph); 1089 /* reset the peripherals */ 1090 void rcu_periph_reset_enable(rcu_periph_reset_enum periph_reset); 1091 /* disable reset the peripheral */ 1092 void rcu_periph_reset_disable(rcu_periph_reset_enum periph_reset); 1093 /* reset the BKP */ 1094 void rcu_bkp_reset_enable(void); 1095 /* disable the BKP reset */ 1096 void rcu_bkp_reset_disable(void); 1097 1098 /* configure the system clock source */ 1099 void rcu_system_clock_source_config(uint32_t ck_sys); 1100 /* get the system clock source */ 1101 uint32_t rcu_system_clock_source_get(void); 1102 /* configure the AHB prescaler selection */ 1103 void rcu_ahb_clock_config(uint32_t ck_ahb); 1104 /* configure the APB1 prescaler selection */ 1105 void rcu_apb1_clock_config(uint32_t ck_apb1); 1106 /* configure the APB2 prescaler selection */ 1107 void rcu_apb2_clock_config(uint32_t ck_apb2); 1108 /* configure the CK_OUT0 clock source and divider */ 1109 void rcu_ckout0_config(uint32_t ckout0_src, uint32_t ckout0_div); 1110 /* configure the CK_OUT1 clock source and divider */ 1111 void rcu_ckout1_config(uint32_t ckout1_src, uint32_t ckout1_div); 1112 /* configure the PLL clock source selection and PLL multiply factor */ 1113 ErrStatus rcu_pll_config(uint32_t pll_src, uint32_t pll_psc, uint32_t pll_n, uint32_t pll_p, uint32_t pll_q); 1114 /* configure the PLLI2S clock */ 1115 ErrStatus rcu_plli2s_config(uint32_t plli2s_n, uint32_t plli2s_r); 1116 /* configure the PLLSAI clock */ 1117 ErrStatus rcu_pllsai_config(uint32_t pllsai_n, uint32_t pllsai_p, uint32_t pllsai_r); 1118 /* configure the RTC clock source selection */ 1119 void rcu_rtc_clock_config(uint32_t rtc_clock_source); 1120 /* cconfigure the frequency division of RTC clock when HXTAL was selected as its clock source */ 1121 void rcu_rtc_div_config(uint32_t rtc_div); 1122 /* configure the I2S clock source selection */ 1123 void rcu_i2s_clock_config(uint32_t i2s_clock_source); 1124 /* configure the CK48M clock selection */ 1125 void rcu_ck48m_clock_config(uint32_t ck48m_clock_source); 1126 /* configure the PLL48M clock selection */ 1127 void rcu_pll48m_clock_config(uint32_t pll48m_clock_source); 1128 /* configure the TIMER clock prescaler selection */ 1129 void rcu_timer_clock_prescaler_config(uint32_t timer_clock_prescaler); 1130 /* configure the TLI clock division selection */ 1131 void rcu_tli_clock_div_config(uint32_t pllsai_r_div); 1132 1133 1134 /* get the clock stabilization and periphral reset flags */ 1135 FlagStatus rcu_flag_get(rcu_flag_enum flag); 1136 /* clear the reset flag */ 1137 void rcu_all_reset_flag_clear(void); 1138 /* get the clock stabilization interrupt and ckm flags */ 1139 FlagStatus rcu_interrupt_flag_get(rcu_int_flag_enum int_flag); 1140 /* clear the interrupt flags */ 1141 void rcu_interrupt_flag_clear(rcu_int_flag_clear_enum int_flag); 1142 /* enable the stabilization interrupt */ 1143 void rcu_interrupt_enable(rcu_int_enum interrupt); 1144 /* disable the stabilization interrupt */ 1145 void rcu_interrupt_disable(rcu_int_enum interrupt); 1146 1147 /* configure the LXTAL drive capability */ 1148 void rcu_lxtal_drive_capability_config(uint32_t lxtal_dricap); 1149 /* wait for oscillator stabilization flags is SET or oscillator startup is timeout */ 1150 ErrStatus rcu_osci_stab_wait(rcu_osci_type_enum osci); 1151 /* turn on the oscillator */ 1152 void rcu_osci_on(rcu_osci_type_enum osci); 1153 /* turn off the oscillator */ 1154 void rcu_osci_off(rcu_osci_type_enum osci); 1155 /* enable the oscillator bypass mode, HXTALEN or LXTALEN must be reset before it */ 1156 void rcu_osci_bypass_mode_enable(rcu_osci_type_enum osci); 1157 /* disable the oscillator bypass mode, HXTALEN or LXTALEN must be reset before it */ 1158 void rcu_osci_bypass_mode_disable(rcu_osci_type_enum osci); 1159 /* enable the HXTAL clock monitor */ 1160 void rcu_hxtal_clock_monitor_enable(void); 1161 /* disable the HXTAL clock monitor */ 1162 void rcu_hxtal_clock_monitor_disable(void); 1163 1164 /* set the IRC16M adjust value */ 1165 void rcu_irc16m_adjust_value_set(uint32_t irc16m_adjval); 1166 /* configure the spread spectrum modulation for the main PLL clock */ 1167 void rcu_spread_spectrum_config(uint32_t spread_spectrum_type, uint32_t modstep, uint32_t modcnt); 1168 /* enable the spread spectrum modulation for the main PLL clock */ 1169 void rcu_spread_spectrum_enable(void); 1170 /* disable the spread spectrum modulation for the main PLL clock */ 1171 void rcu_spread_spectrum_disable(void); 1172 /* unlock the voltage key */ 1173 void rcu_voltage_key_unlock(void); 1174 /* set the deep sleep mode voltage */ 1175 void rcu_deepsleep_voltage_set(uint32_t dsvol); 1176 1177 /* get the system clock, bus and peripheral clock frequency */ 1178 uint32_t rcu_clock_freq_get(rcu_clock_freq_enum clock); 1179 1180 #endif /* GD32F4XX_RCU_H */ 1181