gd32f10x_rcu.h 78 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019
  1. /*!
  2. \file gd32f10x_rcu.h
  3. \brief definitions for the RCU
  4. */
  5. /*
  6. Copyright (C) 2017 GigaDevice
  7. 2017-02-10, V1.0.1, firmware for GD32F30x
  8. 2021-01-02, firmware for GD32F10x
  9. */
  10. #ifndef GD32F10X_RCU_H
  11. #define GD32F10X_RCU_H
  12. #include "gd32f10x.h"
  13. /* RCU definitions */
  14. #define RCU RCU_BASE
  15. /* registers definitions */
  16. #if (defined(GD32F10X_HD) || defined(GD32F10X_XD))
  17. #define RCU_CTL REG32(RCU + 0x00U) /*!< control register */
  18. #define RCU_CFG0 REG32(RCU + 0x04U) /*!< clock configuration register 0 */
  19. #define RCU_INT REG32(RCU + 0x08U) /*!< clock interrupt register */
  20. #define RCU_APB2RST REG32(RCU + 0x0CU) /*!< APB2 reset register */
  21. #define RCU_APB1RST REG32(RCU + 0x10U) /*!< APB1 reset register */
  22. #define RCU_AHBEN REG32(RCU + 0x14U) /*!< AHB enable register */
  23. #define RCU_APB2EN REG32(RCU + 0x18U) /*!< APB2 enable register */
  24. #define RCU_APB1EN REG32(RCU + 0x1CU) /*!< APB1 enable register */
  25. #define RCU_BDCTL REG32(RCU + 0x20U) /*!< backup domain control register */
  26. #define RCU_RSTSCK REG32(RCU + 0x24U) /*!< reset source / clock register */
  27. #define RCU_CFG1 REG32(RCU + 0x2CU) /*!< clock configuration register 1 */
  28. #define RCU_DSV REG32(RCU + 0x34U) /*!< deep-sleep mode voltage register */
  29. #define RCU_ADDCTL REG32(RCU + 0xC0U) /*!< Additional clock control register */
  30. #define RCU_ADDINT REG32(RCU + 0xCCU) /*!< Additional clock interrupt register */
  31. #define RCU_ADDAPB1RST REG32(RCU + 0xE0U) /*!< APB1 additional reset register */
  32. #define RCU_ADDAPB1EN REG32(RCU + 0xE4U) /*!< APB1 additional enable register */
  33. #elif defined(GD32F10X_CL)
  34. #define RCU_CTL REG32(RCU + 0x00U) /*!< control register */
  35. #define RCU_CFG0 REG32(RCU + 0x04U) /*!< clock configuration register 0 */
  36. #define RCU_INT REG32(RCU + 0x08U) /*!< clock interrupt register */
  37. #define RCU_APB2RST REG32(RCU + 0x0CU) /*!< APB2 reset register */
  38. #define RCU_APB1RST REG32(RCU + 0x10U) /*!< APB1 reset register */
  39. #define RCU_AHBEN REG32(RCU + 0x14U) /*!< AHB1 enable register */
  40. #define RCU_APB2EN REG32(RCU + 0x18U) /*!< APB2 enable register */
  41. #define RCU_APB1EN REG32(RCU + 0x1CU) /*!< APB1 enable register */
  42. #define RCU_BDCTL REG32(RCU + 0x20U) /*!< backup domain control register */
  43. #define RCU_RSTSCK REG32(RCU + 0x24U) /*!< reset source / clock register */
  44. #define RCU_AHBRST REG32(RCU + 0x28U) /*!< AHB reset register */
  45. #define RCU_CFG1 REG32(RCU + 0x2CU) /*!< clock configuration register 1 */
  46. #define RCU_DSV REG32(RCU + 0x34U) /*!< deep-sleep mode voltage register */
  47. #define RCU_ADDCTL REG32(RCU + 0xC0U) /*!< Additional clock control register */
  48. #define RCU_ADDINT REG32(RCU + 0xCCU) /*!< Additional clock interrupt register */
  49. #define RCU_ADDAPB1RST REG32(RCU + 0xE0U) /*!< APB1 additional reset register */
  50. #define RCU_ADDAPB1EN REG32(RCU + 0xE4U) /*!< APB1 additional enable register */
  51. #endif /* GD32F10X_HD and GD32F10X_XD */
  52. /* bits definitions */
  53. /* RCU_CTL */
  54. #if (defined(GD32F10X_HD) || defined(GD32F10X_XD))
  55. #define RCU_CTL_IRC8MEN BIT(0) /*!< internal high speed oscillator enable */
  56. #define RCU_CTL_IRC8MSTB BIT(1) /*!< IRC8M high speed internal oscillator stabilization flag */
  57. #define RCU_CTL_IRC8MADJ BITS(3,7) /*!< high speed internal oscillator clock trim adjust value */
  58. #define RCU_CTL_IRC8MCALIB BITS(8,15) /*!< high speed internal oscillator calibration value register */
  59. #define RCU_CTL_HXTALEN BIT(16) /*!< external high speed oscillator enable */
  60. #define RCU_CTL_HXTALSTB BIT(17) /*!< external crystal oscillator clock stabilization flag */
  61. #define RCU_CTL_HXTALBPS BIT(18) /*!< external crystal oscillator clock bypass mode enable */
  62. #define RCU_CTL_CKMEN BIT(19) /*!< HXTAL clock monitor enable */
  63. #define RCU_CTL_PLLEN BIT(24) /*!< PLL enable */
  64. #define RCU_CTL_PLLSTB BIT(25) /*!< PLL clock stabilization flag */
  65. #elif defined(GD32F10X_CL)
  66. #define RCU_CTL_IRC8MEN BIT(0) /*!< internal high speed oscillator enable */
  67. #define RCU_CTL_IRC8MSTB BIT(1) /*!< IRC8M high speed internal oscillator stabilization flag */
  68. #define RCU_CTL_IRC8MADJ BITS(3,7) /*!< high speed internal oscillator clock trim adjust value */
  69. #define RCU_CTL_IRC8MCALIB BITS(8,15) /*!< high speed internal oscillator calibration value register */
  70. #define RCU_CTL_HXTALEN BIT(16) /*!< external high speed oscillator enable */
  71. #define RCU_CTL_HXTALSTB BIT(17) /*!< external crystal oscillator clock stabilization flag */
  72. #define RCU_CTL_HXTALBPS BIT(18) /*!< external crystal oscillator clock bypass mode enable */
  73. #define RCU_CTL_CKMEN BIT(19) /*!< HXTAL clock monitor enable */
  74. #define RCU_CTL_PLLEN BIT(24) /*!< PLL enable */
  75. #define RCU_CTL_PLLSTB BIT(25) /*!< PLL clock stabilization flag */
  76. #define RCU_CTL_PLL1EN BIT(26) /*!< PLL1 enable */
  77. #define RCU_CTL_PLL1STB BIT(27) /*!< PLL1 clock stabilization flag */
  78. #define RCU_CTL_PLL2EN BIT(28) /*!< PLL2 enable */
  79. #define RCU_CTL_PLL2STB BIT(29) /*!< PLL2 clock stabilization flag */
  80. #endif /* GD32F10X_HD and GD32F10X_XD */
  81. /* RCU_CFG0 */
  82. #if (defined(GD32F10X_HD) || defined(GD32F10X_XD))
  83. #define RCU_CFG0_SCS BITS(0,1) /*!< system clock switch */
  84. #define RCU_CFG0_SCSS BITS(2,3) /*!< system clock switch status */
  85. #define RCU_CFG0_AHBPSC BITS(4,7) /*!< AHB prescaler selection */
  86. #define RCU_CFG0_APB1PSC BITS(8,10) /*!< APB1 prescaler selection */
  87. #define RCU_CFG0_APB2PSC BITS(11,13) /*!< APB2 prescaler selection */
  88. #define RCU_CFG0_ADCPSC BITS(14,15) /*!< ADC prescaler selection */
  89. #define RCU_CFG0_PLLSEL BIT(16) /*!< PLL clock source selection */
  90. #define RCU_CFG0_PREDV0 BIT(17) /*!< PREDV0 division factor */
  91. #define RCU_CFG0_PLLMF BITS(18,21) /*!< PLL clock multiplication factor */
  92. #define RCU_CFG0_USBDPSC BITS(22,23) /*!< USBD clock prescaler selection */
  93. #define RCU_CFG0_CKOUT0SEL BITS(24,26) /*!< CKOUT0 clock source selection */
  94. #define RCU_CFG0_PLLMF_4 BIT(27) /*!< bit 4 of PLLMF */
  95. #define RCU_CFG0_ADCPSC_2 BIT(28) /*!< bit 2 of ADCPSC */
  96. #define RCU_CFG0_PLLMF_5 BIT(30) /*!< bit 5 of PLLMF */
  97. #define RCU_CFG0_USBDPSC_2 BIT(31) /*!< bit 2 of USBDPSC */
  98. #elif defined(GD32F10X_CL)
  99. #define RCU_CFG0_SCS BITS(0,1) /*!< system clock switch */
  100. #define RCU_CFG0_SCSS BITS(2,3) /*!< system clock switch status */
  101. #define RCU_CFG0_AHBPSC BITS(4,7) /*!< AHB prescaler selection */
  102. #define RCU_CFG0_APB1PSC BITS(8,10) /*!< APB1 prescaler selection */
  103. #define RCU_CFG0_APB2PSC BITS(11,13) /*!< APB2 prescaler selection */
  104. #define RCU_CFG0_ADCPSC BITS(14,15) /*!< ADC prescaler selection */
  105. #define RCU_CFG0_PLLSEL BIT(16) /*!< PLL clock source selection */
  106. #define RCU_CFG0_PREDV0_LSB BIT(17) /*!< the LSB of PREDV0 division factor */
  107. #define RCU_CFG0_PLLMF BITS(18,21) /*!< PLL clock multiplication factor */
  108. #define RCU_CFG0_USBFSPSC BITS(22,23) /*!< USBFS clock prescaler selection */
  109. #define RCU_CFG0_CKOUT0SEL BITS(24,27) /*!< CKOUT0 clock source selection */
  110. #define RCU_CFG0_ADCPSC_2 BIT(28) /*!< bit 2 of ADCPSC */
  111. #define RCU_CFG0_PLLMF_4 BIT(29) /*!< bit 4 of PLLMF */
  112. #define RCU_CFG0_PLLMF_5 BIT(30) /*!< bit 5 of PLLMF */
  113. #define RCU_CFG0_USBFSPSC_2 BIT(31) /*!< bit 2 of USBFSPSC */
  114. #endif /* GD32F10X_HD and GD32F10X_XD */
  115. /* RCU_INT */
  116. #if (defined(GD32F10X_HD) || defined(GD32F10X_XD))
  117. #define RCU_INT_IRC40KSTBIF BIT(0) /*!< IRC40K stabilization interrupt flag */
  118. #define RCU_INT_LXTALSTBIF BIT(1) /*!< LXTAL stabilization interrupt flag */
  119. #define RCU_INT_IRC8MSTBIF BIT(2) /*!< IRC8M stabilization interrupt flag */
  120. #define RCU_INT_HXTALSTBIF BIT(3) /*!< HXTAL stabilization interrupt flag */
  121. #define RCU_INT_PLLSTBIF BIT(4) /*!< PLL stabilization interrupt flag */
  122. #define RCU_INT_CKMIF BIT(7) /*!< HXTAL clock stuck interrupt flag */
  123. #define RCU_INT_IRC40KSTBIE BIT(8) /*!< IRC40K stabilization interrupt enable */
  124. #define RCU_INT_LXTALSTBIE BIT(9) /*!< LXTAL stabilization interrupt enable */
  125. #define RCU_INT_IRC8MSTBIE BIT(10) /*!< IRC8M stabilization interrupt enable */
  126. #define RCU_INT_HXTALSTBIE BIT(11) /*!< HXTAL stabilization interrupt enable */
  127. #define RCU_INT_PLLSTBIE BIT(12) /*!< PLL stabilization interrupt enable */
  128. #define RCU_INT_IRC40KSTBIC BIT(16) /*!< IRC40K Stabilization interrupt clear */
  129. #define RCU_INT_LXTALSTBIC BIT(17) /*!< LXTAL Stabilization interrupt clear */
  130. #define RCU_INT_IRC8MSTBIC BIT(18) /*!< IRC8M Stabilization interrupt clear */
  131. #define RCU_INT_HXTALSTBIC BIT(19) /*!< HXTAL Stabilization interrupt clear */
  132. #define RCU_INT_PLLSTBIC BIT(20) /*!< PLL stabilization interrupt clear */
  133. #define RCU_INT_CKMIC BIT(23) /*!< HXTAL clock stuck interrupt clear */
  134. #elif defined(GD32F10X_CL)
  135. #define RCU_INT_IRC40KSTBIF BIT(0) /*!< IRC40K stabilization interrupt flag */
  136. #define RCU_INT_LXTALSTBIF BIT(1) /*!< LXTAL stabilization interrupt flag */
  137. #define RCU_INT_IRC8MSTBIF BIT(2) /*!< IRC8M stabilization interrupt flag */
  138. #define RCU_INT_HXTALSTBIF BIT(3) /*!< HXTAL stabilization interrupt flag */
  139. #define RCU_INT_PLLSTBIF BIT(4) /*!< PLL stabilization interrupt flag */
  140. #define RCU_INT_PLL1STBIF BIT(5) /*!< PLL1 stabilization interrupt flag */
  141. #define RCU_INT_PLL2STBIF BIT(6) /*!< PLL2 stabilization interrupt flag */
  142. #define RCU_INT_CKMIF BIT(7) /*!< HXTAL clock stuck interrupt flag */
  143. #define RCU_INT_IRC40KSTBIE BIT(8) /*!< IRC40K stabilization interrupt enable */
  144. #define RCU_INT_LXTALSTBIE BIT(9) /*!< LXTAL stabilization interrupt enable */
  145. #define RCU_INT_IRC8MSTBIE BIT(10) /*!< IRC8M stabilization interrupt enable */
  146. #define RCU_INT_HXTALSTBIE BIT(11) /*!< HXTAL stabilization interrupt enable */
  147. #define RCU_INT_PLLSTBIE BIT(12) /*!< PLL stabilization interrupt enable */
  148. #define RCU_INT_PLL1STBIE BIT(13) /*!< PLL1 stabilization interrupt enable */
  149. #define RCU_INT_PLL2STBIE BIT(14) /*!< PLL2 stabilization interrupt enable */
  150. #define RCU_INT_IRC40KSTBIC BIT(16) /*!< IRC40K stabilization interrupt clear */
  151. #define RCU_INT_LXTALSTBIC BIT(17) /*!< LXTAL stabilization interrupt clear */
  152. #define RCU_INT_IRC8MSTBIC BIT(18) /*!< IRC8M stabilization interrupt clear */
  153. #define RCU_INT_HXTALSTBIC BIT(19) /*!< HXTAL stabilization interrupt clear */
  154. #define RCU_INT_PLLSTBIC BIT(20) /*!< PLL stabilization interrupt clear */
  155. #define RCU_INT_PLL1STBIC BIT(21) /*!< PLL1 stabilization interrupt clear */
  156. #define RCU_INT_PLL2STBIC BIT(22) /*!< PLL2 stabilization interrupt clear */
  157. #define RCU_INT_CKMIC BIT(23) /*!< HXTAL clock stuck interrupt clear */
  158. #endif /* GD32F10X_HD and GD32F10X_XD */
  159. /* RCU_APB2RST */
  160. #define RCU_APB2RST_AFRST BIT(0) /*!< alternate function I/O reset */
  161. #define RCU_APB2RST_PARST BIT(2) /*!< GPIO port A reset */
  162. #define RCU_APB2RST_PBRST BIT(3) /*!< GPIO port B reset */
  163. #define RCU_APB2RST_PCRST BIT(4) /*!< GPIO port C reset */
  164. #define RCU_APB2RST_PDRST BIT(5) /*!< GPIO port D reset */
  165. #define RCU_APB2RST_PERST BIT(6) /*!< GPIO port E reset */
  166. #define RCU_APB2RST_PFRST BIT(7) /*!< GPIO port F reset */
  167. #define RCU_APB2RST_PGRST BIT(8) /*!< GPIO port G reset */
  168. #define RCU_APB2RST_ADC0RST BIT(9) /*!< ADC0 reset */
  169. #define RCU_APB2RST_ADC1RST BIT(10) /*!< ADC1 reset */
  170. #define RCU_APB2RST_TIMER0RST BIT(11) /*!< TIMER0 reset */
  171. #define RCU_APB2RST_SPI0RST BIT(12) /*!< SPI0 reset */
  172. #define RCU_APB2RST_TIMER7RST BIT(13) /*!< TIMER7 reset */
  173. #define RCU_APB2RST_USART0RST BIT(14) /*!< USART0 reset */
  174. #ifndef GD32F10X_CL
  175. #define RCU_APB2RST_ADC2RST BIT(15) /*!< ADC2 reset */
  176. #endif /* GD32F10X_CL */
  177. #ifndef GD32F10X_HD
  178. #define RCU_APB2RST_TIMER8RST BIT(19) /*!< TIMER8 reset */
  179. #define RCU_APB2RST_TIMER9RST BIT(20) /*!< TIMER9 reset */
  180. #define RCU_APB2RST_TIMER10RST BIT(21) /*!< TIMER10 reset */
  181. #endif /* GD32F10X_HD */
  182. /* RCU_APB1RST */
  183. #define RCU_APB1RST_TIMER1RST BIT(0) /*!< TIMER1 reset */
  184. #define RCU_APB1RST_TIMER2RST BIT(1) /*!< TIMER2 reset */
  185. #define RCU_APB1RST_TIMER3RST BIT(2) /*!< TIMER3 reset */
  186. #define RCU_APB1RST_TIMER4RST BIT(3) /*!< TIMER4 reset */
  187. #define RCU_APB1RST_TIMER5RST BIT(4) /*!< TIMER5 reset */
  188. #define RCU_APB1RST_TIMER6RST BIT(5) /*!< TIMER6 reset */
  189. #ifndef GD32F10X_HD
  190. #define RCU_APB1RST_TIMER11RST BIT(6) /*!< TIMER11 reset */
  191. #define RCU_APB1RST_TIMER12RST BIT(7) /*!< TIMER12 reset */
  192. #define RCU_APB1RST_TIMER13RST BIT(8) /*!< TIMER13 reset */
  193. #endif /* GD32F10X_HD */
  194. #define RCU_APB1RST_WWDGTRST BIT(11) /*!< WWDGT reset */
  195. #define RCU_APB1RST_SPI1RST BIT(14) /*!< SPI1 reset */
  196. #define RCU_APB1RST_SPI2RST BIT(15) /*!< SPI2 reset */
  197. #define RCU_APB1RST_USART1RST BIT(17) /*!< USART1 reset */
  198. #define RCU_APB1RST_USART2RST BIT(18) /*!< USART2 reset */
  199. #define RCU_APB1RST_UART3RST BIT(19) /*!< UART3 reset */
  200. #define RCU_APB1RST_UART4RST BIT(20) /*!< UART4 reset */
  201. #define RCU_APB1RST_I2C0RST BIT(21) /*!< I2C0 reset */
  202. #define RCU_APB1RST_I2C1RST BIT(22) /*!< I2C1 reset */
  203. #if (defined(GD32F10X_HD) || defined(GD32F10X_XD))
  204. #define RCU_APB1RST_USBDRST BIT(23) /*!< USBD reset */
  205. #endif /* GD32F10X_HD and GD32F10X_XD */
  206. #define RCU_APB1RST_CAN0RST BIT(25) /*!< CAN0 reset */
  207. #ifdef GD32F10X_CL
  208. #define RCU_APB1RST_CAN1RST BIT(26) /*!< CAN1 reset */
  209. #endif /* GD32F10X_CL */
  210. #define RCU_APB1RST_BKPIRST BIT(27) /*!< backup interface reset */
  211. #define RCU_APB1RST_PMURST BIT(28) /*!< PMU reset */
  212. #define RCU_APB1RST_DACRST BIT(29) /*!< DAC reset */
  213. /* RCU_AHBEN */
  214. #define RCU_AHBEN_DMA0EN BIT(0) /*!< DMA0 clock enable */
  215. #define RCU_AHBEN_DMA1EN BIT(1) /*!< DMA1 clock enable */
  216. #define RCU_AHBEN_SRAMSPEN BIT(2) /*!< SRAM clock enable when sleep mode */
  217. #define RCU_AHBEN_FMCSPEN BIT(4) /*!< FMC clock enable when sleep mode */
  218. #define RCU_AHBEN_CRCEN BIT(6) /*!< CRC clock enable */
  219. #define RCU_AHBEN_EXMCEN BIT(8) /*!< EXMC clock enable */
  220. #if (defined(GD32F10X_HD) || defined(GD32F10X_XD))
  221. #define RCU_AHBEN_SDIOEN BIT(10) /*!< SDIO clock enable */
  222. #elif defined(GD32F10X_CL)
  223. #define RCU_AHBEN_USBFSEN BIT(12) /*!< USBFS clock enable */
  224. #define RCU_AHBEN_ENETEN BIT(14) /*!< ENET clock enable */
  225. #define RCU_AHBEN_ENETTXEN BIT(15) /*!< Ethernet TX clock enable */
  226. #define RCU_AHBEN_ENETRXEN BIT(16) /*!< Ethernet RX clock enable */
  227. #endif /* GD32F10X_HD and GD32F10X_XD */
  228. /* RCU_APB2EN */
  229. #define RCU_APB2EN_AFEN BIT(0) /*!< alternate function IO clock enable */
  230. #define RCU_APB2EN_PAEN BIT(2) /*!< GPIO port A clock enable */
  231. #define RCU_APB2EN_PBEN BIT(3) /*!< GPIO port B clock enable */
  232. #define RCU_APB2EN_PCEN BIT(4) /*!< GPIO port C clock enable */
  233. #define RCU_APB2EN_PDEN BIT(5) /*!< GPIO port D clock enable */
  234. #define RCU_APB2EN_PEEN BIT(6) /*!< GPIO port E clock enable */
  235. #define RCU_APB2EN_PFEN BIT(7) /*!< GPIO port F clock enable */
  236. #define RCU_APB2EN_PGEN BIT(8) /*!< GPIO port G clock enable */
  237. #define RCU_APB2EN_ADC0EN BIT(9) /*!< ADC0 clock enable */
  238. #define RCU_APB2EN_ADC1EN BIT(10) /*!< ADC1 clock enable */
  239. #define RCU_APB2EN_TIMER0EN BIT(11) /*!< TIMER0 clock enable */
  240. #define RCU_APB2EN_SPI0EN BIT(12) /*!< SPI0 clock enable */
  241. #define RCU_APB2EN_TIMER7EN BIT(13) /*!< TIMER7 clock enable */
  242. #define RCU_APB2EN_USART0EN BIT(14) /*!< USART0 clock enable */
  243. #ifndef GD32F10X_CL
  244. #define RCU_APB2EN_ADC2EN BIT(15) /*!< ADC2 clock enable */
  245. #endif /* GD32F10X_CL */
  246. #ifndef GD32F10X_HD
  247. #define RCU_APB2EN_TIMER8EN BIT(19) /*!< TIMER8 clock enable */
  248. #define RCU_APB2EN_TIMER9EN BIT(20) /*!< TIMER9 clock enable */
  249. #define RCU_APB2EN_TIMER10EN BIT(21) /*!< TIMER10 clock enable */
  250. #endif /* GD32F10X_HD */
  251. /* RCU_APB1EN */
  252. #define RCU_APB1EN_TIMER1EN BIT(0) /*!< TIMER1 clock enable */
  253. #define RCU_APB1EN_TIMER2EN BIT(1) /*!< TIMER2 clock enable */
  254. #define RCU_APB1EN_TIMER3EN BIT(2) /*!< TIMER3 clock enable */
  255. #define RCU_APB1EN_TIMER4EN BIT(3) /*!< TIMER4 clock enable */
  256. #define RCU_APB1EN_TIMER5EN BIT(4) /*!< TIMER5 clock enable */
  257. #define RCU_APB1EN_TIMER6EN BIT(5) /*!< TIMER6 clock enable */
  258. #ifndef GD32F10X_HD
  259. #define RCU_APB1EN_TIMER11EN BIT(6) /*!< TIMER11 clock enable */
  260. #define RCU_APB1EN_TIMER12EN BIT(7) /*!< TIMER12 clock enable */
  261. #define RCU_APB1EN_TIMER13EN BIT(8) /*!< TIMER13 clock enable */
  262. #endif /* GD32F10X_HD */
  263. #define RCU_APB1EN_WWDGTEN BIT(11) /*!< WWDGT clock enable */
  264. #define RCU_APB1EN_SPI1EN BIT(14) /*!< SPI1 clock enable */
  265. #define RCU_APB1EN_SPI2EN BIT(15) /*!< SPI2 clock enable */
  266. #define RCU_APB1EN_USART1EN BIT(17) /*!< USART1 clock enable */
  267. #define RCU_APB1EN_USART2EN BIT(18) /*!< USART2 clock enable */
  268. #define RCU_APB1EN_UART3EN BIT(19) /*!< UART3 clock enable */
  269. #define RCU_APB1EN_UART4EN BIT(20) /*!< UART4 clock enable */
  270. #define RCU_APB1EN_I2C0EN BIT(21) /*!< I2C0 clock enable */
  271. #define RCU_APB1EN_I2C1EN BIT(22) /*!< I2C1 clock enable */
  272. #if (defined(GD32F10X_HD) || defined(GD32F10X_XD))
  273. #define RCU_APB1EN_USBDEN BIT(23) /*!< USBD clock enable */
  274. #endif /* GD32F10X_HD and GD32F10X_XD */
  275. #define RCU_APB1EN_CAN0EN BIT(25) /*!< CAN0 clock enable */
  276. #ifdef GD32F10X_CL
  277. #define RCU_APB1EN_CAN1EN BIT(26) /*!< CAN1 clock enable */
  278. #endif /* GD32F10X_CL */
  279. #define RCU_APB1EN_BKPIEN BIT(27) /*!< backup interface clock enable */
  280. #define RCU_APB1EN_PMUEN BIT(28) /*!< PMU clock enable */
  281. #define RCU_APB1EN_DACEN BIT(29) /*!< DAC clock enable */
  282. /* RCU_BDCTL */
  283. #define RCU_BDCTL_LXTALEN BIT(0) /*!< LXTAL enable */
  284. #define RCU_BDCTL_LXTALSTB BIT(1) /*!< low speed crystal oscillator stabilization flag */
  285. #define RCU_BDCTL_LXTALBPS BIT(2) /*!< LXTAL bypass mode enable */
  286. #define RCU_BDCTL_LXTALDRI BITS(3,4) /*!< LXTAL drive capability */
  287. #define RCU_BDCTL_RTCSRC BITS(8,9) /*!< RTC clock entry selection */
  288. #define RCU_BDCTL_RTCEN BIT(15) /*!< RTC clock enable */
  289. #define RCU_BDCTL_BKPRST BIT(16) /*!< backup domain reset */
  290. /* RCU_RSTSCK */
  291. #define RCU_RSTSCK_IRC40KEN BIT(0) /*!< IRC40K enable */
  292. #define RCU_RSTSCK_IRC40KSTB BIT(1) /*!< IRC40K stabilization flag */
  293. #define RCU_RSTSCK_RSTFC BIT(24) /*!< reset flag clear */
  294. #define RCU_RSTSCK_EPRSTF BIT(26) /*!< external pin reset flag */
  295. #define RCU_RSTSCK_PORRSTF BIT(27) /*!< power reset flag */
  296. #define RCU_RSTSCK_SWRSTF BIT(28) /*!< software reset flag */
  297. #define RCU_RSTSCK_FWDGTRSTF BIT(29) /*!< free watchdog timer reset flag */
  298. #define RCU_RSTSCK_WWDGTRSTF BIT(30) /*!< window watchdog timer reset flag */
  299. #define RCU_RSTSCK_LPRSTF BIT(31) /*!< low-power reset flag */
  300. #ifdef GD32F10X_CL
  301. /* RCU_AHBRST */
  302. #define RCU_AHBRST_USBFSRST BIT(12) /*!< USBFS reset */
  303. #define RCU_AHBRST_ENETRST BIT(14) /*!< ENET reset */
  304. #endif /* GD32F10X_CL */
  305. /* RCU_CFG1 */
  306. #if (defined(GD32F10X_HD) || defined(GD32F10X_XD))
  307. #define RCU_CFG1_ADCPSC_3 BIT(29) /*!< bit 4 of ADCPSC */
  308. #define RCU_CFG1_PLLPRESEL BIT(30) /*!< PLL clock source selection */
  309. #elif defined(GD32F10X_CL)
  310. #define RCU_CFG1_PREDV0 BITS(0,3) /*!< PREDV0 division factor */
  311. #define RCU_CFG1_PREDV1 BITS(4,7) /*!< PREDV1 division factor */
  312. #define RCU_CFG1_PLL1MF BITS(8,11) /*!< PLL1 clock multiplication factor */
  313. #define RCU_CFG1_PLL2MF BITS(12,15) /*!< PLL2 clock multiplication factor */
  314. #define RCU_CFG1_PREDV0SEL BIT(16) /*!< PREDV0 input clock source selection */
  315. #define RCU_CFG1_I2S1SEL BIT(17) /*!< I2S1 clock source selection */
  316. #define RCU_CFG1_I2S2SEL BIT(18) /*!< I2S2 clock source selection */
  317. #define RCU_CFG1_ADCPSC_3 BIT(29) /*!< bit 4 of ADCPSC */
  318. #define RCU_CFG1_PLLPRESEL BIT(30) /*!< PLL clock source selection */
  319. #define RCU_CFG1_PLL2MF_4 BIT(31) /*!< bit 5 of PLL2MF */
  320. #endif /* GD32F10X_HD and GD32F10X_XD */
  321. /* RCU_DSV */
  322. #define RCU_DSV_DSLPVS BITS(0,2) /*!< deep-sleep mode voltage select */
  323. /* RCU_ADDCTL */
  324. #define RCU_ADDCTL_CK48MSEL BIT(0) /*!< 48MHz clock selection */
  325. #define RCU_ADDCTL_IRC48MEN BIT(16) /*!< internal 48MHz RC oscillator enable */
  326. #define RCU_ADDCTL_IRC48MSTB BIT(17) /*!< internal 48MHz RC oscillator clock stabilization flag */
  327. #define RCU_ADDCTL_IRC48MCAL BITS(24,31) /*!< internal 48MHz RC oscillator calibration value register */
  328. /* RCU_ADDINT */
  329. #define RCU_ADDINT_IRC48MSTBIF BIT(6) /*!< IRC48M stabilization interrupt flag */
  330. #define RCU_ADDINT_IRC48MSTBIE BIT(14) /*!< internal 48 MHz RC oscillator stabilization interrupt enable */
  331. #define RCU_ADDINT_IRC48MSTBIC BIT(22) /*!< internal 48 MHz RC oscillator stabilization interrupt clear */
  332. /* RCU_ADDAPB1RST */
  333. #define RCU_ADDAPB1RST_CTCRST BIT(27) /*!< CTC reset */
  334. /* RCU_ADDAPB1EN */
  335. #define RCU_ADDAPB1EN_CTCEN BIT(27) /*!< CTC clock enable */
  336. /* constants definitions */
  337. /* define the peripheral clock enable bit position and its register index offset */
  338. #define RCU_REGIDX_BIT(regidx, bitpos) (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos))
  339. #define RCU_REG_VAL(periph) (REG32(RCU + ((uint32_t)(periph) >> 6)))
  340. #define RCU_BIT_POS(val) ((uint32_t)(val) & 0x1FU)
  341. /* register offset */
  342. /* peripherals enable */
  343. #define AHBEN_REG_OFFSET 0x14U /*!< AHB enable register offset */
  344. #define APB1EN_REG_OFFSET 0x1CU /*!< APB1 enable register offset */
  345. #define APB2EN_REG_OFFSET 0x18U /*!< APB2 enable register offset */
  346. #define ADD_APB1EN_REG_OFFSET 0xE4U /*!< APB1 additional enable register offset */
  347. /* peripherals reset */
  348. #define AHBRST_REG_OFFSET 0x28U /*!< AHB reset register offset */
  349. #define APB1RST_REG_OFFSET 0x10U /*!< APB1 reset register offset */
  350. #define APB2RST_REG_OFFSET 0x0CU /*!< APB2 reset register offset */
  351. #define ADD_APB1RST_REG_OFFSET 0xE0U /*!< APB1 additional reset register offset */
  352. #define RSTSCK_REG_OFFSET 0x24U /*!< reset source/clock register offset */
  353. /* clock control */
  354. #define CTL_REG_OFFSET 0x00U /*!< control register offset */
  355. #define BDCTL_REG_OFFSET 0x20U /*!< backup domain control register offset */
  356. #define ADDCTL_REG_OFFSET 0xC0U /*!< additional clock control register offset */
  357. /* clock stabilization and stuck interrupt */
  358. #define INT_REG_OFFSET 0x08U /*!< clock interrupt register offset */
  359. #define ADDINT_REG_OFFSET 0xCCU /*!< additional clock interrupt register offset */
  360. /* configuration register */
  361. #define CFG0_REG_OFFSET 0x04U /*!< clock configuration register 0 offset */
  362. #define CFG1_REG_OFFSET 0x2CU /*!< clock configuration register 1 offset */
  363. /* peripheral clock enable */
  364. typedef enum {
  365. /* AHB peripherals */
  366. RCU_DMA0 = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 0U), /*!< DMA0 clock */
  367. RCU_DMA1 = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 1U), /*!< DMA1 clock */
  368. RCU_CRC = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 6U), /*!< CRC clock */
  369. RCU_EXMC = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 8U), /*!< EXMC clock */
  370. #if (defined(GD32F10X_HD) || defined(GD32F10X_XD))
  371. RCU_SDIO = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 10U), /*!< SDIO clock */
  372. #elif defined(GD32F10X_CL)
  373. RCU_USBFS = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 12U), /*!< USBFS clock */
  374. RCU_ENET = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 14U), /*!< ENET clock */
  375. RCU_ENETTX = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 15U), /*!< ENETTX clock */
  376. RCU_ENETRX = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 16U), /*!< ENETRX clock */
  377. #endif /* GD32F10X_HD and GD32F10X_XD */
  378. /* APB1 peripherals */
  379. RCU_TIMER1 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 0U), /*!< TIMER1 clock */
  380. RCU_TIMER2 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 1U), /*!< TIMER2 clock */
  381. RCU_TIMER3 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 2U), /*!< TIMER3 clock */
  382. RCU_TIMER4 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 3U), /*!< TIMER4 clock */
  383. RCU_TIMER5 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 4U), /*!< TIMER5 clock */
  384. RCU_TIMER6 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 5U), /*!< TIMER6 clock */
  385. #ifndef GD32F10X_HD
  386. RCU_TIMER11 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 6U), /*!< TIMER11 clock */
  387. RCU_TIMER12 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 7U), /*!< TIMER12 clock */
  388. RCU_TIMER13 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 8U), /*!< TIMER13 clock */
  389. #endif /* GD32F10X_HD */
  390. RCU_WWDGT = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 11U), /*!< WWDGT clock */
  391. RCU_SPI1 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 14U), /*!< SPI1 clock */
  392. RCU_SPI2 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 15U), /*!< SPI2 clock */
  393. RCU_USART1 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 17U), /*!< USART1 clock */
  394. RCU_USART2 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 18U), /*!< USART2 clock */
  395. RCU_UART3 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 19U), /*!< UART3 clock */
  396. RCU_UART4 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 20U), /*!< UART4 clock */
  397. RCU_I2C0 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 21U), /*!< I2C0 clock */
  398. RCU_I2C1 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 22U), /*!< I2C1 clock */
  399. #if (defined(GD32F10X_HD) || defined(GD32F10X_XD))
  400. RCU_USBD = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 23U), /*!< USBD clock */
  401. #endif /* GD32F10X_HD and GD32F10X_XD */
  402. RCU_CAN0 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 25U), /*!< CAN0 clock */
  403. #ifdef GD32F10X_CL
  404. RCU_CAN1 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 26U), /*!< CAN1 clock */
  405. #endif /* GD32F10X_CL */
  406. RCU_BKPI = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 27U), /*!< BKPI clock */
  407. RCU_PMU = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 28U), /*!< PMU clock */
  408. RCU_DAC = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 29U), /*!< DAC clock */
  409. RCU_RTC = RCU_REGIDX_BIT(BDCTL_REG_OFFSET, 15U), /*!< RTC clock */
  410. RCU_CTC = RCU_REGIDX_BIT(ADD_APB1EN_REG_OFFSET, 27U), /*!< CTC clock */
  411. /* APB2 peripherals */
  412. RCU_AF = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 0U), /*!< alternate function clock */
  413. RCU_GPIOA = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 2U), /*!< GPIOA clock */
  414. RCU_GPIOB = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 3U), /*!< GPIOB clock */
  415. RCU_GPIOC = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 4U), /*!< GPIOC clock */
  416. RCU_GPIOD = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 5U), /*!< GPIOD clock */
  417. RCU_GPIOE = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 6U), /*!< GPIOE clock */
  418. RCU_GPIOF = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 7U), /*!< GPIOF clock */
  419. RCU_GPIOG = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 8U), /*!< GPIOG clock */
  420. RCU_ADC0 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 9U), /*!< ADC0 clock */
  421. RCU_ADC1 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 10U), /*!< ADC1 clock */
  422. RCU_TIMER0 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 11U), /*!< TIMER0 clock */
  423. RCU_SPI0 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 12U), /*!< SPI0 clock */
  424. RCU_TIMER7 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 13U), /*!< TIMER7 clock */
  425. RCU_USART0 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 14U), /*!< USART0 clock */
  426. #ifndef GD32F10X_CL
  427. RCU_ADC2 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 15U), /*!< ADC2 clock */
  428. #endif /* GD32F10X_CL */
  429. #ifndef GD32F10X_HD
  430. RCU_TIMER8 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 19U), /*!< TIMER8 clock */
  431. RCU_TIMER9 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 20U), /*!< TIMER9 clock */
  432. RCU_TIMER10 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 21U), /*!< TIMER10 clock */
  433. #endif /* GD32F10X_HD */
  434. } rcu_periph_enum;
  435. /* peripheral clock enable when sleep mode*/
  436. typedef enum {
  437. /* AHB peripherals */
  438. RCU_SRAM_SLP = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 2U), /*!< SRAM clock */
  439. RCU_FMC_SLP = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 4U), /*!< FMC clock */
  440. } rcu_periph_sleep_enum;
  441. /* peripherals reset */
  442. typedef enum {
  443. /* AHB peripherals */
  444. #ifdef GD32F10X_CL
  445. RCU_USBFSRST = RCU_REGIDX_BIT(AHBRST_REG_OFFSET, 12U), /*!< USBFS clock reset */
  446. RCU_ENETRST = RCU_REGIDX_BIT(AHBRST_REG_OFFSET, 14U), /*!< ENET clock reset */
  447. #endif /* GD32F10X_CL */
  448. /* APB1 peripherals */
  449. RCU_TIMER1RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 0U), /*!< TIMER1 clock reset */
  450. RCU_TIMER2RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 1U), /*!< TIMER2 clock reset */
  451. RCU_TIMER3RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 2U), /*!< TIMER3 clock reset */
  452. RCU_TIMER4RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 3U), /*!< TIMER4 clock reset */
  453. RCU_TIMER5RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 4U), /*!< TIMER5 clock reset */
  454. RCU_TIMER6RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 5U), /*!< TIMER6 clock reset */
  455. #ifndef GD32F10X_HD
  456. RCU_TIMER11RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 6U), /*!< TIMER11 clock reset */
  457. RCU_TIMER12RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 7U), /*!< TIMER12 clock reset */
  458. RCU_TIMER13RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 8U), /*!< TIMER13 clock reset */
  459. #endif /* GD32F10X_HD */
  460. RCU_WWDGTRST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 11U), /*!< WWDGT clock reset */
  461. RCU_SPI1RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 14U), /*!< SPI1 clock reset */
  462. RCU_SPI2RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 15U), /*!< SPI2 clock reset */
  463. RCU_USART1RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 17U), /*!< USART1 clock reset */
  464. RCU_USART2RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 18U), /*!< USART2 clock reset */
  465. RCU_UART3RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 19U), /*!< UART3 clock reset */
  466. RCU_UART4RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 20U), /*!< UART4 clock reset */
  467. RCU_I2C0RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 21U), /*!< I2C0 clock reset */
  468. RCU_I2C1RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 22U), /*!< I2C1 clock reset */
  469. #if (defined(GD32F10X_HD) || defined(GD32F10X_XD))
  470. RCU_USBDRST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 23U), /*!< USBD clock reset */
  471. #endif /* GD32F10X_HD and GD32F10X_XD */
  472. RCU_CAN0RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 25U), /*!< CAN0 clock reset */
  473. #ifdef GD32F10X_CL
  474. RCU_CAN1RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 26U), /*!< CAN1 clock reset */
  475. #endif /* GD32F10X_CL */
  476. RCU_BKPIRST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 27U), /*!< BKPI clock reset */
  477. RCU_PMURST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 28U), /*!< PMU clock reset */
  478. RCU_DACRST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 29U), /*!< DAC clock reset */
  479. RCU_CTCRST = RCU_REGIDX_BIT(ADD_APB1RST_REG_OFFSET, 27U), /*!< RTC clock reset */
  480. /* APB2 peripherals */
  481. RCU_AFRST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 0U), /*!< alternate function clock reset */
  482. RCU_GPIOARST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 2U), /*!< GPIOA clock reset */
  483. RCU_GPIOBRST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 3U), /*!< GPIOB clock reset */
  484. RCU_GPIOCRST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 4U), /*!< GPIOC clock reset */
  485. RCU_GPIODRST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 5U), /*!< GPIOD clock reset */
  486. RCU_GPIOERST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 6U), /*!< GPIOE clock reset */
  487. RCU_GPIOFRST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 7U), /*!< GPIOF clock reset */
  488. RCU_GPIOGRST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 8U), /*!< GPIOG clock reset */
  489. RCU_ADC0RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 9U), /*!< ADC0 clock reset */
  490. RCU_ADC1RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 10U), /*!< ADC1 clock reset */
  491. RCU_TIMER0RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 11U), /*!< TIMER0 clock reset */
  492. RCU_SPI0RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 12U), /*!< SPI0 clock reset */
  493. RCU_TIMER7RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 13U), /*!< TIMER7 clock reset */
  494. RCU_USART0RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 14U), /*!< USART0 clock reset */
  495. #ifndef GD32F10X_CL
  496. RCU_ADC2RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 15U), /*!< ADC2 clock reset */
  497. #endif /* GD32F10X_CL */
  498. #ifndef GD32F10X_HD
  499. RCU_TIMER8RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 19U), /*!< TIMER8 clock reset */
  500. RCU_TIMER9RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 20U), /*!< TIMER9 clock reset */
  501. RCU_TIMER10RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 21U), /*!< TIMER10 clock reset */
  502. #endif /* GD32F10X_HD */
  503. } rcu_periph_reset_enum;
  504. /* clock stabilization and peripheral reset flags */
  505. typedef enum {
  506. /* clock stabilization flags */
  507. RCU_FLAG_IRC8MSTB = RCU_REGIDX_BIT(CTL_REG_OFFSET, 1U), /*!< IRC8M stabilization flags */
  508. RCU_FLAG_HXTALSTB = RCU_REGIDX_BIT(CTL_REG_OFFSET, 17U), /*!< HXTAL stabilization flags */
  509. RCU_FLAG_PLLSTB = RCU_REGIDX_BIT(CTL_REG_OFFSET, 25U), /*!< PLL stabilization flags */
  510. #ifdef GD32F10X_CL
  511. RCU_FLAG_PLL1STB = RCU_REGIDX_BIT(CTL_REG_OFFSET, 27U), /*!< PLL1 stabilization flags */
  512. RCU_FLAG_PLL2STB = RCU_REGIDX_BIT(CTL_REG_OFFSET, 29U), /*!< PLL2 stabilization flags */
  513. #endif /* GD32F10X_CL */
  514. RCU_FLAG_LXTALSTB = RCU_REGIDX_BIT(BDCTL_REG_OFFSET, 1U), /*!< LXTAL stabilization flags */
  515. RCU_FLAG_IRC40KSTB = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 1U), /*!< IRC40K stabilization flags */
  516. RCU_FLAG_IRC48MSTB = RCU_REGIDX_BIT(ADDCTL_REG_OFFSET, 17U), /*!< IRC48M stabilization flags */
  517. /* reset source flags */
  518. RCU_FLAG_EPRST = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 26U), /*!< external PIN reset flags */
  519. RCU_FLAG_PORRST = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 27U), /*!< power reset flags */
  520. RCU_FLAG_SWRST = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 28U), /*!< software reset flags */
  521. RCU_FLAG_FWDGTRST = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 29U), /*!< FWDGT reset flags */
  522. RCU_FLAG_WWDGTRST = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 30U), /*!< WWDGT reset flags */
  523. RCU_FLAG_LPRST = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 31U), /*!< low-power reset flags */
  524. } rcu_flag_enum;
  525. /* clock stabilization and ckm interrupt flags */
  526. typedef enum {
  527. RCU_INT_FLAG_IRC40KSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 0U), /*!< IRC40K stabilization interrupt flag */
  528. RCU_INT_FLAG_LXTALSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 1U), /*!< LXTAL stabilization interrupt flag */
  529. RCU_INT_FLAG_IRC8MSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 2U), /*!< IRC8M stabilization interrupt flag */
  530. RCU_INT_FLAG_HXTALSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 3U), /*!< HXTAL stabilization interrupt flag */
  531. RCU_INT_FLAG_PLLSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 4U), /*!< PLL stabilization interrupt flag */
  532. #ifdef GD32F10X_CL
  533. RCU_INT_FLAG_PLL1STB = RCU_REGIDX_BIT(INT_REG_OFFSET, 5U), /*!< PLL1 stabilization interrupt flag */
  534. RCU_INT_FLAG_PLL2STB = RCU_REGIDX_BIT(INT_REG_OFFSET, 6U), /*!< PLL2 stabilization interrupt flag */
  535. #endif /* GD32F10X_CL */
  536. RCU_INT_FLAG_CKM = RCU_REGIDX_BIT(INT_REG_OFFSET, 7U), /*!< HXTAL clock stuck interrupt flag */
  537. RCU_INT_FLAG_IRC48MSTB = RCU_REGIDX_BIT(ADDINT_REG_OFFSET, 6U), /*!< IRC48M stabilization interrupt flag */
  538. } rcu_int_flag_enum;
  539. /* clock stabilization and stuck interrupt flags clear */
  540. typedef enum {
  541. RCU_INT_FLAG_IRC40KSTB_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 16U), /*!< IRC40K stabilization interrupt flags clear */
  542. RCU_INT_FLAG_LXTALSTB_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 17U), /*!< LXTAL stabilization interrupt flags clear */
  543. RCU_INT_FLAG_IRC8MSTB_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 18U), /*!< IRC8M stabilization interrupt flags clear */
  544. RCU_INT_FLAG_HXTALSTB_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 19U), /*!< HXTAL stabilization interrupt flags clear */
  545. RCU_INT_FLAG_PLLSTB_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 20U), /*!< PLL stabilization interrupt flags clear */
  546. #ifdef GD32F10X_CL
  547. RCU_INT_FLAG_PLL1STB_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 21U), /*!< PLL1 stabilization interrupt flags clear */
  548. RCU_INT_FLAG_PLL2STB_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 22U), /*!< PLL2 stabilization interrupt flags clear */
  549. #endif /* GD32F10X_CL */
  550. RCU_INT_FLAG_CKM_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 23U), /*!< CKM interrupt flags clear */
  551. RCU_INT_FLAG_IRC48MSTB_CLR = RCU_REGIDX_BIT(ADDINT_REG_OFFSET, 22U), /*!< internal 48 MHz RC oscillator stabilization interrupt clear */
  552. } rcu_int_flag_clear_enum;
  553. /* clock stabilization interrupt enable or disable */
  554. typedef enum {
  555. RCU_INT_IRC40KSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 8U), /*!< IRC40K stabilization interrupt */
  556. RCU_INT_LXTALSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 9U), /*!< LXTAL stabilization interrupt */
  557. RCU_INT_IRC8MSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 10U), /*!< IRC8M stabilization interrupt */
  558. RCU_INT_HXTALSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 11U), /*!< HXTAL stabilization interrupt */
  559. RCU_INT_PLLSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 12U), /*!< PLL stabilization interrupt */
  560. #ifdef GD32F10X_CL
  561. RCU_INT_PLL1STB = RCU_REGIDX_BIT(INT_REG_OFFSET, 13U), /*!< PLL1 stabilization interrupt */
  562. RCU_INT_PLL2STB = RCU_REGIDX_BIT(INT_REG_OFFSET, 14U), /*!< PLL2 stabilization interrupt */
  563. #endif /* GD32F10X_CL */
  564. RCU_INT_IRC48MSTB = RCU_REGIDX_BIT(ADDINT_REG_OFFSET, 14U), /*!< internal 48 MHz RC oscillator stabilization interrupt */
  565. } rcu_int_enum;
  566. /* oscillator types */
  567. typedef enum {
  568. RCU_HXTAL = RCU_REGIDX_BIT(CTL_REG_OFFSET, 16U), /*!< HXTAL */
  569. RCU_LXTAL = RCU_REGIDX_BIT(BDCTL_REG_OFFSET, 0U), /*!< LXTAL */
  570. RCU_IRC8M = RCU_REGIDX_BIT(CTL_REG_OFFSET, 0U), /*!< IRC8M */
  571. RCU_IRC48M = RCU_REGIDX_BIT(ADDCTL_REG_OFFSET, 16U), /*!< IRC48M */
  572. RCU_IRC40K = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 0U), /*!< IRC40K */
  573. RCU_PLL_CK = RCU_REGIDX_BIT(CTL_REG_OFFSET, 24U), /*!< PLL */
  574. #ifdef GD32F10X_CL
  575. RCU_PLL1_CK = RCU_REGIDX_BIT(CTL_REG_OFFSET, 26U), /*!< PLL1 */
  576. RCU_PLL2_CK = RCU_REGIDX_BIT(CTL_REG_OFFSET, 28U), /*!< PLL2 */
  577. #endif /* GD32F10X_CL */
  578. } rcu_osci_type_enum;
  579. /* rcu clock frequency */
  580. typedef enum {
  581. CK_SYS = 0, /*!< system clock */
  582. CK_AHB, /*!< AHB clock */
  583. CK_APB1, /*!< APB1 clock */
  584. CK_APB2, /*!< APB2 clock */
  585. } rcu_clock_freq_enum;
  586. /* RCU_CFG0 register bit define */
  587. /* system clock source select */
  588. #define CFG0_SCS(regval) (BITS(0,1) & ((uint32_t)(regval) << 0))
  589. #define RCU_CKSYSSRC_IRC8M CFG0_SCS(0) /*!< system clock source select IRC8M */
  590. #define RCU_CKSYSSRC_HXTAL CFG0_SCS(1) /*!< system clock source select HXTAL */
  591. #define RCU_CKSYSSRC_PLL CFG0_SCS(2) /*!< system clock source select PLL */
  592. /* system clock source select status */
  593. #define CFG0_SCSS(regval) (BITS(2,3) & ((uint32_t)(regval) << 2))
  594. #define RCU_SCSS_IRC8M CFG0_SCSS(0) /*!< system clock source select IRC8M */
  595. #define RCU_SCSS_HXTAL CFG0_SCSS(1) /*!< system clock source select HXTAL */
  596. #define RCU_SCSS_PLL CFG0_SCSS(2) /*!< system clock source select PLLP */
  597. /* AHB prescaler selection */
  598. #define CFG0_AHBPSC(regval) (BITS(4,7) & ((uint32_t)(regval) << 4))
  599. #define RCU_AHB_CKSYS_DIV1 CFG0_AHBPSC(0) /*!< AHB prescaler select CK_SYS */
  600. #define RCU_AHB_CKSYS_DIV2 CFG0_AHBPSC(8) /*!< AHB prescaler select CK_SYS/2 */
  601. #define RCU_AHB_CKSYS_DIV4 CFG0_AHBPSC(9) /*!< AHB prescaler select CK_SYS/4 */
  602. #define RCU_AHB_CKSYS_DIV8 CFG0_AHBPSC(10) /*!< AHB prescaler select CK_SYS/8 */
  603. #define RCU_AHB_CKSYS_DIV16 CFG0_AHBPSC(11) /*!< AHB prescaler select CK_SYS/16 */
  604. #define RCU_AHB_CKSYS_DIV64 CFG0_AHBPSC(12) /*!< AHB prescaler select CK_SYS/64 */
  605. #define RCU_AHB_CKSYS_DIV128 CFG0_AHBPSC(13) /*!< AHB prescaler select CK_SYS/128 */
  606. #define RCU_AHB_CKSYS_DIV256 CFG0_AHBPSC(14) /*!< AHB prescaler select CK_SYS/256 */
  607. #define RCU_AHB_CKSYS_DIV512 CFG0_AHBPSC(15) /*!< AHB prescaler select CK_SYS/512 */
  608. /* APB1 prescaler selection */
  609. #define CFG0_APB1PSC(regval) (BITS(8,10) & ((uint32_t)(regval) << 8))
  610. #define RCU_APB1_CKAHB_DIV1 CFG0_APB1PSC(0) /*!< APB1 prescaler select CK_AHB */
  611. #define RCU_APB1_CKAHB_DIV2 CFG0_APB1PSC(4) /*!< APB1 prescaler select CK_AHB/2 */
  612. #define RCU_APB1_CKAHB_DIV4 CFG0_APB1PSC(5) /*!< APB1 prescaler select CK_AHB/4 */
  613. #define RCU_APB1_CKAHB_DIV8 CFG0_APB1PSC(6) /*!< APB1 prescaler select CK_AHB/8 */
  614. #define RCU_APB1_CKAHB_DIV16 CFG0_APB1PSC(7) /*!< APB1 prescaler select CK_AHB/16 */
  615. /* APB2 prescaler selection */
  616. #define CFG0_APB2PSC(regval) (BITS(11,13) & ((uint32_t)(regval) << 11))
  617. #define RCU_APB2_CKAHB_DIV1 CFG0_APB2PSC(0) /*!< APB2 prescaler select CK_AHB */
  618. #define RCU_APB2_CKAHB_DIV2 CFG0_APB2PSC(4) /*!< APB2 prescaler select CK_AHB/2 */
  619. #define RCU_APB2_CKAHB_DIV4 CFG0_APB2PSC(5) /*!< APB2 prescaler select CK_AHB/4 */
  620. #define RCU_APB2_CKAHB_DIV8 CFG0_APB2PSC(6) /*!< APB2 prescaler select CK_AHB/8 */
  621. #define RCU_APB2_CKAHB_DIV16 CFG0_APB2PSC(7) /*!< APB2 prescaler select CK_AHB/16 */
  622. /* ADC prescaler select */
  623. #define RCU_CKADC_CKAPB2_DIV2 ((uint32_t)0x00000000U) /*!< ADC prescaler select CK_APB2/2 */
  624. #define RCU_CKADC_CKAPB2_DIV4 ((uint32_t)0x00000001U) /*!< ADC prescaler select CK_APB2/4 */
  625. #define RCU_CKADC_CKAPB2_DIV6 ((uint32_t)0x00000002U) /*!< ADC prescaler select CK_APB2/6 */
  626. #define RCU_CKADC_CKAPB2_DIV8 ((uint32_t)0x00000003U) /*!< ADC prescaler select CK_APB2/8 */
  627. #define RCU_CKADC_CKAPB2_DIV12 ((uint32_t)0x00000005U) /*!< ADC prescaler select CK_APB2/12 */
  628. #define RCU_CKADC_CKAPB2_DIV16 ((uint32_t)0x00000007U) /*!< ADC prescaler select CK_APB2/16 */
  629. #define RCU_CKADC_CKAHB_DIV5 ((uint32_t)0x00000008U) /*!< ADC prescaler select CK_AHB/5 */
  630. #define RCU_CKADC_CKAHB_DIV6 ((uint32_t)0x00000009U) /*!< ADC prescaler select CK_AHB/6 */
  631. #define RCU_CKADC_CKAHB_DIV10 ((uint32_t)0x0000000AU) /*!< ADC prescaler select CK_AHB/10 */
  632. #define RCU_CKADC_CKAHB_DIV20 ((uint32_t)0x0000000BU) /*!< ADC prescaler select CK_AHB/20 */
  633. /* PLL clock source selection */
  634. #define RCU_PLLSRC_IRC8M_DIV2 ((uint32_t)0x00000000U) /*!< IRC8M/2 clock selected as source clock of PLL */
  635. #define RCU_PLLSRC_HXTAL_IRC48M RCU_CFG0_PLLSEL /*!< HXTAL or IRC48M selected as source clock of PLL */
  636. /* PLL clock multiplication factor */
  637. #define PLLMF_4 RCU_CFG0_PLLMF_4 /* bit 4 of PLLMF */
  638. #define PLLMF_5 RCU_CFG0_PLLMF_5 /* bit 5 of PLLMF */
  639. #define PLLMF_4_5 (PLLMF_4 | PLLMF_5) /* bit 4 and 5 of PLLMF */
  640. #define CFG0_PLLMF(regval) (BITS(18,21) & ((uint32_t)(regval) << 18))
  641. #define RCU_PLL_MUL2 CFG0_PLLMF(0) /*!< PLL source clock multiply by 2 */
  642. #define RCU_PLL_MUL3 CFG0_PLLMF(1) /*!< PLL source clock multiply by 3 */
  643. #define RCU_PLL_MUL4 CFG0_PLLMF(2) /*!< PLL source clock multiply by 4 */
  644. #define RCU_PLL_MUL5 CFG0_PLLMF(3) /*!< PLL source clock multiply by 5 */
  645. #define RCU_PLL_MUL6 CFG0_PLLMF(4) /*!< PLL source clock multiply by 6 */
  646. #define RCU_PLL_MUL7 CFG0_PLLMF(5) /*!< PLL source clock multiply by 7 */
  647. #define RCU_PLL_MUL8 CFG0_PLLMF(6) /*!< PLL source clock multiply by 8 */
  648. #define RCU_PLL_MUL9 CFG0_PLLMF(7) /*!< PLL source clock multiply by 9 */
  649. #define RCU_PLL_MUL10 CFG0_PLLMF(8) /*!< PLL source clock multiply by 10 */
  650. #define RCU_PLL_MUL11 CFG0_PLLMF(9) /*!< PLL source clock multiply by 11 */
  651. #define RCU_PLL_MUL12 CFG0_PLLMF(10) /*!< PLL source clock multiply by 12 */
  652. #define RCU_PLL_MUL13 CFG0_PLLMF(11) /*!< PLL source clock multiply by 13 */
  653. #define RCU_PLL_MUL14 CFG0_PLLMF(12) /*!< PLL source clock multiply by 14 */
  654. #if(defined(GD32F10X_HD) || defined(GD32F10X_XD))
  655. #define RCU_PLL_MUL15 CFG0_PLLMF(13) /*!< PLL source clock multiply by 15 */
  656. #elif defined(GD32F10X_CL)
  657. #define RCU_PLL_MUL6_5 CFG0_PLLMF(13) /*!< PLL source clock multiply by 6.5 */
  658. #endif /* GD32F10X_HD and GD32F10X_XD */
  659. #define RCU_PLL_MUL16 CFG0_PLLMF(14) /*!< PLL source clock multiply by 16 */
  660. #define RCU_PLL_MUL17 (PLLMF_4 | CFG0_PLLMF(0)) /*!< PLL source clock multiply by 17 */
  661. #define RCU_PLL_MUL18 (PLLMF_4 | CFG0_PLLMF(1)) /*!< PLL source clock multiply by 18 */
  662. #define RCU_PLL_MUL19 (PLLMF_4 | CFG0_PLLMF(2)) /*!< PLL source clock multiply by 19 */
  663. #define RCU_PLL_MUL20 (PLLMF_4 | CFG0_PLLMF(3)) /*!< PLL source clock multiply by 20 */
  664. #define RCU_PLL_MUL21 (PLLMF_4 | CFG0_PLLMF(4)) /*!< PLL source clock multiply by 21 */
  665. #define RCU_PLL_MUL22 (PLLMF_4 | CFG0_PLLMF(5)) /*!< PLL source clock multiply by 22 */
  666. #define RCU_PLL_MUL23 (PLLMF_4 | CFG0_PLLMF(6)) /*!< PLL source clock multiply by 23 */
  667. #define RCU_PLL_MUL24 (PLLMF_4 | CFG0_PLLMF(7)) /*!< PLL source clock multiply by 24 */
  668. #define RCU_PLL_MUL25 (PLLMF_4 | CFG0_PLLMF(8)) /*!< PLL source clock multiply by 25 */
  669. #define RCU_PLL_MUL26 (PLLMF_4 | CFG0_PLLMF(9)) /*!< PLL source clock multiply by 26 */
  670. #define RCU_PLL_MUL27 (PLLMF_4 | CFG0_PLLMF(10)) /*!< PLL source clock multiply by 27 */
  671. #define RCU_PLL_MUL28 (PLLMF_4 | CFG0_PLLMF(11)) /*!< PLL source clock multiply by 28 */
  672. #define RCU_PLL_MUL29 (PLLMF_4 | CFG0_PLLMF(12)) /*!< PLL source clock multiply by 29 */
  673. #define RCU_PLL_MUL30 (PLLMF_4 | CFG0_PLLMF(13)) /*!< PLL source clock multiply by 30 */
  674. #define RCU_PLL_MUL31 (PLLMF_4 | CFG0_PLLMF(14)) /*!< PLL source clock multiply by 31 */
  675. #define RCU_PLL_MUL32 (PLLMF_4 | CFG0_PLLMF(15)) /*!< PLL source clock multiply by 32 */
  676. #define RCU_PLL_MUL33 (PLLMF_5 | CFG0_PLLMF(0)) /*!< PLL source clock multiply by 33 */
  677. #define RCU_PLL_MUL34 (PLLMF_5 | CFG0_PLLMF(1)) /*!< PLL source clock multiply by 34 */
  678. #define RCU_PLL_MUL35 (PLLMF_5 | CFG0_PLLMF(2)) /*!< PLL source clock multiply by 35 */
  679. #define RCU_PLL_MUL36 (PLLMF_5 | CFG0_PLLMF(3)) /*!< PLL source clock multiply by 36 */
  680. #define RCU_PLL_MUL37 (PLLMF_5 | CFG0_PLLMF(4)) /*!< PLL source clock multiply by 37 */
  681. #define RCU_PLL_MUL38 (PLLMF_5 | CFG0_PLLMF(5)) /*!< PLL source clock multiply by 38 */
  682. #define RCU_PLL_MUL39 (PLLMF_5 | CFG0_PLLMF(6)) /*!< PLL source clock multiply by 39 */
  683. #define RCU_PLL_MUL40 (PLLMF_5 | CFG0_PLLMF(7)) /*!< PLL source clock multiply by 40 */
  684. #define RCU_PLL_MUL41 (PLLMF_5 | CFG0_PLLMF(8)) /*!< PLL source clock multiply by 41 */
  685. #define RCU_PLL_MUL42 (PLLMF_5 | CFG0_PLLMF(9)) /*!< PLL source clock multiply by 42 */
  686. #define RCU_PLL_MUL43 (PLLMF_5 | CFG0_PLLMF(10)) /*!< PLL source clock multiply by 43 */
  687. #define RCU_PLL_MUL44 (PLLMF_5 | CFG0_PLLMF(11)) /*!< PLL source clock multiply by 44 */
  688. #define RCU_PLL_MUL45 (PLLMF_5 | CFG0_PLLMF(12)) /*!< PLL source clock multiply by 45 */
  689. #define RCU_PLL_MUL46 (PLLMF_5 | CFG0_PLLMF(13)) /*!< PLL source clock multiply by 46 */
  690. #define RCU_PLL_MUL47 (PLLMF_5 | CFG0_PLLMF(14)) /*!< PLL source clock multiply by 47 */
  691. #define RCU_PLL_MUL48 (PLLMF_5 | CFG0_PLLMF(15)) /*!< PLL source clock multiply by 48 */
  692. #define RCU_PLL_MUL49 (PLLMF_4_5 | CFG0_PLLMF(0)) /*!< PLL source clock multiply by 49 */
  693. #define RCU_PLL_MUL50 (PLLMF_4_5 | CFG0_PLLMF(1)) /*!< PLL source clock multiply by 50 */
  694. #define RCU_PLL_MUL51 (PLLMF_4_5 | CFG0_PLLMF(2)) /*!< PLL source clock multiply by 51 */
  695. #define RCU_PLL_MUL52 (PLLMF_4_5 | CFG0_PLLMF(3)) /*!< PLL source clock multiply by 52 */
  696. #define RCU_PLL_MUL53 (PLLMF_4_5 | CFG0_PLLMF(4)) /*!< PLL source clock multiply by 53 */
  697. #define RCU_PLL_MUL54 (PLLMF_4_5 | CFG0_PLLMF(5)) /*!< PLL source clock multiply by 54 */
  698. #define RCU_PLL_MUL55 (PLLMF_4_5 | CFG0_PLLMF(6)) /*!< PLL source clock multiply by 55 */
  699. #define RCU_PLL_MUL56 (PLLMF_4_5 | CFG0_PLLMF(7)) /*!< PLL source clock multiply by 56 */
  700. #define RCU_PLL_MUL57 (PLLMF_4_5 | CFG0_PLLMF(8)) /*!< PLL source clock multiply by 57 */
  701. #define RCU_PLL_MUL58 (PLLMF_4_5 | CFG0_PLLMF(9)) /*!< PLL source clock multiply by 58 */
  702. #define RCU_PLL_MUL59 (PLLMF_4_5 | CFG0_PLLMF(10)) /*!< PLL source clock multiply by 59 */
  703. #define RCU_PLL_MUL60 (PLLMF_4_5 | CFG0_PLLMF(11)) /*!< PLL source clock multiply by 60 */
  704. #define RCU_PLL_MUL61 (PLLMF_4_5 | CFG0_PLLMF(12)) /*!< PLL source clock multiply by 61 */
  705. #define RCU_PLL_MUL62 (PLLMF_4_5 | CFG0_PLLMF(13)) /*!< PLL source clock multiply by 62 */
  706. #define RCU_PLL_MUL63 (PLLMF_4_5 | CFG0_PLLMF(14)) /*!< PLL source clock multiply by 63 */
  707. #if(defined(GD32F10X_HD) || defined(GD32F10X_XD))
  708. #define USBPSC_2 RCU_CFG0_USBDPSC_2
  709. #elif defined(GD32F10X_CL)
  710. #define USBPSC_2 RCU_CFG0_USBFSPSC_2
  711. #endif /* GD32F10X_HD and GD32F10X_XD */
  712. /* USBD/USBFS prescaler select */
  713. #define CFG0_USBPSC(regval) (BITS(22,23) & ((uint32_t)(regval) << 22))
  714. #define RCU_CKUSB_CKPLL_DIV1_5 CFG0_USBPSC(0) /*!< USBD/USBFS prescaler select CK_PLL/1.5 */
  715. #define RCU_CKUSB_CKPLL_DIV1 CFG0_USBPSC(1) /*!< USBD/USBFS prescaler select CK_PLL/1 */
  716. #define RCU_CKUSB_CKPLL_DIV2_5 CFG0_USBPSC(2) /*!< USBD/USBFS prescaler select CK_PLL/2.5 */
  717. #define RCU_CKUSB_CKPLL_DIV2 CFG0_USBPSC(3) /*!< USBD/USBFS prescaler select CK_PLL/2 */
  718. #define RCU_CKUSB_CKPLL_DIV3 (USBPSC_2 |CFG0_USBPSC(0)) /*!< USBD/USBFS prescaler select CK_PLL/3.5 */
  719. #define RCU_CKUSB_CKPLL_DIV3_5 (USBPSC_2 |CFG0_USBPSC(1)) /*!< USBD/USBFS prescaler select CK_PLL/3 */
  720. #define RCU_CKUSB_CKPLL_DIV4 (USBPSC_2 |CFG0_USBPSC(2)) /*!< USBD/USBFS prescaler select CK_PLL/4 */
  721. /* CKOUT0 Clock source selection */
  722. #define CFG0_CKOUT0SEL(regval) (BITS(24,27) & ((uint32_t)(regval) << 24))
  723. #define RCU_CKOUT0SRC_NONE CFG0_CKOUT0SEL(0) /*!< no clock selected */
  724. #define RCU_CKOUT0SRC_CKSYS CFG0_CKOUT0SEL(4) /*!< system clock selected */
  725. #define RCU_CKOUT0SRC_IRC8M CFG0_CKOUT0SEL(5) /*!< internal 8M RC oscillator clock selected */
  726. #define RCU_CKOUT0SRC_HXTAL CFG0_CKOUT0SEL(6) /*!< high speed crystal oscillator clock (HXTAL) selected */
  727. #define RCU_CKOUT0SRC_CKPLL_DIV2 CFG0_CKOUT0SEL(7) /*!< CK_PLL/2 clock selected */
  728. #ifdef GD32F10X_CL
  729. #define RCU_CKOUT0SRC_CKPLL1 CFG0_CKOUT0SEL(8) /*!< CK_PLL1 clock selected */
  730. #define RCU_CKOUT0SRC_CKPLL2_DIV2 CFG0_CKOUT0SEL(9) /*!< CK_PLL2/2 clock selected */
  731. #define RCU_CKOUT0SRC_EXT1 CFG0_CKOUT0SEL(10) /*!< EXT1 selected, to provide the external clock for ENET */
  732. #define RCU_CKOUT0SRC_CKPLL2 CFG0_CKOUT0SEL(11) /*!< CK_PLL2 clock selected */
  733. #endif /* GD32F10X_CL */
  734. /* LXTAL drive capability */
  735. #define BDCTL_LXTALDRI(regval) (BITS(3,4) & ((uint32_t)(regval) << 3))
  736. #define RCU_LXTAL_LOWDRI BDCTL_LXTALDRI(0) /*!< lower driving capability */
  737. #define RCU_LXTAL_MED_LOWDRI BDCTL_LXTALDRI(1) /*!< medium low driving capability */
  738. #define RCU_LXTAL_MED_HIGHDRI BDCTL_LXTALDRI(2) /*!< medium high driving capability */
  739. #define RCU_LXTAL_HIGHDRI BDCTL_LXTALDRI(3) /*!< higher driving capability */
  740. /* RTC clock entry selection */
  741. #define BDCTL_RTCSRC(regval) (BITS(8,9) & ((uint32_t)(regval) << 8))
  742. #define RCU_RTCSRC_NONE BDCTL_RTCSRC(0) /*!< no clock selected */
  743. #define RCU_RTCSRC_LXTAL BDCTL_RTCSRC(1) /*!< RTC source clock select LXTAL */
  744. #define RCU_RTCSRC_IRC40K BDCTL_RTCSRC(2) /*!< RTC source clock select IRC40K */
  745. #define RCU_RTCSRC_HXTAL_DIV_128 BDCTL_RTCSRC(3) /*!< RTC source clock select HXTAL/128 */
  746. /* PREDV0 division factor */
  747. #define CFG1_PREDV0(regval) (BITS(0,3) & ((uint32_t)(regval) << 0))
  748. #define RCU_PREDV0_DIV1 CFG1_PREDV0(0) /*!< PREDV0 input source clock not divided */
  749. #define RCU_PREDV0_DIV2 CFG1_PREDV0(1) /*!< PREDV0 input source clock divided by 2 */
  750. #define RCU_PREDV0_DIV3 CFG1_PREDV0(2) /*!< PREDV0 input source clock divided by 3 */
  751. #define RCU_PREDV0_DIV4 CFG1_PREDV0(3) /*!< PREDV0 input source clock divided by 4 */
  752. #define RCU_PREDV0_DIV5 CFG1_PREDV0(4) /*!< PREDV0 input source clock divided by 5 */
  753. #define RCU_PREDV0_DIV6 CFG1_PREDV0(5) /*!< PREDV0 input source clock divided by 6 */
  754. #define RCU_PREDV0_DIV7 CFG1_PREDV0(6) /*!< PREDV0 input source clock divided by 7 */
  755. #define RCU_PREDV0_DIV8 CFG1_PREDV0(7) /*!< PREDV0 input source clock divided by 8 */
  756. #define RCU_PREDV0_DIV9 CFG1_PREDV0(8) /*!< PREDV0 input source clock divided by 9 */
  757. #define RCU_PREDV0_DIV10 CFG1_PREDV0(9) /*!< PREDV0 input source clock divided by 10 */
  758. #define RCU_PREDV0_DIV11 CFG1_PREDV0(10) /*!< PREDV0 input source clock divided by 11 */
  759. #define RCU_PREDV0_DIV12 CFG1_PREDV0(11) /*!< PREDV0 input source clock divided by 12 */
  760. #define RCU_PREDV0_DIV13 CFG1_PREDV0(12) /*!< PREDV0 input source clock divided by 13 */
  761. #define RCU_PREDV0_DIV14 CFG1_PREDV0(13) /*!< PREDV0 input source clock divided by 14 */
  762. #define RCU_PREDV0_DIV15 CFG1_PREDV0(14) /*!< PREDV0 input source clock divided by 15 */
  763. #define RCU_PREDV0_DIV16 CFG1_PREDV0(15) /*!< PREDV0 input source clock divided by 16 */
  764. /* PREDV1 division factor */
  765. #define CFG1_PREDV1(regval) (BITS(4,7) & ((uint32_t)(regval) << 4))
  766. #define RCU_PREDV1_DIV1 CFG1_PREDV1(0) /*!< PREDV1 input source clock not divided */
  767. #define RCU_PREDV1_DIV2 CFG1_PREDV1(1) /*!< PREDV1 input source clock divided by 2 */
  768. #define RCU_PREDV1_DIV3 CFG1_PREDV1(2) /*!< PREDV1 input source clock divided by 3 */
  769. #define RCU_PREDV1_DIV4 CFG1_PREDV1(3) /*!< PREDV1 input source clock divided by 4 */
  770. #define RCU_PREDV1_DIV5 CFG1_PREDV1(4) /*!< PREDV1 input source clock divided by 5 */
  771. #define RCU_PREDV1_DIV6 CFG1_PREDV1(5) /*!< PREDV1 input source clock divided by 6 */
  772. #define RCU_PREDV1_DIV7 CFG1_PREDV1(6) /*!< PREDV1 input source clock divided by 7 */
  773. #define RCU_PREDV1_DIV8 CFG1_PREDV1(7) /*!< PREDV1 input source clock divided by 8 */
  774. #define RCU_PREDV1_DIV9 CFG1_PREDV1(8) /*!< PREDV1 input source clock divided by 9 */
  775. #define RCU_PREDV1_DIV10 CFG1_PREDV1(9) /*!< PREDV1 input source clock divided by 10 */
  776. #define RCU_PREDV1_DIV11 CFG1_PREDV1(10) /*!< PREDV1 input source clock divided by 11 */
  777. #define RCU_PREDV1_DIV12 CFG1_PREDV1(11) /*!< PREDV1 input source clock divided by 12 */
  778. #define RCU_PREDV1_DIV13 CFG1_PREDV1(12) /*!< PREDV1 input source clock divided by 13 */
  779. #define RCU_PREDV1_DIV14 CFG1_PREDV1(13) /*!< PREDV1 input source clock divided by 14 */
  780. #define RCU_PREDV1_DIV15 CFG1_PREDV1(14) /*!< PREDV1 input source clock divided by 15 */
  781. #define RCU_PREDV1_DIV16 CFG1_PREDV1(15) /*!< PREDV1 input source clock divided by 16 */
  782. /* PLL1 clock multiplication factor */
  783. #define CFG1_PLL1MF(regval) (BITS(8,11) & ((uint32_t)(regval) << 8))
  784. #define RCU_PLL1_MUL8 CFG1_PLL1MF(6) /*!< PLL1 source clock multiply by 8 */
  785. #define RCU_PLL1_MUL9 CFG1_PLL1MF(7) /*!< PLL1 source clock multiply by 9 */
  786. #define RCU_PLL1_MUL10 CFG1_PLL1MF(8) /*!< PLL1 source clock multiply by 10 */
  787. #define RCU_PLL1_MUL11 CFG1_PLL1MF(9) /*!< PLL1 source clock multiply by 11 */
  788. #define RCU_PLL1_MUL12 CFG1_PLL1MF(10) /*!< PLL1 source clock multiply by 12 */
  789. #define RCU_PLL1_MUL13 CFG1_PLL1MF(11) /*!< PLL1 source clock multiply by 13 */
  790. #define RCU_PLL1_MUL14 CFG1_PLL1MF(12) /*!< PLL1 source clock multiply by 14 */
  791. #define RCU_PLL1_MUL15 CFG1_PLL1MF(13) /*!< PLL1 source clock multiply by 15 */
  792. #define RCU_PLL1_MUL16 CFG1_PLL1MF(14) /*!< PLL1 source clock multiply by 16 */
  793. #define RCU_PLL1_MUL20 CFG1_PLL1MF(15) /*!< PLL1 source clock multiply by 20 */
  794. /* PLL2 clock multiplication factor */
  795. #define PLL2MF_4 RCU_CFG1_PLL2MF_4 /* bit 4 of PLL2MF */
  796. #define CFG1_PLL2MF(regval) (BITS(12,15) & ((uint32_t)(regval) << 12))
  797. #define RCU_PLL2_MUL8 CFG1_PLL2MF(6) /*!< PLL2 source clock multiply by 8 */
  798. #define RCU_PLL2_MUL9 CFG1_PLL2MF(7) /*!< PLL2 source clock multiply by 9 */
  799. #define RCU_PLL2_MUL10 CFG1_PLL2MF(8) /*!< PLL2 source clock multiply by 10 */
  800. #define RCU_PLL2_MUL11 CFG1_PLL2MF(9) /*!< PLL2 source clock multiply by 11 */
  801. #define RCU_PLL2_MUL12 CFG1_PLL2MF(10) /*!< PLL2 source clock multiply by 12 */
  802. #define RCU_PLL2_MUL13 CFG1_PLL2MF(11) /*!< PLL2 source clock multiply by 13 */
  803. #define RCU_PLL2_MUL14 CFG1_PLL2MF(12) /*!< PLL2 source clock multiply by 14 */
  804. #define RCU_PLL2_MUL15 CFG1_PLL2MF(13) /*!< PLL2 source clock multiply by 15 */
  805. #define RCU_PLL2_MUL16 CFG1_PLL2MF(14) /*!< PLL2 source clock multiply by 16 */
  806. #define RCU_PLL2_MUL20 CFG1_PLL2MF(15) /*!< PLL2 source clock multiply by 20 */
  807. #define RCU_PLL2_MUL18 (PLL2MF_4 | CFG1_PLL2MF(0)) /*!< PLL2 source clock multiply by 18 */
  808. #define RCU_PLL2_MUL19 (PLL2MF_4 | CFG1_PLL2MF(1)) /*!< PLL2 source clock multiply by 19 */
  809. #define RCU_PLL2_MUL21 (PLL2MF_4 | CFG1_PLL2MF(3)) /*!< PLL2 source clock multiply by 21 */
  810. #define RCU_PLL2_MUL22 (PLL2MF_4 | CFG1_PLL2MF(4)) /*!< PLL2 source clock multiply by 22 */
  811. #define RCU_PLL2_MUL23 (PLL2MF_4 | CFG1_PLL2MF(5)) /*!< PLL2 source clock multiply by 23 */
  812. #define RCU_PLL2_MUL24 (PLL2MF_4 | CFG1_PLL2MF(6)) /*!< PLL2 source clock multiply by 24 */
  813. #define RCU_PLL2_MUL25 (PLL2MF_4 | CFG1_PLL2MF(7)) /*!< PLL2 source clock multiply by 25 */
  814. #define RCU_PLL2_MUL26 (PLL2MF_4 | CFG1_PLL2MF(8)) /*!< PLL2 source clock multiply by 26 */
  815. #define RCU_PLL2_MUL27 (PLL2MF_4 | CFG1_PLL2MF(9)) /*!< PLL2 source clock multiply by 27 */
  816. #define RCU_PLL2_MUL28 (PLL2MF_4 | CFG1_PLL2MF(10)) /*!< PLL2 source clock multiply by 28 */
  817. #define RCU_PLL2_MUL29 (PLL2MF_4 | CFG1_PLL2MF(11)) /*!< PLL2 source clock multiply by 29 */
  818. #define RCU_PLL2_MUL30 (PLL2MF_4 | CFG1_PLL2MF(12)) /*!< PLL2 source clock multiply by 30 */
  819. #define RCU_PLL2_MUL31 (PLL2MF_4 | CFG1_PLL2MF(13)) /*!< PLL2 source clock multiply by 31 */
  820. #define RCU_PLL2_MUL32 (PLL2MF_4 | CFG1_PLL2MF(14)) /*!< PLL2 source clock multiply by 32 */
  821. #define RCU_PLL2_MUL40 (PLL2MF_4 | CFG1_PLL2MF(15)) /*!< PLL2 source clock multiply by 40 */
  822. #ifdef GD32F10X_CL
  823. /* PREDV0 input clock source selection */
  824. #define RCU_PREDV0SRC_HXTAL_IRC48M ((uint32_t)0x00000000U) /*!< HXTAL or IRC48M selected as PREDV0 input source clock */
  825. #define RCU_PREDV0SRC_CKPLL1 RCU_CFG1_PREDV0SEL /*!< CK_PLL1 selected as PREDV0 input source clock */
  826. /* I2S1 clock source selection */
  827. #define RCU_I2S1SRC_CKSYS ((uint32_t)0x00000000U) /*!< system clock selected as I2S1 source clock */
  828. #define RCU_I2S1SRC_CKPLL2_MUL2 RCU_CFG1_I2S1SEL /*!< (CK_PLL2 x 2) selected as I2S1 source clock */
  829. /* I2S2 clock source selection */
  830. #define RCU_I2S2SRC_CKSYS ((uint32_t)0x00000000U) /*!< system clock selected as I2S2 source clock */
  831. #define RCU_I2S2SRC_CKPLL2_MUL2 RCU_CFG1_I2S2SEL /*!< (CK_PLL2 x 2) selected as I2S2 source clock */
  832. #endif /* GD32F10X_CL */
  833. /* PLL input clock source selection */
  834. #define RCU_PLLPRESRC_HXTAL ((uint32_t)0x00000000U) /*!< HXTAL selected as PLL source clock */
  835. #define RCU_PLLPRESRC_IRC48M RCU_CFG1_PLLPRESEL /*!< CK_PLL selected as PREDV0 input source clock */
  836. /* deep-sleep mode voltage */
  837. #define DSV_DSLPVS(regval) (BITS(0,2) & ((uint32_t)(regval) << 0))
  838. #define RCU_DEEPSLEEP_V_1_0 DSV_DSLPVS(0) /*!< core voltage is 1.0V in deep-sleep mode */
  839. #define RCU_DEEPSLEEP_V_0_9 DSV_DSLPVS(1) /*!< core voltage is 0.9V in deep-sleep mode */
  840. #define RCU_DEEPSLEEP_V_0_8 DSV_DSLPVS(2) /*!< core voltage is 0.8V in deep-sleep mode */
  841. #define RCU_DEEPSLEEP_V_0_7 DSV_DSLPVS(3) /*!< core voltage is 0.7V in deep-sleep mode */
  842. /* 48MHz clock selection */
  843. #define RCU_CK48MSRC_CKPLL ((uint32_t)0x00000000U) /*!< use CK_PLL clock */
  844. #define RCU_CK48MSRC_IRC48M RCU_ADDCTL_CK48MSEL /*!< select IRC48M clock */
  845. /* function declarations */
  846. /* deinitialize the RCU */
  847. void rcu_deinit(void);
  848. /* enable the peripherals clock */
  849. void rcu_periph_clock_enable(rcu_periph_enum periph);
  850. /* disable the peripherals clock */
  851. void rcu_periph_clock_disable(rcu_periph_enum periph);
  852. /* enable the peripherals clock when sleep mode */
  853. void rcu_periph_clock_sleep_enable(rcu_periph_sleep_enum periph);
  854. /* disable the peripherals clock when sleep mode */
  855. void rcu_periph_clock_sleep_disable(rcu_periph_sleep_enum periph);
  856. /* reset the peripherals */
  857. void rcu_periph_reset_enable(rcu_periph_reset_enum periph_reset);
  858. /* disable reset the peripheral */
  859. void rcu_periph_reset_disable(rcu_periph_reset_enum periph_reset);
  860. /* reset the BKP domain */
  861. void rcu_bkp_reset_enable(void);
  862. /* disable the BKP domain reset */
  863. void rcu_bkp_reset_disable(void);
  864. /* configure the system clock source */
  865. void rcu_system_clock_source_config(uint32_t ck_sys);
  866. /* get the system clock source */
  867. uint32_t rcu_system_clock_source_get(void);
  868. /* configure the AHB prescaler selection */
  869. void rcu_ahb_clock_config(uint32_t ck_ahb);
  870. /* configure the APB1 prescaler selection */
  871. void rcu_apb1_clock_config(uint32_t ck_apb1);
  872. /* configure the APB2 prescaler selection */
  873. void rcu_apb2_clock_config(uint32_t ck_apb2);
  874. /* configure the CK_OUT0 clock source and divider */
  875. void rcu_ckout0_config(uint32_t ckout0_src);
  876. /* configure the PLL clock source selection and PLL multiply factor */
  877. void rcu_pll_config(uint32_t pll_src, uint32_t pll_mul);
  878. /* configure the PLL clock source preselection */
  879. void rcu_pllpresel_config(uint32_t pll_presel);
  880. #if(defined(GD32F10X_HD) || defined(GD32F10X_XD))
  881. /* configure the PREDV0 division factor and clock source */
  882. void rcu_predv0_config(uint32_t predv0_div);
  883. #elif defined(GD32F10X_CL)
  884. /* configure the PREDV0 division factor and clock source */
  885. void rcu_predv0_config(uint32_t predv0_source, uint32_t predv0_div);
  886. /* configure the PREDV1 division factor */
  887. void rcu_predv1_config(uint32_t predv1_div);
  888. /* configure the PLL1 clock */
  889. void rcu_pll1_config(uint32_t pll_mul);
  890. /* configure the PLL2 clock */
  891. void rcu_pll2_config(uint32_t pll_mul);
  892. #endif /* GD32F10X_HD and GD32F10X_XD */
  893. /* configure the ADC division factor */
  894. void rcu_adc_clock_config(uint32_t adc_psc);
  895. /* configure the USBD/USBFS prescaler factor */
  896. void rcu_usb_clock_config(uint32_t usb_psc);
  897. /* configure the RTC clock source selection */
  898. void rcu_rtc_clock_config(uint32_t rtc_clock_source);
  899. #ifdef GD32F10X_CL
  900. /* configure the I2S1 clock source selection */
  901. void rcu_i2s1_clock_config(uint32_t i2s_clock_source);
  902. /* configure the I2S2 clock source selection */
  903. void rcu_i2s2_clock_config(uint32_t i2s_clock_source);
  904. #endif /* GD32F10X_CL */
  905. /* configure the CK48M clock selection */
  906. void rcu_ck48m_clock_config(uint32_t ck48m_clock_source);
  907. /* get the clock stabilization and periphral reset flags */
  908. FlagStatus rcu_flag_get(rcu_flag_enum flag);
  909. /* clear the reset flag */
  910. void rcu_all_reset_flag_clear(void);
  911. /* get the clock stabilization interrupt and ckm flags */
  912. FlagStatus rcu_interrupt_flag_get(rcu_int_flag_enum int_flag);
  913. /* clear the interrupt flags */
  914. void rcu_interrupt_flag_clear(rcu_int_flag_clear_enum int_flag_clear);
  915. /* enable the stabilization interrupt */
  916. void rcu_interrupt_enable(rcu_int_enum stab_int);
  917. /* disable the stabilization interrupt */
  918. void rcu_interrupt_disable(rcu_int_enum stab_int);
  919. /* configure the LXTAL drive capability */
  920. void rcu_lxtal_drive_capability_config(uint32_t lxtal_dricap);
  921. /* wait for oscillator stabilization flags is SET or oscillator startup is timeout */
  922. ErrStatus rcu_osci_stab_wait(rcu_osci_type_enum osci);
  923. /* turn on the oscillator */
  924. void rcu_osci_on(rcu_osci_type_enum osci);
  925. /* turn off the oscillator */
  926. void rcu_osci_off(rcu_osci_type_enum osci);
  927. /* enable the oscillator bypass mode, HXTALEN or LXTALEN must be reset before it */
  928. void rcu_osci_bypass_mode_enable(rcu_osci_type_enum osci);
  929. /* disable the oscillator bypass mode, HXTALEN or LXTALEN must be reset before it */
  930. void rcu_osci_bypass_mode_disable(rcu_osci_type_enum osci);
  931. /* enable the HXTAL clock monitor */
  932. void rcu_hxtal_clock_monitor_enable(void);
  933. /* disable the HXTAL clock monitor */
  934. void rcu_hxtal_clock_monitor_disable(void);
  935. /* set the IRC8M adjust value */
  936. void rcu_irc8m_adjust_value_set(uint32_t irc8m_adjval);
  937. /* set the deep sleep mode voltage */
  938. void rcu_deepsleep_voltage_set(uint32_t dsvol);
  939. /* get the system clock, bus and peripheral clock frequency */
  940. uint32_t rcu_clock_freq_get(rcu_clock_freq_enum clock);
  941. #endif /* GD32F10X_RCU_H */