gd32f1x0_rcu.h 66 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001
  1. /*!
  2. \file gd32f1x0_rcu.h
  3. \brief definitions for the RCU
  4. \version 2014-12-26, V1.0.0, platform GD32F1x0(x=3,5)
  5. \version 2016-01-15, V2.0.0, platform GD32F1x0(x=3,5,7,9)
  6. \version 2016-04-30, V3.0.0, firmware update for GD32F1x0(x=3,5,7,9)
  7. \version 2017-06-19, V3.1.0, firmware update for GD32F1x0(x=3,5,7,9)
  8. \version 2019-11-20, V3.2.0, firmware update for GD32F1x0(x=3,5,7,9)
  9. */
  10. /*
  11. Copyright (c) 2019, GigaDevice Semiconductor Inc.
  12. Redistribution and use in source and binary forms, with or without modification,
  13. are permitted provided that the following conditions are met:
  14. 1. Redistributions of source code must retain the above copyright notice, this
  15. list of conditions and the following disclaimer.
  16. 2. Redistributions in binary form must reproduce the above copyright notice,
  17. this list of conditions and the following disclaimer in the documentation
  18. and/or other materials provided with the distribution.
  19. 3. Neither the name of the copyright holder nor the names of its contributors
  20. may be used to endorse or promote products derived from this software without
  21. specific prior written permission.
  22. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  23. AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  24. WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  25. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
  26. INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  27. NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  28. PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  29. WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  30. ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
  31. OF SUCH DAMAGE.
  32. */
  33. #ifndef GD32F1X0_RCU_H
  34. #define GD32F1X0_RCU_H
  35. #include "gd32f1x0.h"
  36. /* RCU definitions */
  37. #define RCU RCU_BASE
  38. /* registers definitions */
  39. #define RCU_CTL0 REG32(RCU + 0x00000000U) /*!< control register 0 */
  40. #define RCU_CFG0 REG32(RCU + 0x00000004U) /*!< configuration register 0 */
  41. #define RCU_INT REG32(RCU + 0x00000008U) /*!< interrupt register */
  42. #define RCU_APB2RST REG32(RCU + 0x0000000CU) /*!< APB2 reset register */
  43. #define RCU_APB1RST REG32(RCU + 0x00000010U) /*!< APB1 reset register */
  44. #define RCU_AHBEN REG32(RCU + 0x00000014U) /*!< AHB enable register */
  45. #define RCU_APB2EN REG32(RCU + 0x00000018U) /*!< APB2 enable register */
  46. #define RCU_APB1EN REG32(RCU + 0x0000001CU) /*!< APB1 enable register */
  47. #define RCU_BDCTL REG32(RCU + 0x00000020U) /*!< backup domain control register */
  48. #define RCU_RSTSCK REG32(RCU + 0x00000024U) /*!< reset source /clock register */
  49. #define RCU_AHBRST REG32(RCU + 0x00000028U) /*!< AHB reset register */
  50. #define RCU_CFG1 REG32(RCU + 0x0000002CU) /*!< configuration register 1 */
  51. #define RCU_CFG2 REG32(RCU + 0x00000030U) /*!< configuration register 2 */
  52. #define RCU_CTL1 REG32(RCU + 0x00000034U) /*!< control register 1 */
  53. #ifdef GD32F170_190
  54. #define RCU_CFG3 REG32(RCU + 0x00000080U) /*!< configuration register 3 */
  55. #endif /* GD32F170_190 */
  56. #define RCU_ADDAPB1EN REG32(RCU + 0x000000F8U) /*!< APB1 additional enable register */
  57. #define RCU_ADDAPB1RST REG32(RCU + 0x000000FCU) /*!< APB1 additional reset register */
  58. #define RCU_VKEY REG32(RCU + 0x00000100U) /*!< voltage key register */
  59. #define RCU_DSV REG32(RCU + 0x00000134U) /*!< deep-sleep mode voltage register */
  60. #ifdef GD32F130_150
  61. #define RCU_PDVSEL REG32(RCU + 0x00000138U) /*!< power down voltage select register */
  62. #endif /* GD32F130_150 */
  63. /* bits definitions */
  64. /* RCU_CTL0 */
  65. #define RCU_CTL0_IRC8MEN BIT(0) /*!< internal high speed oscillator enable */
  66. #define RCU_CTL0_IRC8MSTB BIT(1) /*!< IRC8M high speed internal oscillator stabilization flag */
  67. #define RCU_CTL0_IRC8MADJ BITS(3,7) /*!< high speed internal oscillator clock trim adjust value */
  68. #define RCU_CTL0_IRC8MCALIB BITS(8,15) /*!< high speed internal oscillator calibration value register */
  69. #define RCU_CTL0_HXTALEN BIT(16) /*!< external high speed oscillator enable */
  70. #define RCU_CTL0_HXTALSTB BIT(17) /*!< external crystal oscillator clock stabilization flag */
  71. #define RCU_CTL0_HXTALBPS BIT(18) /*!< external crystal oscillator clock bypass mode enable */
  72. #define RCU_CTL0_CKMEN BIT(19) /*!< HXTAL clock monitor enable */
  73. #define RCU_CTL0_PLLEN BIT(24) /*!< PLL enable */
  74. #define RCU_CTL0_PLLSTB BIT(25) /*!< PLL clock stabilization flag */
  75. /* RCU_CFG0 */
  76. #define RCU_CFG0_SCS BITS(0,1) /*!< system clock switch */
  77. #define RCU_CFG0_SCSS BITS(2,3) /*!< system clock switch status */
  78. #define RCU_CFG0_AHBPSC BITS(4,7) /*!< AHB prescaler selection */
  79. #define RCU_CFG0_APB1PSC BITS(8,10) /*!< APB1 prescaler selection */
  80. #define RCU_CFG0_APB2PSC BITS(11,13) /*!< APB2 prescaler selection */
  81. #define RCU_CFG0_ADCPSC BITS(14,15) /*!< ADC clock prescaler selection */
  82. #define RCU_CFG0_PLLSEL BIT(16) /*!< PLL clock source selection */
  83. #define RCU_CFG0_PLLPREDV BIT(17) /*!< HXTAL divider for PLL source clock selection */
  84. #define RCU_CFG0_PLLMF (BIT(27) | BITS(18,21)) /*!< PLL multiply factor */
  85. #ifdef GD32F130_150
  86. #define RCU_CFG0_USBDPSC BITS(22,23) /*!< USBD clock prescaler selection */
  87. #define RCU_CFG0_CKOUTSEL BITS(24,26) /*!< CK_OUT clock source selection */
  88. #elif defined (GD32F170_190)
  89. #define RCU_CFG0_CKOUT0SEL BITS(24,26) /*!< CK_OUT0 clock source selection */
  90. #endif /* GD32F130_150 */
  91. #define RCU_CFG0_PLLMF4 BIT(27) /*!< bit 4 of PLLMF */
  92. #ifdef GD32F130_150
  93. #define RCU_CFG0_CKOUTDIV BITS(28,30) /*!< CK_OUT divider which the CK_OUT frequency can be reduced */
  94. #elif defined (GD32F170_190)
  95. #define RCU_CFG0_CKOUT0DIV BITS(28,30) /*!< CK_OUT0 divider which the CK_OUT0 frequency can be reduced */
  96. #endif /* GD32F130_150 */
  97. #define RCU_CFG0_PLLDV BIT(31) /*!< CK_PLL divide by 1 or 2 for CK_OUT(GD32F130_150) or CK_OUT0(GD32F170_190) */
  98. /* RCU_INT */
  99. #define RCU_INT_IRC40KSTBIF BIT(0) /*!< IRC40K stabilization interrupt flag */
  100. #define RCU_INT_LXTALSTBIF BIT(1) /*!< LXTAL stabilization interrupt flag */
  101. #define RCU_INT_IRC8MSTBIF BIT(2) /*!< IRC8M stabilization interrupt flag */
  102. #define RCU_INT_HXTALSTBIF BIT(3) /*!< HXTAL stabilization interrupt flag */
  103. #define RCU_INT_PLLSTBIF BIT(4) /*!< PLL stabilization interrupt flag */
  104. #ifdef GD32F130_150
  105. #define RCU_INT_IRC14MSTBIF BIT(5) /*!< IRC14M stabilization interrupt flag */
  106. #elif defined (GD32F170_190)
  107. #define RCU_INT_IRC28MSTBIF BIT(5) /*!< IRC28M stabilization interrupt flag */
  108. #endif /* GD32F130_150 */
  109. #define RCU_INT_CKMIF BIT(7) /*!< HXTAL clock stuck interrupt flag */
  110. #define RCU_INT_IRC40KSTBIE BIT(8) /*!< IRC40K stabilization interrupt enable */
  111. #define RCU_INT_LXTALSTBIE BIT(9) /*!< LXTAL stabilization interrupt enable */
  112. #define RCU_INT_IRC8MSTBIE BIT(10) /*!< IRC8M stabilization interrupt enable */
  113. #define RCU_INT_HXTALSTBIE BIT(11) /*!< HXTAL stabilization interrupt enable */
  114. #define RCU_INT_PLLSTBIE BIT(12) /*!< PLL stabilization interrupt enable */
  115. #ifdef GD32F130_150
  116. #define RCU_INT_IRC14MSTBIE BIT(13) /*!< IRC14M stabilization interrupt enable */
  117. #elif defined (GD32F170_190)
  118. #define RCU_INT_IRC28MSTBIE BIT(13) /*!< IRC28M stabilization interrupt enable */
  119. #endif /* GD32F130_150 */
  120. #define RCU_INT_IRC40KSTBIC BIT(16) /*!< IRC40K stabilization interrupt clear */
  121. #define RCU_INT_LXTALSTBIC BIT(17) /*!< LXTAL stabilization interrupt clear */
  122. #define RCU_INT_IRC8MSTBIC BIT(18) /*!< IRC8M stabilization interrupt clear */
  123. #define RCU_INT_HXTALSTBIC BIT(19) /*!< HXTAL stabilization interrupt clear */
  124. #define RCU_INT_PLLSTBIC BIT(20) /*!< PLL stabilization interrupt clear */
  125. #ifdef GD32F130_150
  126. #define RCU_INT_IRC14MSTBIC BIT(21) /*!< IRC14M stabilization interrupt clear */
  127. #elif defined (GD32F170_190)
  128. #define RCU_INT_IRC28MSTBIC BIT(21) /*!< IRC28M stabilization interrupt clear */
  129. #endif /* GD32F130_150 */
  130. #define RCU_INT_CKMIC BIT(23) /*!< HXTAL clock stuck interrupt clear */
  131. /* RCU_APB2RST */
  132. #define RCU_APB2RST_CFGCMPRST BIT(0) /*!< system configuration and comparator reset */
  133. #define RCU_APB2RST_ADCRST BIT(9) /*!< ADC reset */
  134. #define RCU_APB2RST_TIMER0RST BIT(11) /*!< TIMER0 reset */
  135. #define RCU_APB2RST_SPI0RST BIT(12) /*!< SPI0 reset */
  136. #define RCU_APB2RST_USART0RST BIT(14) /*!< USART0 reset */
  137. #define RCU_APB2RST_TIMER14RST BIT(16) /*!< TIMER14 reset */
  138. #define RCU_APB2RST_TIMER15RST BIT(17) /*!< TIMER15 reset */
  139. #define RCU_APB2RST_TIMER16RST BIT(18) /*!< TIMER16 reset */
  140. /* RCU_APB1RST */
  141. #define RCU_APB1RST_TIMER1RST BIT(0) /*!< TIMER1 timer reset */
  142. #define RCU_APB1RST_TIMER2RST BIT(1) /*!< TIMER2 timer reset */
  143. #define RCU_APB1RST_TIMER5RST BIT(4) /*!< TIMER5 timer reset */
  144. #define RCU_APB1RST_TIMER13RST BIT(8) /*!< TIMER13 timer reset */
  145. #ifdef GD32F170_190
  146. #define RCU_APB1RST_SLCDRST BIT(9) /*!< SLCD reset */
  147. #endif /* GD32F170_190 */
  148. #define RCU_APB1RST_WWDGTRST BIT(11) /*!< window watchdog timer reset */
  149. #define RCU_APB1RST_SPI1RST BIT(14) /*!< SPI1 reset */
  150. #define RCU_APB1RST_SPI2RST BIT(15) /*!< SPI2 reset */
  151. #define RCU_APB1RST_USART1RST BIT(17) /*!< USART1 reset */
  152. #define RCU_APB1RST_I2C0RST BIT(21) /*!< I2C0 reset */
  153. #define RCU_APB1RST_I2C1RST BIT(22) /*!< I2C1 reset */
  154. #ifdef GD32F130_150
  155. #define RCU_APB1RST_USBDRST BIT(23) /*!< USBD reset */
  156. #endif /* GD32F130_150 */
  157. #ifdef GD32F170_190
  158. #define RCU_APB1RST_CAN0RST BIT(25) /*!< CAN0 reset */
  159. #define RCU_APB1RST_CAN1RST BIT(26) /*!< CAN1 reset */
  160. #endif /* GD32F170_190 */
  161. #define RCU_APB1RST_PMURST BIT(28) /*!< power control reset */
  162. #define RCU_APB1RST_DACRST BIT(29) /*!< DAC reset */
  163. #define RCU_APB1RST_CECRST BIT(30) /*!< HDMI CEC reset */
  164. #ifdef GD32F170_190
  165. #define RCU_APB1RST_OPAIVREFRST BIT(31) /*!< OPA and IVREF reset */
  166. #endif /* GD32F170_190 */
  167. /* RCU_AHBEN */
  168. #define RCU_AHBEN_DMAEN BIT(0) /*!< DMA clock enable */
  169. #define RCU_AHBEN_SRAMSPEN BIT(2) /*!< SRAM interface clock enable when sleep mode */
  170. #define RCU_AHBEN_FMCSPEN BIT(4) /*!< FMC clock enable when sleep mode */
  171. #define RCU_AHBEN_CRCEN BIT(6) /*!< CRC clock enable */
  172. #define RCU_AHBEN_PAEN BIT(17) /*!< GPIO port A clock enable */
  173. #define RCU_AHBEN_PBEN BIT(18) /*!< GPIO port B clock enable */
  174. #define RCU_AHBEN_PCEN BIT(19) /*!< GPIO port C clock enable */
  175. #define RCU_AHBEN_PDEN BIT(20) /*!< GPIO port D clock enable */
  176. #define RCU_AHBEN_PFEN BIT(22) /*!< GPIO port F clock enable */
  177. #define RCU_AHBEN_TSIEN BIT(24) /*!< TSI clock enable */
  178. /* RCU_APB2EN */
  179. #define RCU_APB2EN_CFGCMPEN BIT(0) /*!< system configuration and comparator clock enable */
  180. #define RCU_APB2EN_ADCEN BIT(9) /*!< ADC interface clock enable */
  181. #define RCU_APB2EN_TIMER0EN BIT(11) /*!< TIMER0 timer clock enable */
  182. #define RCU_APB2EN_SPI0EN BIT(12) /*!< SPI0 clock enable */
  183. #define RCU_APB2EN_USART0EN BIT(14) /*!< USART0 clock enable */
  184. #define RCU_APB2EN_TIMER14EN BIT(16) /*!< TIMER14 timer clock enable */
  185. #define RCU_APB2EN_TIMER15EN BIT(17) /*!< TIMER15 timer clock enable */
  186. #define RCU_APB2EN_TIMER16EN BIT(18) /*!< TIMER16 timer clock enable */
  187. /* RCU_APB1EN */
  188. #define RCU_APB1EN_TIMER1EN BIT(0) /*!< TIMER1 timer clock enable */
  189. #define RCU_APB1EN_TIMER2EN BIT(1) /*!< TIMER2 timer clock enable */
  190. #define RCU_APB1EN_TIMER5EN BIT(4) /*!< TIMER5 timer clock enable */
  191. #define RCU_APB1EN_TIMER13EN BIT(8) /*!< TIMER13 timer clock enable */
  192. #ifdef GD32F170_190
  193. #define RCU_APB1EN_SLCDEN BIT(9) /*!< SLCD clock enable */
  194. #endif /* GD32F170_190 */
  195. #define RCU_APB1EN_WWDGTEN BIT(11) /*!< window watchdog timer clock enable */
  196. #define RCU_APB1EN_SPI1EN BIT(14) /*!< SPI1 clock enable */
  197. #define RCU_APB1EN_SPI2EN BIT(15) /*!< SPI2 clock enable */
  198. #define RCU_APB1EN_USART1EN BIT(17) /*!< USART1 clock enable */
  199. #define RCU_APB1EN_I2C0EN BIT(21) /*!< I2C0 clock enable */
  200. #define RCU_APB1EN_I2C1EN BIT(22) /*!< I2C1 clock enable */
  201. #ifdef GD32F130_150
  202. #define RCU_APB1EN_USBDEN BIT(23) /*!< USBD clock enable */
  203. #endif /* GD32F130_150 */
  204. #ifdef GD32F170_190
  205. #define RCU_APB1EN_CAN0EN BIT(25) /*!< CAN0 clock enable */
  206. #define RCU_APB1EN_CAN1EN BIT(26) /*!< CAN1 clock enable */
  207. #endif /* GD32F170_190 */
  208. #define RCU_APB1EN_PMUEN BIT(28) /*!< power interface clock enable */
  209. #define RCU_APB1EN_DACEN BIT(29) /*!< DAC interface clock enable */
  210. #define RCU_APB1EN_CECEN BIT(30) /*!< HDMI CEC interface clock enable */
  211. #ifdef GD32F170_190
  212. #define RCU_APB1EN_OPAIVREFEN BIT(31) /*!< OPA and IVREF clock enable */
  213. #endif /* GD32F170_190 */
  214. /* RCU_BDCTL */
  215. #define RCU_BDCTL_LXTALEN BIT(0) /*!< LXTAL enable */
  216. #define RCU_BDCTL_LXTALSTB BIT(1) /*!< external low-speed oscillator stabilization */
  217. #define RCU_BDCTL_LXTALBPS BIT(2) /*!< LXTAL bypass mode enable */
  218. #define RCU_BDCTL_LXTALDRI BITS(3,4) /*!< LXTAL drive capability */
  219. #define RCU_BDCTL_RTCSRC BITS(8,9) /*!< RTC clock entry selection */
  220. #define RCU_BDCTL_RTCEN BIT(15) /*!< RTC clock enable */
  221. #define RCU_BDCTL_BKPRST BIT(16) /*!< Backup domain reset */
  222. /* RCU_RSTSCK */
  223. #define RCU_RSTSCK_IRC40KEN BIT(0) /*!< IRC40K enable */
  224. #define RCU_RSTSCK_IRC40KSTB BIT(1) /*!< IRC40K stabilization */
  225. #define RCU_RSTSCK_V12RSTF BIT(23) /*!< V12 domain Power reset flag */
  226. #define RCU_RSTSCK_RSTFC BIT(24) /*!< reset flag clear */
  227. #define RCU_RSTSCK_OBLRSTF BIT(25) /*!< option byte loader reset flag */
  228. #define RCU_RSTSCK_EPRSTF BIT(26) /*!< external pin reset flag */
  229. #define RCU_RSTSCK_PORRSTF BIT(27) /*!< power reset flag */
  230. #define RCU_RSTSCK_SWRSTF BIT(28) /*!< software reset flag */
  231. #define RCU_RSTSCK_FWDGTRSTF BIT(29) /*!< free watchdog timer reset flag */
  232. #define RCU_RSTSCK_WWDGTRSTF BIT(30) /*!< window watchdog timer reset flag */
  233. #define RCU_RSTSCK_LPRSTF BIT(31) /*!< low-power reset flag */
  234. /* RCU_AHBRST */
  235. #define RCU_AHBRST_PARST BIT(17) /*!< GPIO port A reset */
  236. #define RCU_AHBRST_PBRST BIT(18) /*!< GPIO port B reset */
  237. #define RCU_AHBRST_PCRST BIT(19) /*!< GPIO port C reset */
  238. #define RCU_AHBRST_PDRST BIT(20) /*!< GPIO port D reset */
  239. #define RCU_AHBRST_PFRST BIT(22) /*!< GPIO port F reset */
  240. #define RCU_AHBRST_TSIRST BIT(24) /*!< TSI unit reset */
  241. /* RCU_CFG1 */
  242. #define RCU_CFG1_HXTALPREDV BITS(0,3) /*!< CK_HXTAL divider previous PLL */
  243. /* RCU_CFG2 */
  244. #define RCU_CFG2_USART0SEL BITS(0,1) /*!< CK_USART0 clock source selection */
  245. #define RCU_CFG2_CECSEL BIT(6) /*!< CK_CEC clock source selection */
  246. #define RCU_CFG2_ADCSEL BIT(8) /*!< CK_ADC clock source selection */
  247. #ifdef GD32F170_190
  248. #define RCU_CFG2_IRC28MDIV BIT(16) /*!< CK_IRC28M divider 2 or not */
  249. #endif /* GD32F170_190 */
  250. /* RCU_CTL1 */
  251. #ifdef GD32F130_150
  252. #define RCU_CTL1_IRC14MEN BIT(0) /*!< IRC14M internal 14M RC oscillator enable */
  253. #define RCU_CTL1_IRC14MSTB BIT(1) /*!< IRC14M internal 14M RC oscillator stabilization flag */
  254. #define RCU_CTL1_IRC14MADJ BITS(3,7) /*!< internal 14M RC oscillator clock trim adjust value */
  255. #define RCU_CTL1_IRC14MCALIB BITS(8,15) /*!< internal 14M RC oscillator calibration value register */
  256. #elif defined (GD32F170_190)
  257. #define RCU_CTL1_IRC28MEN BIT(0) /*!< IRC28M internal 28M RC oscillator enable */
  258. #define RCU_CTL1_IRC28MSTB BIT(1) /*!< IRC28M internal 28M RC oscillator stabilization flag */
  259. #define RCU_CTL1_IRC28MADJ BITS(3,7) /*!< internal 28M RC oscillator clock trim adjust value */
  260. #define RCU_CTL1_IRC28MCALIB BITS(8,15) /*!< internal 28M RC oscillator calibration value register */
  261. #endif /* GD32F130_150 */
  262. #ifdef GD32F170_190
  263. /* RCU_CFG3 */
  264. #define RCU_CFG3_CKOUT1SEL BITS(0,2) /*!< CKOUT1 clock source selection */
  265. #define RCU_CFG3_CKOUT1DIV BITS(8,13) /*!< CK_OUT1 divider which the CK_OUT1 frequency can be reduced */
  266. #endif /* GD32F170_190 */
  267. /* RCU_ADDAPB1EN */
  268. #define RCU_ADDAPB1EN_I2C2EN BIT(0) /*!< I2C2 unit clock enable */
  269. /* RCU_ADDAPB1RST */
  270. #define RCU_ADDAPB1RST_I2C2RST BIT(0) /*!< I2C2 unit reset */
  271. /* RCU_VKEY */
  272. #define RCU_VKEY_KEY BITS(0,31) /*!< key of RCU_PDVSEL and RCU_DSV register */
  273. /* RCU_DSV */
  274. #define RCU_DSV_DSLPVS BITS(0,2) /*!< deep-sleep mode voltage select */
  275. #ifdef GD32F130_150
  276. /* RCU_PDVSEL */
  277. #define RCU_PDVSEL_PDRVS BIT(0) /*!< power down voltage select */
  278. #endif /* GD32F130_150 */
  279. /* constants definitions */
  280. /* define the peripheral clock enable bit position and its register index offset */
  281. #define RCU_REGIDX_BIT(regidx, bitpos) (((uint32_t)(regidx) << 6) | (bitpos))
  282. #define RCU_REG_VAL(periph) (REG32(RCU + ((uint32_t)(periph) >> 6)))
  283. #define RCU_BIT_POS(val) ((uint32_t)(val) & 0x1FU)
  284. /* define the voltage key unlock value */
  285. #define RCU_VKEY_UNLOCK ((uint32_t)0x1A2B3C4DU)
  286. /* register index */
  287. enum reg_idx
  288. {
  289. /* peripherals enable */
  290. IDX_AHBEN = 0x14U,
  291. IDX_APB2EN = 0x18U,
  292. IDX_APB1EN = 0x1CU,
  293. IDX_ADDAPB1EN = 0xF8U,
  294. /* peripherals reset */
  295. IDX_AHBRST = 0x28U,
  296. IDX_APB2RST = 0x0CU,
  297. IDX_APB1RST = 0x10U,
  298. IDX_ADDAPB1RST = 0xFCU,
  299. /* clock stabilization */
  300. IDX_CTL0 = 0x00U,
  301. IDX_BDCTL = 0x20U,
  302. IDX_STB = 0x24U,
  303. IDX_CTL1 = 0x34U,
  304. /* peripheral reset */
  305. IDX_RSTSCK = 0x24U,
  306. /* clock stabilization and stuck interrupt */
  307. IDX_INT = 0x08U,
  308. /* configuration register */
  309. IDX_CFG0 = 0x04U,
  310. IDX_CFG2 = 0x30U
  311. };
  312. /* peripheral clock enable */
  313. typedef enum
  314. {
  315. /* AHB peripherals */
  316. RCU_DMA = RCU_REGIDX_BIT(IDX_AHBEN, 0U), /*!< DMA clock */
  317. RCU_CRC = RCU_REGIDX_BIT(IDX_AHBEN, 6U), /*!< CRC clock */
  318. RCU_GPIOA = RCU_REGIDX_BIT(IDX_AHBEN, 17U), /*!< GPIOA clock */
  319. RCU_GPIOB = RCU_REGIDX_BIT(IDX_AHBEN, 18U), /*!< GPIOB clock */
  320. RCU_GPIOC = RCU_REGIDX_BIT(IDX_AHBEN, 19U), /*!< GPIOC clock */
  321. RCU_GPIOD = RCU_REGIDX_BIT(IDX_AHBEN, 20U), /*!< GPIOD clock */
  322. RCU_GPIOF = RCU_REGIDX_BIT(IDX_AHBEN, 22U), /*!< GPIOF clock */
  323. RCU_TSI = RCU_REGIDX_BIT(IDX_AHBEN, 24U), /*!< TSI clock */
  324. /* APB2 peripherals */
  325. RCU_CFGCMP = RCU_REGIDX_BIT(IDX_APB2EN, 0U), /*!< CFGCMP clock */
  326. RCU_ADC = RCU_REGIDX_BIT(IDX_APB2EN, 9U), /*!< ADC clock */
  327. RCU_TIMER0 = RCU_REGIDX_BIT(IDX_APB2EN, 11U), /*!< TIMER0 clock */
  328. RCU_SPI0 = RCU_REGIDX_BIT(IDX_APB2EN, 12U), /*!< SPI0 clock */
  329. RCU_USART0 = RCU_REGIDX_BIT(IDX_APB2EN, 14U), /*!< USART0 clock */
  330. RCU_TIMER14 = RCU_REGIDX_BIT(IDX_APB2EN, 16U), /*!< TIMER14 clock */
  331. RCU_TIMER15 = RCU_REGIDX_BIT(IDX_APB2EN, 17U), /*!< TIMER15 clock */
  332. RCU_TIMER16 = RCU_REGIDX_BIT(IDX_APB2EN, 18U), /*!< TIMER16 clock */
  333. /* APB1 peripherals */
  334. RCU_TIMER1 = RCU_REGIDX_BIT(IDX_APB1EN, 0U), /*!< TIMER1 clock */
  335. RCU_TIMER2 = RCU_REGIDX_BIT(IDX_APB1EN, 1U), /*!< TIMER2 clock */
  336. RCU_TIMER5 = RCU_REGIDX_BIT(IDX_APB1EN, 4U), /*!< TIMER5 clock */
  337. RCU_TIMER13 = RCU_REGIDX_BIT(IDX_APB1EN, 8U), /*!< TIMER13 clock */
  338. #ifdef GD32F170_190
  339. RCU_SLCD = RCU_REGIDX_BIT(IDX_APB1EN, 9U), /*!< SLCD clock */
  340. #endif /* GD32F170_190 */
  341. RCU_WWDGT = RCU_REGIDX_BIT(IDX_APB1EN, 11U), /*!< WWDGT clock */
  342. RCU_SPI1 = RCU_REGIDX_BIT(IDX_APB1EN, 14U), /*!< SPI1 clock */
  343. RCU_SPI2 = RCU_REGIDX_BIT(IDX_APB1EN, 15U), /*!< SPI2 clock */
  344. RCU_USART1 = RCU_REGIDX_BIT(IDX_APB1EN, 17U), /*!< USART1 clock */
  345. RCU_I2C0 = RCU_REGIDX_BIT(IDX_APB1EN, 21U), /*!< I2C0 clock */
  346. RCU_I2C1 = RCU_REGIDX_BIT(IDX_APB1EN, 22U), /*!< I2C1 clock */
  347. #ifdef GD32F130_150
  348. RCU_USBD = RCU_REGIDX_BIT(IDX_APB1EN, 23U), /*!< USBD clock */
  349. #endif /* GD32F130_150 */
  350. #ifdef GD32F170_190
  351. RCU_CAN0 = RCU_REGIDX_BIT(IDX_APB1EN, 25U), /*!< CAN0 clock */
  352. RCU_CAN1 = RCU_REGIDX_BIT(IDX_APB1EN, 26U), /*!< CAN1 clock */
  353. #endif /* GD32F170_190 */
  354. RCU_PMU = RCU_REGIDX_BIT(IDX_APB1EN, 28U), /*!< PMU clock */
  355. RCU_DAC = RCU_REGIDX_BIT(IDX_APB1EN, 29U), /*!< DAC clock */
  356. RCU_CEC = RCU_REGIDX_BIT(IDX_APB1EN, 30U), /*!< CEC clock */
  357. #ifdef GD32F170_190
  358. RCU_OPAIVREF = RCU_REGIDX_BIT(IDX_APB1EN, 31U), /*!< OPAIVREF clock */
  359. #endif /* GD32F170_190 */
  360. RCU_RTC = RCU_REGIDX_BIT(IDX_BDCTL, 15U), /*!< RTC clock */
  361. /* RCU_ADDAPB1EN */
  362. RCU_I2C2 = RCU_REGIDX_BIT(IDX_ADDAPB1EN, 0U) /*!< I2C2 clock */
  363. }rcu_periph_enum;
  364. /* peripheral clock enable when sleep mode*/
  365. typedef enum
  366. {
  367. /* AHB peripherals */
  368. RCU_SRAM_SLP = RCU_REGIDX_BIT(IDX_AHBEN, 2U), /*!< SRAM clock when sleep mode */
  369. RCU_FMC_SLP = RCU_REGIDX_BIT(IDX_AHBEN, 4U) /*!< FMC clock when sleep mode */
  370. }rcu_periph_sleep_enum;
  371. /* peripherals reset */
  372. typedef enum
  373. {
  374. /* AHB peripherals reset */
  375. RCU_GPIOARST = RCU_REGIDX_BIT(IDX_AHBRST, 17U), /*!< GPIOA reset */
  376. RCU_GPIOBRST = RCU_REGIDX_BIT(IDX_AHBRST, 18U), /*!< GPIOB reset */
  377. RCU_GPIOCRST = RCU_REGIDX_BIT(IDX_AHBRST, 19U), /*!< GPIOC reset */
  378. RCU_GPIODRST = RCU_REGIDX_BIT(IDX_AHBRST, 20U), /*!< GPIOD reset */
  379. RCU_GPIOFRST = RCU_REGIDX_BIT(IDX_AHBRST, 22U), /*!< GPIOF reset */
  380. RCU_TSIRST = RCU_REGIDX_BIT(IDX_AHBRST, 24U), /*!< TSI reset */
  381. /* APB2 peripherals reset */
  382. RCU_CFGCMPRST = RCU_REGIDX_BIT(IDX_APB2RST, 0U), /*!< CFGCMP reset */
  383. RCU_ADCRST = RCU_REGIDX_BIT(IDX_APB2RST, 9U), /*!< ADC reset */
  384. RCU_TIMER0RST = RCU_REGIDX_BIT(IDX_APB2RST, 11U), /*!< TIMER0 reset */
  385. RCU_SPI0RST = RCU_REGIDX_BIT(IDX_APB2RST, 12U), /*!< SPI0 reset */
  386. RCU_USART0RST = RCU_REGIDX_BIT(IDX_APB2RST, 14U), /*!< USART0 reset */
  387. RCU_TIMER14RST = RCU_REGIDX_BIT(IDX_APB2RST, 16U), /*!< TIMER14 reset */
  388. RCU_TIMER15RST = RCU_REGIDX_BIT(IDX_APB2RST, 17U), /*!< TIMER15 reset */
  389. RCU_TIMER16RST = RCU_REGIDX_BIT(IDX_APB2RST, 18U), /*!< TIMER16 reset */
  390. /* APB1 peripherals reset */
  391. RCU_TIMER1RST = RCU_REGIDX_BIT(IDX_APB1RST, 0U), /*!< TIMER1 reset */
  392. RCU_TIMER2RST = RCU_REGIDX_BIT(IDX_APB1RST, 1U), /*!< TIMER2 reset */
  393. RCU_TIMER5RST = RCU_REGIDX_BIT(IDX_APB1RST, 4U), /*!< TIMER5 reset */
  394. RCU_TIMER13RST = RCU_REGIDX_BIT(IDX_APB1RST, 8U), /*!< TIMER13 reset */
  395. #ifdef GD32F170_190
  396. RCU_SLCDRST = RCU_REGIDX_BIT(IDX_APB1RST, 9U), /*!< SLCD reset */
  397. #endif /* GD32F170_190 */
  398. RCU_WWDGTRST = RCU_REGIDX_BIT(IDX_APB1RST, 11U), /*!< WWDGT reset */
  399. RCU_SPI1RST = RCU_REGIDX_BIT(IDX_APB1RST, 14U), /*!< SPI1 reset */
  400. RCU_SPI2RST = RCU_REGIDX_BIT(IDX_APB1RST, 15U), /*!< SPI2 reset */
  401. RCU_USART1RST = RCU_REGIDX_BIT(IDX_APB1RST, 17U), /*!< USART1 reset */
  402. RCU_I2C0RST = RCU_REGIDX_BIT(IDX_APB1RST, 21U), /*!< I2C0 reset */
  403. RCU_I2C1RST = RCU_REGIDX_BIT(IDX_APB1RST, 22U), /*!< I2C1 reset */
  404. #ifdef GD32F130_150
  405. RCU_USBDRST = RCU_REGIDX_BIT(IDX_APB1RST, 23U), /*!< USBD reset */
  406. #endif /* GD32F130_150 */
  407. #ifdef GD32F170_190
  408. RCU_CAN0RST = RCU_REGIDX_BIT(IDX_APB1RST, 25U), /*!< CAN0 reset */
  409. RCU_CAN1RST = RCU_REGIDX_BIT(IDX_APB1RST, 26U), /*!< CAN1 reset */
  410. #endif /* GD32F170_190 */
  411. RCU_PMURST = RCU_REGIDX_BIT(IDX_APB1RST, 28U), /*!< PMU reset */
  412. RCU_DACRST = RCU_REGIDX_BIT(IDX_APB1RST, 29U), /*!< DAC reset */
  413. RCU_CECRST = RCU_REGIDX_BIT(IDX_APB1RST, 30U), /*!< CEC reset */
  414. #ifdef GD32F170_190
  415. RCU_OPAIVREFRST = RCU_REGIDX_BIT(IDX_APB1RST, 31U), /*!< OPAIVREF reset */
  416. #endif /* GD32F170_190 */
  417. /* RCU_ADDAPB1RST */
  418. RCU_I2C2RST = RCU_REGIDX_BIT(IDX_ADDAPB1RST, 0U), /*!< I2C2 reset */
  419. }rcu_periph_reset_enum;
  420. /* clock stabilization and peripheral reset flags */
  421. typedef enum
  422. {
  423. RCU_FLAG_IRC40KSTB = RCU_REGIDX_BIT(IDX_STB, 1U), /*!< IRC40K stabilization flag */
  424. RCU_FLAG_LXTALSTB = RCU_REGIDX_BIT(IDX_BDCTL, 1U), /*!< LXTAL stabilization flag */
  425. RCU_FLAG_IRC8MSTB = RCU_REGIDX_BIT(IDX_CTL0, 1U), /*!< IRC8M stabilization flag */
  426. RCU_FLAG_HXTALSTB = RCU_REGIDX_BIT(IDX_CTL0, 17U), /*!< HXTAL stabilization flag */
  427. RCU_FLAG_PLLSTB = RCU_REGIDX_BIT(IDX_CTL0, 25U), /*!< PLL stabilization flag */
  428. #ifdef GD32F130_150
  429. RCU_FLAG_IRC14MSTB = RCU_REGIDX_BIT(IDX_CTL1, 1U), /*!< IRC14M stabilization flag */
  430. #elif defined (GD32F170_190)
  431. RCU_FLAG_IRC28MSTB = RCU_REGIDX_BIT(IDX_CTL1, 1U), /*!< IRC28M stabilization flag */
  432. #endif /* GD32F130_150 */
  433. RCU_FLAG_V12RST = RCU_REGIDX_BIT(IDX_RSTSCK, 23U), /*!< 1.2V reset flags */
  434. RCU_FLAG_OBLRST = RCU_REGIDX_BIT(IDX_RSTSCK, 25U), /*!< option byte loader reset flag */
  435. RCU_FLAG_EPRST = RCU_REGIDX_BIT(IDX_RSTSCK, 26U), /*!< external pin reset reset flag */
  436. RCU_FLAG_PORRST = RCU_REGIDX_BIT(IDX_RSTSCK, 27U), /*!< power reset flag */
  437. RCU_FLAG_SWRST = RCU_REGIDX_BIT(IDX_RSTSCK, 28U), /*!< software reset reset flag */
  438. RCU_FLAG_FWDGTRST = RCU_REGIDX_BIT(IDX_RSTSCK, 29U), /*!< free watchdog timer reset flag */
  439. RCU_FLAG_WWDGTRST = RCU_REGIDX_BIT(IDX_RSTSCK, 30U), /*!< window watchdog timer reset flag */
  440. RCU_FLAG_LPRST = RCU_REGIDX_BIT(IDX_RSTSCK, 31U) /*!< low-power reset flag */
  441. }rcu_flag_enum;
  442. /* clock stabilization and ckm interrupt flags */
  443. typedef enum
  444. {
  445. RCU_INT_FLAG_IRC40KSTB = RCU_INT_IRC40KSTBIF, /*!< IRC40K stabilization interrupt flag */
  446. RCU_INT_FLAG_LXTALSTB = RCU_INT_LXTALSTBIF, /*!< LXTAL stabilization interrupt flag */
  447. RCU_INT_FLAG_IRC8MSTB = RCU_INT_IRC8MSTBIF, /*!< IRC8M stabilization interrupt flag */
  448. RCU_INT_FLAG_HXTALSTB = RCU_INT_HXTALSTBIF, /*!< HXTAL stabilization interrupt flag */
  449. RCU_INT_FLAG_PLLSTB = RCU_INT_PLLSTBIF, /*!< PLL stabilization interrupt flag */
  450. #ifdef GD32F130_150
  451. RCU_INT_FLAG_IRC14MSTB = RCU_INT_IRC14MSTBIF, /*!< IRC14M stabilization interrupt flag */
  452. #elif defined (GD32F170_190)
  453. RCU_INT_FLAG_IRC28MSTB = RCU_INT_IRC28MSTBIF, /*!< IRC28M stabilization interrupt flag */
  454. #endif /* GD32F130_150 */
  455. RCU_INT_FLAG_CKM = RCU_INT_CKMIF /*!< HXTAL clock stuck interrupt flag */
  456. }rcu_int_flag_enum;
  457. /* clock stabilization and stuck interrupt flags clear */
  458. typedef enum
  459. {
  460. RCU_INT_FLAG_IRC40KSTB_CLR = RCU_INT_IRC40KSTBIC, /*!< IRC40K stabilization interrupt flags clear */
  461. RCU_INT_FLAG_LXTALSTB_CLR = RCU_INT_LXTALSTBIC, /*!< LXTAL stabilization interrupt flags clear */
  462. RCU_INT_FLAG_IRC8MSTB_CLR = RCU_INT_IRC8MSTBIC, /*!< IRC8M stabilization interrupt flags clear */
  463. RCU_INT_FLAG_HXTALSTB_CLR = RCU_INT_HXTALSTBIC, /*!< HXTAL stabilization interrupt flags clear */
  464. RCU_INT_FLAG_PLLSTB_CLR = RCU_INT_PLLSTBIC, /*!< PLL stabilization interrupt flags clear */
  465. #ifdef GD32F130_150
  466. RCU_INT_FLAG_IRC14MSTB_CLR = RCU_INT_IRC14MSTBIC, /*!< IRC14M stabilization interrupt flags clear */
  467. #elif defined (GD32F170_190)
  468. RCU_INT_FLAG_IRC28MSTB_CLR = RCU_INT_IRC28MSTBIC, /*!< IRC28M stabilization interrupt flags clear */
  469. #endif /* GD32F130_150 */
  470. RCU_INT_FLAG_CKM_CLR = RCU_INT_CKMIC /*!< HXTAL clock stuck interrupt flags clear */
  471. }rcu_int_flag_clear_enum;
  472. /* clock stabilization interrupt enable or disable */
  473. typedef enum
  474. {
  475. RCU_INT_IRC40KSTB = RCU_INT_IRC40KSTBIE, /*!< IRC40K stabilization interrupt */
  476. RCU_INT_LXTALSTB = RCU_INT_LXTALSTBIE, /*!< LXTAL stabilization interrupt */
  477. RCU_INT_IRC8MSTB = RCU_INT_IRC8MSTBIE, /*!< IRC8M stabilization interrupt */
  478. RCU_INT_HXTALSTB = RCU_INT_HXTALSTBIE, /*!< HXTAL stabilization interrupt */
  479. RCU_INT_PLLSTB = RCU_INT_PLLSTBIE, /*!< PLL stabilization interrupt */
  480. #ifdef GD32F130_150
  481. RCU_INT_IRC14MSTB = RCU_INT_IRC14MSTBIE /*!< IRC14M stabilization interrupt */
  482. #elif defined (GD32F170_190)
  483. RCU_INT_IRC28MSTB = RCU_INT_IRC28MSTBIE /*!< IRC28M stabilization interrupt */
  484. #endif /* GD32F130_150 */
  485. }rcu_int_enum;
  486. /* ADC clock source */
  487. typedef enum
  488. {
  489. #ifdef GD32F130_150
  490. RCU_ADCCK_IRC14M = 0, /*!< ADC clock source select IRC14M */
  491. #elif defined (GD32F170_190)
  492. RCU_ADCCK_IRC28M_DIV2 = 0, /*!< ADC clock source select IRC28M/2 */
  493. RCU_ADCCK_IRC28M, /*!< ADC clock source select IRC28M */
  494. #endif /* GD32F130_150 */
  495. RCU_ADCCK_APB2_DIV2, /*!< ADC clock source select APB2/2 */
  496. RCU_ADCCK_APB2_DIV4, /*!< ADC clock source select APB2/4 */
  497. RCU_ADCCK_APB2_DIV6, /*!< ADC clock source select APB2/6 */
  498. RCU_ADCCK_APB2_DIV8 /*!< ADC clock source select APB2/8 */
  499. }rcu_adc_clock_enum;
  500. /* oscillator types */
  501. typedef enum
  502. {
  503. RCU_HXTAL = RCU_REGIDX_BIT(IDX_CTL0, 16U), /*!< HXTAL */
  504. RCU_LXTAL = RCU_REGIDX_BIT(IDX_BDCTL, 0U), /*!< LXTAL */
  505. RCU_IRC8M = RCU_REGIDX_BIT(IDX_CTL0, 0U), /*!< IRC8M */
  506. #ifdef GD32F130_150
  507. RCU_IRC14M = RCU_REGIDX_BIT(IDX_CTL1, 0U), /*!< IRC14M */
  508. #elif defined (GD32F170_190)
  509. RCU_IRC28M = RCU_REGIDX_BIT(IDX_CTL1, 0U), /*!< IRC28M */
  510. #endif /* GD32F130_150 */
  511. RCU_IRC40K = RCU_REGIDX_BIT(IDX_RSTSCK, 0U), /*!< IRC40K */
  512. RCU_PLL_CK = RCU_REGIDX_BIT(IDX_CTL0, 24U) /*!< PLL */
  513. }rcu_osci_type_enum;
  514. /* rcu clock frequency */
  515. typedef enum
  516. {
  517. CK_SYS = 0, /*!< system clock */
  518. CK_AHB, /*!< AHB clock */
  519. CK_APB1, /*!< APB1 clock */
  520. CK_APB2, /*!< APB2 clock */
  521. CK_ADC, /*!< ADC clock */
  522. CK_CEC, /*!< CEC clock */
  523. CK_USART /*!< USART clock */
  524. }rcu_clock_freq_enum;
  525. /* system clock source select */
  526. #define CFG0_SCS(regval) (BITS(0,1) & ((uint32_t)(regval) << 0))
  527. #define RCU_CKSYSSRC_IRC8M CFG0_SCS(0) /*!< system clock source select IRC8M */
  528. #define RCU_CKSYSSRC_HXTAL CFG0_SCS(1) /*!< system clock source select HXTAL */
  529. #define RCU_CKSYSSRC_PLL CFG0_SCS(2) /*!< system clock source select PLL */
  530. /* system clock source select status */
  531. #define CFG0_SCSS(regval) (BITS(2,3) & ((uint32_t)(regval) << 2))
  532. #define RCU_SCSS_IRC8M CFG0_SCSS(0) /*!< system clock source select IRC8M */
  533. #define RCU_SCSS_HXTAL CFG0_SCSS(1) /*!< system clock source select HXTAL */
  534. #define RCU_SCSS_PLL CFG0_SCSS(2) /*!< system clock source select PLL */
  535. /* AHB prescaler selection */
  536. #define CFG0_AHBPSC(regval) (BITS(4,7) & ((uint32_t)(regval) << 4))
  537. #define RCU_AHB_CKSYS_DIV1 CFG0_AHBPSC(0) /*!< AHB prescaler select CK_SYS */
  538. #define RCU_AHB_CKSYS_DIV2 CFG0_AHBPSC(8) /*!< AHB prescaler select CK_SYS/2 */
  539. #define RCU_AHB_CKSYS_DIV4 CFG0_AHBPSC(9) /*!< AHB prescaler select CK_SYS/4 */
  540. #define RCU_AHB_CKSYS_DIV8 CFG0_AHBPSC(10) /*!< AHB prescaler select CK_SYS/8 */
  541. #define RCU_AHB_CKSYS_DIV16 CFG0_AHBPSC(11) /*!< AHB prescaler select CK_SYS/16 */
  542. #define RCU_AHB_CKSYS_DIV64 CFG0_AHBPSC(12) /*!< AHB prescaler select CK_SYS/64 */
  543. #define RCU_AHB_CKSYS_DIV128 CFG0_AHBPSC(13) /*!< AHB prescaler select CK_SYS/128 */
  544. #define RCU_AHB_CKSYS_DIV256 CFG0_AHBPSC(14) /*!< AHB prescaler select CK_SYS/256 */
  545. #define RCU_AHB_CKSYS_DIV512 CFG0_AHBPSC(15) /*!< AHB prescaler select CK_SYS/512 */
  546. /* APB1 prescaler selection */
  547. #define CFG0_APB1PSC(regval) (BITS(8,10) & ((uint32_t)(regval) << 8))
  548. #define RCU_APB1_CKAHB_DIV1 CFG0_APB1PSC(0) /*!< APB1 prescaler select CK_AHB */
  549. #define RCU_APB1_CKAHB_DIV2 CFG0_APB1PSC(4) /*!< APB1 prescaler select CK_AHB/2 */
  550. #define RCU_APB1_CKAHB_DIV4 CFG0_APB1PSC(5) /*!< APB1 prescaler select CK_AHB/4 */
  551. #define RCU_APB1_CKAHB_DIV8 CFG0_APB1PSC(6) /*!< APB1 prescaler select CK_AHB/8 */
  552. #define RCU_APB1_CKAHB_DIV16 CFG0_APB1PSC(7) /*!< APB1 prescaler select CK_AHB/16 */
  553. /* APB2 prescaler selection */
  554. #define CFG0_APB2PSC(regval) (BITS(11,13) & ((uint32_t)(regval) << 11))
  555. #define RCU_APB2_CKAHB_DIV1 CFG0_APB2PSC(0) /*!< APB2 prescaler select CK_AHB */
  556. #define RCU_APB2_CKAHB_DIV2 CFG0_APB2PSC(4) /*!< APB2 prescaler select CK_AHB/2 */
  557. #define RCU_APB2_CKAHB_DIV4 CFG0_APB2PSC(5) /*!< APB2 prescaler select CK_AHB/4 */
  558. #define RCU_APB2_CKAHB_DIV8 CFG0_APB2PSC(6) /*!< APB2 prescaler select CK_AHB/8 */
  559. #define RCU_APB2_CKAHB_DIV16 CFG0_APB2PSC(7) /*!< APB2 prescaler select CK_AHB/16 */
  560. /* ADC clock prescaler selection */
  561. #define CFG0_ADCPSC(regval) (BITS(14,15) & ((uint32_t)(regval) << 14))
  562. #define RCU_ADC_CKAPB2_DIV2 CFG0_ADCPSC(0) /*!< ADC clock prescaler select CK_APB2/2 */
  563. #define RCU_ADC_CKAPB2_DIV4 CFG0_ADCPSC(1) /*!< ADC clock prescaler select CK_APB2/4 */
  564. #define RCU_ADC_CKAPB2_DIV6 CFG0_ADCPSC(2) /*!< ADC clock prescaler select CK_APB2/6 */
  565. #define RCU_ADC_CKAPB2_DIV8 CFG0_ADCPSC(3) /*!< ADC clock prescaler select CK_APB2/8 */
  566. /* PLL clock source selection */
  567. #define RCU_PLLSRC_IRC8M_DIV2 (uint32_t)0x00000000 /*!< PLL clock source select IRC8M/2 */
  568. #define RCU_PLLSRC_HXTAL RCU_CFG0_PLLSEL /*!< PLL clock source select HXTAL */
  569. /* HXTAL divider for PLL source clock selection */
  570. #define RCU_PLLPREDV_HXTAL (uint32_t)0x00000000 /*!< HXTAL clock selected */
  571. #define RCU_PLLPREDV_HXTAL_DIV2 RCU_CFG0_PLLPREDV /*!< HXTAL/2 clock selected */
  572. /* PLL multiply factor */
  573. #define CFG0_PLLMF(regval) (BITS(18,21) & ((uint32_t)(regval) << 18))
  574. #define RCU_PLL_MUL2 CFG0_PLLMF(0) /*!< PLL source clock multiply by 2 */
  575. #define RCU_PLL_MUL3 CFG0_PLLMF(1) /*!< PLL source clock multiply by 3 */
  576. #define RCU_PLL_MUL4 CFG0_PLLMF(2) /*!< PLL source clock multiply by 4 */
  577. #define RCU_PLL_MUL5 CFG0_PLLMF(3) /*!< PLL source clock multiply by 5 */
  578. #define RCU_PLL_MUL6 CFG0_PLLMF(4) /*!< PLL source clock multiply by 6 */
  579. #define RCU_PLL_MUL7 CFG0_PLLMF(5) /*!< PLL source clock multiply by 7 */
  580. #define RCU_PLL_MUL8 CFG0_PLLMF(6) /*!< PLL source clock multiply by 8 */
  581. #define RCU_PLL_MUL9 CFG0_PLLMF(7) /*!< PLL source clock multiply by 9 */
  582. #define RCU_PLL_MUL10 CFG0_PLLMF(8) /*!< PLL source clock multiply by 10 */
  583. #define RCU_PLL_MUL11 CFG0_PLLMF(9) /*!< PLL source clock multiply by 11 */
  584. #define RCU_PLL_MUL12 CFG0_PLLMF(10) /*!< PLL source clock multiply by 12 */
  585. #define RCU_PLL_MUL13 CFG0_PLLMF(11) /*!< PLL source clock multiply by 13 */
  586. #define RCU_PLL_MUL14 CFG0_PLLMF(12) /*!< PLL source clock multiply by 14 */
  587. #define RCU_PLL_MUL15 CFG0_PLLMF(13) /*!< PLL source clock multiply by 15 */
  588. #define RCU_PLL_MUL16 CFG0_PLLMF(14) /*!< PLL source clock multiply by 16 */
  589. #define RCU_PLL_MUL17 (RCU_CFG0_PLLMF4 | CFG0_PLLMF(0)) /*!< PLL source clock multiply by 17 */
  590. #define RCU_PLL_MUL18 (RCU_CFG0_PLLMF4 | CFG0_PLLMF(1)) /*!< PLL source clock multiply by 18 */
  591. #define RCU_PLL_MUL19 (RCU_CFG0_PLLMF4 | CFG0_PLLMF(2)) /*!< PLL source clock multiply by 19 */
  592. #define RCU_PLL_MUL20 (RCU_CFG0_PLLMF4 | CFG0_PLLMF(3)) /*!< PLL source clock multiply by 20 */
  593. #define RCU_PLL_MUL21 (RCU_CFG0_PLLMF4 | CFG0_PLLMF(4)) /*!< PLL source clock multiply by 21 */
  594. #define RCU_PLL_MUL22 (RCU_CFG0_PLLMF4 | CFG0_PLLMF(5)) /*!< PLL source clock multiply by 22 */
  595. #define RCU_PLL_MUL23 (RCU_CFG0_PLLMF4 | CFG0_PLLMF(6)) /*!< PLL source clock multiply by 23 */
  596. #define RCU_PLL_MUL24 (RCU_CFG0_PLLMF4 | CFG0_PLLMF(7)) /*!< PLL source clock multiply by 24 */
  597. #define RCU_PLL_MUL25 (RCU_CFG0_PLLMF4 | CFG0_PLLMF(8)) /*!< PLL source clock multiply by 25 */
  598. #define RCU_PLL_MUL26 (RCU_CFG0_PLLMF4 | CFG0_PLLMF(9)) /*!< PLL source clock multiply by 26 */
  599. #define RCU_PLL_MUL27 (RCU_CFG0_PLLMF4 | CFG0_PLLMF(10)) /*!< PLL source clock multiply by 27 */
  600. #define RCU_PLL_MUL28 (RCU_CFG0_PLLMF4 | CFG0_PLLMF(11)) /*!< PLL source clock multiply by 28 */
  601. #define RCU_PLL_MUL29 (RCU_CFG0_PLLMF4 | CFG0_PLLMF(12)) /*!< PLL source clock multiply by 29 */
  602. #define RCU_PLL_MUL30 (RCU_CFG0_PLLMF4 | CFG0_PLLMF(13)) /*!< PLL source clock multiply by 30 */
  603. #define RCU_PLL_MUL31 (RCU_CFG0_PLLMF4 | CFG0_PLLMF(14)) /*!< PLL source clock multiply by 31 */
  604. #define RCU_PLL_MUL32 (RCU_CFG0_PLLMF4 | CFG0_PLLMF(15)) /*!< PLL source clock multiply by 32 */
  605. #ifdef GD32F130_150
  606. /* USBD clock prescaler selection */
  607. #define CFG0_USBDPSC(regval) (BITS(22,23) & ((uint32_t)(regval) << 22))
  608. #define RCU_USBD_CKPLL_DIV1_5 CFG0_USBDPSC(0) /*!< USBD clock prescaler select CK_PLL/1.5 */
  609. #define RCU_USBD_CKPLL_DIV1 CFG0_USBDPSC(1) /*!< USBD clock prescaler select CK_PLL */
  610. #define RCU_USBD_CKPLL_DIV2_5 CFG0_USBDPSC(2) /*!< USBD clock prescaler select CK_PLL/2.5 */
  611. #define RCU_USBD_CKPLL_DIV2 CFG0_USBDPSC(3) /*!< USBD clock prescaler select CK_PLL/2 */
  612. /* CK_OUT clock source selection */
  613. #define CFG0_CKOUTSEL(regval) (BITS(24,26) & ((uint32_t)(regval) << 24))
  614. #define RCU_CKOUTSRC_NONE CFG0_CKOUTSEL(0) /*!< no clock selected */
  615. #define RCU_CKOUTSRC_IRC14M CFG0_CKOUTSEL(1) /*!< CK_OUT clock source select IRC14M */
  616. #define RCU_CKOUTSRC_IRC40K CFG0_CKOUTSEL(2) /*!< CK_OUT clock source select IRC40K */
  617. #define RCU_CKOUTSRC_LXTAL CFG0_CKOUTSEL(3) /*!< CK_OUT clock source select LXTAL */
  618. #define RCU_CKOUTSRC_CKSYS CFG0_CKOUTSEL(4) /*!< CK_OUT clock source select CKSYS */
  619. #define RCU_CKOUTSRC_IRC8M CFG0_CKOUTSEL(5) /*!< CK_OUT clock source select IRC8M */
  620. #define RCU_CKOUTSRC_HXTAL CFG0_CKOUTSEL(6) /*!< CK_OUT clock source select HXTAL */
  621. #define RCU_CKOUTSRC_CKPLL_DIV1 (RCU_CFG0_PLLDV | CFG0_CKOUTSEL(7)) /*!< CK_OUT clock source select CK_PLL */
  622. #define RCU_CKOUTSRC_CKPLL_DIV2 CFG0_CKOUTSEL(7) /*!< CK_OUT clock source select CK_PLL/2 */
  623. /* CK_OUT divider */
  624. #define CFG0_CKOUTDIV(regval) (BITS(28,30) & ((uint32_t)(regval) << 28))
  625. #define RCU_CKOUT_DIV1 CFG0_CKOUTDIV(0) /*!< CK_OUT is divided by 1 */
  626. #define RCU_CKOUT_DIV2 CFG0_CKOUTDIV(1) /*!< CK_OUT is divided by 2 */
  627. #define RCU_CKOUT_DIV4 CFG0_CKOUTDIV(2) /*!< CK_OUT is divided by 4 */
  628. #define RCU_CKOUT_DIV8 CFG0_CKOUTDIV(3) /*!< CK_OUT is divided by 8 */
  629. #define RCU_CKOUT_DIV16 CFG0_CKOUTDIV(4) /*!< CK_OUT is divided by 16 */
  630. #define RCU_CKOUT_DIV32 CFG0_CKOUTDIV(5) /*!< CK_OUT is divided by 32 */
  631. #define RCU_CKOUT_DIV64 CFG0_CKOUTDIV(6) /*!< CK_OUT is divided by 64 */
  632. #define RCU_CKOUT_DIV128 CFG0_CKOUTDIV(7) /*!< CK_OUT is divided by 128 */
  633. #elif defined (GD32F170_190)
  634. /* CK_OUT0 clock source selection */
  635. #define CFG0_CKOUT0SEL(regval) (BITS(24,26) & ((uint32_t)(regval) << 24))
  636. #define RCU_CKOUT0SRC_NONE CFG0_CKOUT0SEL(0) /*!< no clock selected */
  637. #define RCU_CKOUT0SRC_IRC28M CFG0_CKOUT0SEL(1) /*!< CK_OUT0 clock source select IRC28M */
  638. #define RCU_CKOUT0SRC_IRC40K CFG0_CKOUT0SEL(2) /*!< CK_OUT0 clock source select IRC40K */
  639. #define RCU_CKOUT0SRC_LXTAL CFG0_CKOUT0SEL(3) /*!< CK_OUT0 clock source select LXTAL */
  640. #define RCU_CKOUT0SRC_CKSYS CFG0_CKOUT0SEL(4) /*!< CK_OUT0 clock source select CKSYS */
  641. #define RCU_CKOUT0SRC_IRC8M CFG0_CKOUT0SEL(5) /*!< CK_OUT0 clock source select IRC8M */
  642. #define RCU_CKOUT0SRC_HXTAL CFG0_CKOUT0SEL(6) /*!< CK_OUT0 clock source select HXTAL */
  643. #define RCU_CKOUT0SRC_CKPLL_DIV1 (RCU_CFG0_PLLDV | CFG0_CKOUT0SEL(7)) /*!< CK_OUT0 clock source select CK_PLL */
  644. #define RCU_CKOUT0SRC_CKPLL_DIV2 CFG0_CKOUT0SEL(7) /*!< CK_OUT0 clock source select CK_PLL/2 */
  645. /* CK_OUT0 divider */
  646. #define CFG0_CKOUT0DIV(regval) (BITS(28,30) & ((uint32_t)(regval) << 28))
  647. #define RCU_CKOUT0_DIV1 CFG0_CKOUT0DIV(0) /*!< CK_OUT0 is divided by 1 */
  648. #define RCU_CKOUT0_DIV2 CFG0_CKOUT0DIV(1) /*!< CK_OUT0 is divided by 2 */
  649. #define RCU_CKOUT0_DIV4 CFG0_CKOUT0DIV(2) /*!< CK_OUT0 is divided by 4 */
  650. #define RCU_CKOUT0_DIV8 CFG0_CKOUT0DIV(3) /*!< CK_OUT0 is divided by 8 */
  651. #define RCU_CKOUT0_DIV16 CFG0_CKOUT0DIV(4) /*!< CK_OUT0 is divided by 16 */
  652. #define RCU_CKOUT0_DIV32 CFG0_CKOUT0DIV(5) /*!< CK_OUT0 is divided by 32 */
  653. #define RCU_CKOUT0_DIV64 CFG0_CKOUT0DIV(6) /*!< CK_OUT0 is divided by 64 */
  654. #define RCU_CKOUT0_DIV128 CFG0_CKOUT0DIV(7) /*!< CK_OUT0 is divided by 128 */
  655. #endif /* GD32F130_150 */
  656. /* CK_PLL divide by 1 or 2 for CK_OUT */
  657. #define RCU_PLLDV_CKPLL_DIV2 (uint32_t)0x00000000U /*!< CK_PLL divide by 2 for CK_OUT */
  658. #define RCU_PLLDV_CKPLL RCU_CFG0_PLLDV /*!< CK_PLL divide by 1 for CK_OUT */
  659. /* LXTAL drive capability */
  660. #define BDCTL_LXTALDRI(regval) (BITS(3,4) & ((uint32_t)(regval) << 3))
  661. #define RCU_LXTAL_LOWDRI BDCTL_LXTALDRI(0) /*!< lower driving capability */
  662. #define RCU_LXTAL_MED_LOWDRI BDCTL_LXTALDRI(1) /*!< medium low driving capability */
  663. #define RCU_LXTAL_MED_HIGHDRI BDCTL_LXTALDRI(2) /*!< medium high driving capability */
  664. #define RCU_LXTAL_HIGHDRI BDCTL_LXTALDRI(3) /*!< higher driving capability */
  665. /* RTC clock entry selection */
  666. #define BDCTL_RTCSRC(regval) (BITS(8,9) & ((uint32_t)(regval) << 8))
  667. #define RCU_RTCSRC_NONE BDCTL_RTCSRC(0) /*!< no clock selected */
  668. #define RCU_RTCSRC_LXTAL BDCTL_RTCSRC(1) /*!< LXTAL selected as RTC source clock */
  669. #define RCU_RTCSRC_IRC40K BDCTL_RTCSRC(2) /*!< IRC40K selected as RTC source clock */
  670. #define RCU_RTCSRC_HXTAL_DIV32 BDCTL_RTCSRC(3) /*!< HXTAL/32 selected as RTC source clock */
  671. #ifdef GD32F170_190
  672. /* SLCD clock entry selection */
  673. #define BDCTL_RTCSRC(regval) (BITS(8,9) & ((uint32_t)(regval) << 8))
  674. #define RCU_SLCDSRC_NONE BDCTL_RTCSRC(0) /*!< no clock selected */
  675. #define RCU_SLCDSRC_LXTAL BDCTL_RTCSRC(1) /*!< LXTAL selected as SLCD source clock */
  676. #define RCU_SLCDSRC_IRC40K BDCTL_RTCSRC(2) /*!< IRC40K selected as SLCD source clock */
  677. #define RCU_SLCDSRC_HXTAL_DIV32 BDCTL_RTCSRC(3) /*!< HXTAL/32 selected as SLCD source clock */
  678. #endif /* GD32F170_190 */
  679. /* CK_HXTAL divider previous PLL */
  680. #define CFG1_HXTALPREDV(regval) (BITS(0,3) & ((uint32_t)(regval) << 0))
  681. #define RCU_PLL_HXTAL_DIV1 CFG1_HXTALPREDV(0) /*!< HXTAL input to PLL not divided */
  682. #define RCU_PLL_HXTAL_DIV2 CFG1_HXTALPREDV(1) /*!< HXTAL input to PLL divided by 2 */
  683. #define RCU_PLL_HXTAL_DIV3 CFG1_HXTALPREDV(2) /*!< HXTAL input to PLL divided by 3 */
  684. #define RCU_PLL_HXTAL_DIV4 CFG1_HXTALPREDV(3) /*!< HXTAL input to PLL divided by 4 */
  685. #define RCU_PLL_HXTAL_DIV5 CFG1_HXTALPREDV(4) /*!< HXTAL input to PLL divided by 5 */
  686. #define RCU_PLL_HXTAL_DIV6 CFG1_HXTALPREDV(5) /*!< HXTAL input to PLL divided by 6 */
  687. #define RCU_PLL_HXTAL_DIV7 CFG1_HXTALPREDV(6) /*!< HXTAL input to PLL divided by 7 */
  688. #define RCU_PLL_HXTAL_DIV8 CFG1_HXTALPREDV(7) /*!< HXTAL input to PLL divided by 8 */
  689. #define RCU_PLL_HXTAL_DIV9 CFG1_HXTALPREDV(8) /*!< HXTAL input to PLL divided by 9 */
  690. #define RCU_PLL_HXTAL_DIV10 CFG1_HXTALPREDV(9) /*!< HXTAL input to PLL divided by 10 */
  691. #define RCU_PLL_HXTAL_DIV11 CFG1_HXTALPREDV(10) /*!< HXTAL input to PLL divided by 11 */
  692. #define RCU_PLL_HXTAL_DIV12 CFG1_HXTALPREDV(11) /*!< HXTAL input to PLL divided by 12 */
  693. #define RCU_PLL_HXTAL_DIV13 CFG1_HXTALPREDV(12) /*!< HXTAL input to PLL divided by 13 */
  694. #define RCU_PLL_HXTAL_DIV14 CFG1_HXTALPREDV(13) /*!< HXTAL input to PLL divided by 14 */
  695. #define RCU_PLL_HXTAL_DIV15 CFG1_HXTALPREDV(14) /*!< HXTAL input to PLL divided by 15 */
  696. #define RCU_PLL_HXTAL_DIV16 CFG1_HXTALPREDV(15) /*!< HXTAL input to PLL divided by 16 */
  697. /* USART0 clock source selection */
  698. #define CFG2_USART0SEL(regval) (BITS(0,1) & ((uint32_t)(regval) << 0))
  699. #define RCU_USART0SRC_CKAPB2 CFG2_USART0SEL(0) /*!< CK_USART0 select CK_APB2 */
  700. #define RCU_USART0SRC_CKSYS CFG2_USART0SEL(1) /*!< CK_USART0 select CK_SYS */
  701. #define RCU_USART0SRC_LXTAL CFG2_USART0SEL(2) /*!< CK_USART0 select LXTAL */
  702. #define RCU_USART0SRC_IRC8M CFG2_USART0SEL(3) /*!< CK_USART0 select IRC8M */
  703. /* CEC clock source selection */
  704. #define RCU_CECSRC_IRC8M_DIV244 (uint32_t)0x00000000U /*!< CK_CEC clock source select IRC8M/244 */
  705. #define RCU_CECSRC_LXTAL RCU_CFG2_CECSEL /*!< CK_CEC clock source select LXTAL */
  706. #ifdef GD32F130_150
  707. /* ADC clock source selection */
  708. #define RCU_ADCSRC_IRC14M (uint32_t)0x00000000U /*!< ADC clock source select */
  709. #define RCU_ADCSRC_APB2DIV RCU_CFG2_ADCSEL /*!< ADC clock source select */
  710. #elif defined (GD32F170_190)
  711. /* ADC clock source selection */
  712. #define RCU_ADCSRC_IRC28M (uint32_t)0x00000000U /*!< ADC clock source select */
  713. #define RCU_ADCSRC_APB2DIV RCU_CFG2_ADCSEL /*!< ADC clock source select */
  714. /* IRC28M clock divider for ADC */
  715. #define RCU_ADC_IRC28M_DIV2 (uint32_t)0x00000000U /*!< IRC28M/2 select to ADC clock */
  716. #define RCU_ADC_IRC28M_DIV1 RCU_CFG2_IRC28MDIV /*!< IRC28M select to ADC clock */
  717. /* CK_OUT1 clock source selection */
  718. #define CFG3_CKOUT1SEL(regval) (BITS(0,2) & ((uint32_t)(regval) << 0))
  719. #define RCU_CKOUT1SRC_NONE CFG3_CKOUT1SEL(0) /*!< no clock selected */
  720. #define RCU_CKOUT1SRC_IRC28M CFG3_CKOUT1SEL(1) /*!< CK_OUT1 clock source select IRC28M */
  721. #define RCU_CKOUT1SRC_IRC40K CFG3_CKOUT1SEL(2) /*!< CK_OUT1 clock source select IRC40K */
  722. #define RCU_CKOUT1SRC_LXTAL CFG3_CKOUT1SEL(3) /*!< CK_OUT1 clock source select LXTAL */
  723. #define RCU_CKOUT1SRC_CKSYS CFG3_CKOUT1SEL(4) /*!< CK_OUT1 clock source select CKSYS */
  724. #define RCU_CKOUT1SRC_IRC8M CFG3_CKOUT1SEL(5) /*!< CK_OUT1 clock source select IRC8M */
  725. #define RCU_CKOUT1SRC_HXTAL CFG3_CKOUT1SEL(6) /*!< CK_OUT1 clock source select HXTAL */
  726. #define RCU_CKOUT1SRC_CKPLL_DIV1 0x00000007U /*!< CK_OUT1 clock source select CK_PLL */
  727. #define RCU_CKOUT1SRC_CKPLL_DIV2 0x00000008U /*!< CK_OUT1 clock source select CK_PLL/2 */
  728. /* CK_OUT1 divider */
  729. #define CFG3_CKOUT1DIV(regval) (BITS(8,13) & ((uint32_t)(regval) << 8))
  730. #define RCU_CKOUT1_DIV1 CFG3_CKOUT1DIV(0) /*!< CK_OUT1 is divided by 1 */
  731. #define RCU_CKOUT1_DIV2 CFG3_CKOUT1DIV(1) /*!< CK_OUT1 is divided by 2 */
  732. #define RCU_CKOUT1_DIV3 CFG3_CKOUT1DIV(2) /*!< CK_OUT1 is divided by 3 */
  733. #define RCU_CKOUT1_DIV4 CFG3_CKOUT1DIV(3) /*!< CK_OUT1 is divided by 4 */
  734. #define RCU_CKOUT1_DIV5 CFG3_CKOUT1DIV(4) /*!< CK_OUT1 is divided by 5 */
  735. #define RCU_CKOUT1_DIV6 CFG3_CKOUT1DIV(5) /*!< CK_OUT1 is divided by 6 */
  736. #define RCU_CKOUT1_DIV7 CFG3_CKOUT1DIV(6) /*!< CK_OUT1 is divided by 7 */
  737. #define RCU_CKOUT1_DIV8 CFG3_CKOUT1DIV(7) /*!< CK_OUT1 is divided by 8 */
  738. #define RCU_CKOUT1_DIV9 CFG3_CKOUT1DIV(8) /*!< CK_OUT1 is divided by 9 */
  739. #define RCU_CKOUT1_DIV10 CFG3_CKOUT1DIV(9) /*!< CK_OUT1 is divided by 10 */
  740. #define RCU_CKOUT1_DIV11 CFG3_CKOUT1DIV(10) /*!< CK_OUT1 is divided by 11 */
  741. #define RCU_CKOUT1_DIV12 CFG3_CKOUT1DIV(11) /*!< CK_OUT1 is divided by 12 */
  742. #define RCU_CKOUT1_DIV13 CFG3_CKOUT1DIV(12) /*!< CK_OUT1 is divided by 13 */
  743. #define RCU_CKOUT1_DIV14 CFG3_CKOUT1DIV(13) /*!< CK_OUT1 is divided by 14 */
  744. #define RCU_CKOUT1_DIV15 CFG3_CKOUT1DIV(14) /*!< CK_OUT1 is divided by 15 */
  745. #define RCU_CKOUT1_DIV16 CFG3_CKOUT1DIV(15) /*!< CK_OUT1 is divided by 16 */
  746. #define RCU_CKOUT1_DIV17 CFG3_CKOUT1DIV(16) /*!< CK_OUT1 is divided by 17 */
  747. #define RCU_CKOUT1_DIV18 CFG3_CKOUT1DIV(17) /*!< CK_OUT1 is divided by 18 */
  748. #define RCU_CKOUT1_DIV19 CFG3_CKOUT1DIV(18) /*!< CK_OUT1 is divided by 19 */
  749. #define RCU_CKOUT1_DIV20 CFG3_CKOUT1DIV(19) /*!< CK_OUT1 is divided by 20 */
  750. #define RCU_CKOUT1_DIV21 CFG3_CKOUT1DIV(20) /*!< CK_OUT1 is divided by 21 */
  751. #define RCU_CKOUT1_DIV22 CFG3_CKOUT1DIV(21) /*!< CK_OUT1 is divided by 22 */
  752. #define RCU_CKOUT1_DIV23 CFG3_CKOUT1DIV(22) /*!< CK_OUT1 is divided by 23 */
  753. #define RCU_CKOUT1_DIV24 CFG3_CKOUT1DIV(23) /*!< CK_OUT1 is divided by 24 */
  754. #define RCU_CKOUT1_DIV25 CFG3_CKOUT1DIV(24) /*!< CK_OUT1 is divided by 25 */
  755. #define RCU_CKOUT1_DIV26 CFG3_CKOUT1DIV(25) /*!< CK_OUT1 is divided by 26 */
  756. #define RCU_CKOUT1_DIV27 CFG3_CKOUT1DIV(26) /*!< CK_OUT1 is divided by 27 */
  757. #define RCU_CKOUT1_DIV28 CFG3_CKOUT1DIV(27) /*!< CK_OUT1 is divided by 28 */
  758. #define RCU_CKOUT1_DIV29 CFG3_CKOUT1DIV(28) /*!< CK_OUT1 is divided by 29 */
  759. #define RCU_CKOUT1_DIV30 CFG3_CKOUT1DIV(29) /*!< CK_OUT1 is divided by 30 */
  760. #define RCU_CKOUT1_DIV31 CFG3_CKOUT1DIV(30) /*!< CK_OUT1 is divided by 31 */
  761. #define RCU_CKOUT1_DIV32 CFG3_CKOUT1DIV(31) /*!< CK_OUT1 is divided by 32 */
  762. #define RCU_CKOUT1_DIV33 CFG3_CKOUT1DIV(32) /*!< CK_OUT1 is divided by 33 */
  763. #define RCU_CKOUT1_DIV34 CFG3_CKOUT1DIV(33) /*!< CK_OUT1 is divided by 34 */
  764. #define RCU_CKOUT1_DIV35 CFG3_CKOUT1DIV(34) /*!< CK_OUT1 is divided by 35 */
  765. #define RCU_CKOUT1_DIV36 CFG3_CKOUT1DIV(35) /*!< CK_OUT1 is divided by 36 */
  766. #define RCU_CKOUT1_DIV37 CFG3_CKOUT1DIV(36) /*!< CK_OUT1 is divided by 37 */
  767. #define RCU_CKOUT1_DIV38 CFG3_CKOUT1DIV(37) /*!< CK_OUT1 is divided by 38 */
  768. #define RCU_CKOUT1_DIV39 CFG3_CKOUT1DIV(38) /*!< CK_OUT1 is divided by 39 */
  769. #define RCU_CKOUT1_DIV40 CFG3_CKOUT1DIV(39) /*!< CK_OUT1 is divided by 40 */
  770. #define RCU_CKOUT1_DIV41 CFG3_CKOUT1DIV(40) /*!< CK_OUT1 is divided by 41 */
  771. #define RCU_CKOUT1_DIV42 CFG3_CKOUT1DIV(41) /*!< CK_OUT1 is divided by 42 */
  772. #define RCU_CKOUT1_DIV43 CFG3_CKOUT1DIV(42) /*!< CK_OUT1 is divided by 43 */
  773. #define RCU_CKOUT1_DIV44 CFG3_CKOUT1DIV(43) /*!< CK_OUT1 is divided by 44 */
  774. #define RCU_CKOUT1_DIV45 CFG3_CKOUT1DIV(44) /*!< CK_OUT1 is divided by 45 */
  775. #define RCU_CKOUT1_DIV46 CFG3_CKOUT1DIV(45) /*!< CK_OUT1 is divided by 46 */
  776. #define RCU_CKOUT1_DIV47 CFG3_CKOUT1DIV(46) /*!< CK_OUT1 is divided by 47 */
  777. #define RCU_CKOUT1_DIV48 CFG3_CKOUT1DIV(47) /*!< CK_OUT1 is divided by 48 */
  778. #define RCU_CKOUT1_DIV49 CFG3_CKOUT1DIV(48) /*!< CK_OUT1 is divided by 49 */
  779. #define RCU_CKOUT1_DIV50 CFG3_CKOUT1DIV(49) /*!< CK_OUT1 is divided by 50 */
  780. #define RCU_CKOUT1_DIV51 CFG3_CKOUT1DIV(50) /*!< CK_OUT1 is divided by 51 */
  781. #define RCU_CKOUT1_DIV52 CFG3_CKOUT1DIV(51) /*!< CK_OUT1 is divided by 52 */
  782. #define RCU_CKOUT1_DIV53 CFG3_CKOUT1DIV(52) /*!< CK_OUT1 is divided by 53 */
  783. #define RCU_CKOUT1_DIV54 CFG3_CKOUT1DIV(53) /*!< CK_OUT1 is divided by 54 */
  784. #define RCU_CKOUT1_DIV55 CFG3_CKOUT1DIV(54) /*!< CK_OUT1 is divided by 55 */
  785. #define RCU_CKOUT1_DIV56 CFG3_CKOUT1DIV(55) /*!< CK_OUT1 is divided by 56 */
  786. #define RCU_CKOUT1_DIV57 CFG3_CKOUT1DIV(56) /*!< CK_OUT1 is divided by 57 */
  787. #define RCU_CKOUT1_DIV58 CFG3_CKOUT1DIV(57) /*!< CK_OUT1 is divided by 58 */
  788. #define RCU_CKOUT1_DIV59 CFG3_CKOUT1DIV(58) /*!< CK_OUT1 is divided by 59 */
  789. #define RCU_CKOUT1_DIV60 CFG3_CKOUT1DIV(59) /*!< CK_OUT1 is divided by 60 */
  790. #define RCU_CKOUT1_DIV61 CFG3_CKOUT1DIV(60) /*!< CK_OUT1 is divided by 61 */
  791. #define RCU_CKOUT1_DIV62 CFG3_CKOUT1DIV(61) /*!< CK_OUT1 is divided by 62 */
  792. #define RCU_CKOUT1_DIV63 CFG3_CKOUT1DIV(62) /*!< CK_OUT1 is divided by 63 */
  793. #define RCU_CKOUT1_DIV64 CFG3_CKOUT1DIV(63) /*!< CK_OUT1 is divided by 64 */
  794. #endif /* GD32F130_150 */
  795. #ifdef GD32F130_150
  796. /* Deep-sleep mode voltage */
  797. #define DSV_DSLPVS(regval) (BITS(0,2) & ((uint32_t)(regval) << 0))
  798. #define RCU_DEEPSLEEP_V_1_2 DSV_DSLPVS(0) /*!< core voltage is 1.2V in deep-sleep mode */
  799. #define RCU_DEEPSLEEP_V_1_1 DSV_DSLPVS(1) /*!< core voltage is 1.1V in deep-sleep mode */
  800. #define RCU_DEEPSLEEP_V_1_0 DSV_DSLPVS(2) /*!< core voltage is 1.0V in deep-sleep mode */
  801. #define RCU_DEEPSLEEP_V_0_9 DSV_DSLPVS(3) /*!< core voltage is 0.9V in deep-sleep mode */
  802. /*Power down voltage select*/
  803. #define RCU_PDR_V_2_6 (uint32_t)0x00000000U /*!< power down voltage is 2.6V */
  804. #define RCU_PDR_V_1_8 RCU_PDVSEL_PDRVS /*!< power down voltage is 1.8V */
  805. #elif defined (GD32F170_190)
  806. /* Deep-sleep mode voltage */
  807. #define DSV_DSLPVS(regval) (BITS(0,2) & ((uint32_t)(regval) << 0))
  808. #define RCU_DEEPSLEEP_V_1_8 DSV_DSLPVS(0) /*!< core voltage is 1.8V in deep-sleep mode */
  809. #define RCU_DEEPSLEEP_V_1_6 DSV_DSLPVS(1) /*!< core voltage is 1.6V in deep-sleep mode */
  810. #define RCU_DEEPSLEEP_V_1_4 DSV_DSLPVS(2) /*!< core voltage is 1.4V in deep-sleep mode */
  811. #define RCU_DEEPSLEEP_V_1_2 DSV_DSLPVS(3) /*!< core voltage is 1.2V in deep-sleep mode */
  812. #endif /* GD32F130_150 */
  813. /* function declarations */
  814. /* initialization, peripheral clock and reset configuration functions */
  815. /* deinitialize the RCU */
  816. void rcu_deinit(void);
  817. /* enable the peripherals clock */
  818. void rcu_periph_clock_enable(rcu_periph_enum periph);
  819. /* disable the peripherals clock */
  820. void rcu_periph_clock_disable(rcu_periph_enum periph);
  821. /* enable the peripherals clock when sleep mode */
  822. void rcu_periph_clock_sleep_enable(rcu_periph_sleep_enum periph);
  823. /* disable the peripherals clock when sleep mode */
  824. void rcu_periph_clock_sleep_disable(rcu_periph_sleep_enum periph);
  825. /* reset the peripherals */
  826. void rcu_periph_reset_enable(rcu_periph_reset_enum periph_reset);
  827. /* disable reset the peripheral */
  828. void rcu_periph_reset_disable(rcu_periph_reset_enum periph_reset);
  829. /* reset the BKP domain */
  830. void rcu_bkp_reset_enable(void);
  831. /* disable the BKP domain reset */
  832. void rcu_bkp_reset_disable(void);
  833. /* system clock, AHB, APB1, APB2, clock out, USART, ADC and other periphral configuration functions */
  834. /* configure the system clock source */
  835. void rcu_system_clock_source_config(uint32_t ck_sys);
  836. /* get the system clock source */
  837. uint32_t rcu_system_clock_source_get(void);
  838. /* configure the AHB prescaler selection */
  839. void rcu_ahb_clock_config(uint32_t ck_ahb);
  840. /* configure the APB1 prescaler selection */
  841. void rcu_apb1_clock_config(uint32_t ck_apb1);
  842. /* configure the APB2 prescaler selection */
  843. void rcu_apb2_clock_config(uint32_t ck_apb2);
  844. /* configure the ADC clock source and prescaler selection */
  845. void rcu_adc_clock_config(rcu_adc_clock_enum ck_adc);
  846. #ifdef GD32F130_150
  847. /* configure the USBD prescaler selection */
  848. void rcu_usbd_clock_config(uint32_t ck_usbd);
  849. /* configure the CK_OUT clock source and divider */
  850. void rcu_ckout_config(uint32_t ckout_src, uint32_t ckout_div);
  851. #elif defined (GD32F170_190)
  852. /* configure the CK_OUT0 clock source and divider */
  853. void rcu_ckout0_config(uint32_t ckout0_src, uint32_t ckout0_div);
  854. /* configure the CK_OUT1 clock source and divider */
  855. void rcu_ckout1_config(uint32_t ckout1_src, uint32_t ckout1_div);
  856. #endif /* GD32F130_150 */
  857. /* configure the PLL clock source selection and PLL multiply factor */
  858. void rcu_pll_config(uint32_t pll_src, uint32_t pll_mul);
  859. /* configure the USART clock source selection */
  860. void rcu_usart_clock_config(uint32_t ck_usart);
  861. /* configure the CEC clock source selection */
  862. void rcu_cec_clock_config(uint32_t ck_cec);
  863. /* configure the RTC clock source selection */
  864. void rcu_rtc_clock_config(uint32_t rtc_clock_source);
  865. #ifdef GD32F170_190
  866. void rcu_slcd_clock_config(uint32_t slcd_clock_source);
  867. #endif /* GD32F170_190 */
  868. /* configure the HXTAL divider used as input of PLL */
  869. void rcu_hxtal_prediv_config(uint32_t hxtal_prediv);
  870. /* configure the LXTAL drive capability */
  871. void rcu_lxtal_drive_capability_config(uint32_t lxtal_dricap);
  872. /* flag and interrupt functions */
  873. /* get the clock stabilization and periphral reset flags */
  874. FlagStatus rcu_flag_get(rcu_flag_enum flag);
  875. /* clear the reset flag */
  876. void rcu_all_reset_flag_clear(void);
  877. /* get the clock stabilization interrupt and ckm flags */
  878. FlagStatus rcu_interrupt_flag_get(rcu_int_flag_enum int_flag);
  879. /* clear the interrupt flags */
  880. void rcu_interrupt_flag_clear(rcu_int_flag_clear_enum int_flag_clear);
  881. /* enable the stabilization interrupt */
  882. void rcu_interrupt_enable(rcu_int_enum stab_int);
  883. /* disable the stabilization interrupt */
  884. void rcu_interrupt_disable(rcu_int_enum stab_int);
  885. /* oscillator configuration functions */
  886. /* wait until oscillator stabilization flags is SET or oscillator startup is timeout */
  887. ErrStatus rcu_osci_stab_wait(rcu_osci_type_enum osci);
  888. /* turn on the oscillator */
  889. void rcu_osci_on(rcu_osci_type_enum osci);
  890. /* turn off the oscillator */
  891. void rcu_osci_off(rcu_osci_type_enum osci);
  892. /* enable the oscillator bypass mode, HXTALEN or LXTALEN must be reset before it */
  893. void rcu_osci_bypass_mode_enable(rcu_osci_type_enum osci);
  894. /* disable the oscillator bypass mode, HXTALEN or LXTALEN must be reset before it */
  895. void rcu_osci_bypass_mode_disable(rcu_osci_type_enum osci);
  896. /* enable the HXTAL clock monitor */
  897. void rcu_hxtal_clock_monitor_enable(void);
  898. /* disable the HXTAL clock monitor */
  899. void rcu_hxtal_clock_monitor_disable(void);
  900. /* set the IRC8M adjust value */
  901. void rcu_irc8m_adjust_value_set(uint8_t irc8m_adjval);
  902. #ifdef GD32F130_150
  903. /* set the IRC14M adjust value */
  904. void rcu_irc14m_adjust_value_set(uint8_t irc14m_adjval);
  905. #elif defined (GD32F170_190)
  906. /* set the IRC28M adjust value */
  907. void rcu_irc28m_adjust_value_set(uint8_t irc28m_adjval);
  908. #endif /* GD32F130_150 */
  909. /* unlock the voltage key */
  910. void rcu_voltage_key_unlock(void);
  911. /* set the deep sleep mode voltage */
  912. void rcu_deepsleep_voltage_set(uint32_t dsvol);
  913. #ifdef GD32F130_150
  914. /* set the power down voltage */
  915. void rcu_power_down_voltage_set(uint32_t pdvol);
  916. #endif /* GD32F130_150 */
  917. /* get the system clock, bus and peripheral clock frequency */
  918. uint32_t rcu_clock_freq_get(rcu_clock_freq_enum clock);
  919. #endif /* GD32F1X0_RCU_H */