1 /*!
2     \file    gd32e50x_rcu.h
3     \brief   definitions for the RCU
4 
5     \version 2020-03-10, V1.0.0, firmware for GD32E50X
6     \version 2020-08-26, V1.1.0, firmware for GD32E50x
7     \version 2020-09-20, V1.1.1, firmware for GD32E50x
8     \version 2021-03-23, V1.2.0, firmware for GD32E50x
9 */
10 
11 /*
12     Copyright (c) 2021, GigaDevice Semiconductor Inc.
13 
14     Redistribution and use in source and binary forms, with or without modification,
15 are permitted provided that the following conditions are met:
16 
17     1. Redistributions of source code must retain the above copyright notice, this
18        list of conditions and the following disclaimer.
19     2. Redistributions in binary form must reproduce the above copyright notice,
20        this list of conditions and the following disclaimer in the documentation
21        and/or other materials provided with the distribution.
22     3. Neither the name of the copyright holder nor the names of its contributors
23        may be used to endorse or promote products derived from this software without
24        specific prior written permission.
25 
26     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
27 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
28 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
29 IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
30 INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
31 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
33 WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
34 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
35 OF SUCH DAMAGE.
36 */
37 
38 #ifndef GD32E50X_RCU_H
39 #define GD32E50X_RCU_H
40 
41 #include "gd32e50x.h"
42 
43 /* RCU definitions */
44 #define RCU                             RCU_BASE
45 
46 /* registers definitions */
47 #if (defined(GD32E50X_HD) || defined(GD32E50X_XD))
48 #define RCU_CTL                         REG32(RCU + 0x00000000U)        /*!< control register */
49 #define RCU_CFG0                        REG32(RCU + 0x00000004U)        /*!< clock configuration register 0 */
50 #define RCU_INT                         REG32(RCU + 0x00000008U)        /*!< clock interrupt register */
51 #define RCU_APB2RST                     REG32(RCU + 0x0000000CU)        /*!< APB2 reset register */
52 #define RCU_APB1RST                     REG32(RCU + 0x00000010U)        /*!< APB1 reset register */
53 #define RCU_AHBEN                       REG32(RCU + 0x00000014U)        /*!< AHB enable register */
54 #define RCU_APB2EN                      REG32(RCU + 0x00000018U)        /*!< APB2 enable register */
55 #define RCU_APB1EN                      REG32(RCU + 0x0000001CU)        /*!< APB1 enable register */
56 #define RCU_BDCTL                       REG32(RCU + 0x00000020U)        /*!< backup domain control register */
57 #define RCU_RSTSCK                      REG32(RCU + 0x00000024U)        /*!< reset source / clock register */
58 #define RCU_CFG1                        REG32(RCU + 0x0000002CU)        /*!< clock configuration register 1 */
59 #define RCU_DSV                         REG32(RCU + 0x00000034U)        /*!< deep-sleep mode voltage register */
60 #define RCU_ADDCTL                      REG32(RCU + 0x000000C0U)        /*!< Additional clock control register */
61 #define RCU_ADDINT                      REG32(RCU + 0x000000CCU)        /*!< Additional clock interrupt register */
62 #define RCU_ADDAPB1RST                  REG32(RCU + 0x000000E0U)        /*!< APB1 additional reset register */
63 #define RCU_ADDAPB1EN                   REG32(RCU + 0x000000E4U)        /*!< APB1 additional enable register */
64 #define RCU_CFG2                        REG32(RCU + 0x000000D4U)        /*!< clock configuration register 2 */
65 #define RCU_ADDAPB1RST                  REG32(RCU + 0x000000E0U)        /*!< APB1 additional reset register */
66 #define RCU_ADDAPB1EN                   REG32(RCU + 0x000000E4U)        /*!< APB1 additional enable register */
67 #elif defined(GD32E50X_CL) || defined(GD32E508)
68 #define RCU_CTL                         REG32(RCU + 0x00000000U)        /*!< control register */
69 #define RCU_CFG0                        REG32(RCU + 0x00000004U)        /*!< clock configuration register 0 */
70 #define RCU_INT                         REG32(RCU + 0x00000008U)        /*!< clock interrupt register */
71 #define RCU_APB2RST                     REG32(RCU + 0x0000000CU)        /*!< APB2 reset register */
72 #define RCU_APB1RST                     REG32(RCU + 0x00000010U)        /*!< APB1 reset register */
73 #define RCU_AHBEN                       REG32(RCU + 0x00000014U)        /*!< AHB1 enable register */
74 #define RCU_APB2EN                      REG32(RCU + 0x00000018U)        /*!< APB2 enable register */
75 #define RCU_APB1EN                      REG32(RCU + 0x0000001CU)        /*!< APB1 enable register */
76 #define RCU_BDCTL                       REG32(RCU + 0x00000020U)        /*!< backup domain control register */
77 #define RCU_RSTSCK                      REG32(RCU + 0x00000024U)        /*!< reset source / clock register */
78 #define RCU_AHBRST                      REG32(RCU + 0x00000028U)        /*!< AHB reset register */
79 #define RCU_CFG1                        REG32(RCU + 0x0000002CU)        /*!< clock configuration register 1 */
80 #define RCU_DSV                         REG32(RCU + 0x00000034U)        /*!< deep-sleep mode voltage register */
81 #define RCU_ADDCTL                      REG32(RCU + 0x000000C0U)        /*!< Additional clock control register */
82 #define RCU_ADDCFG                      REG32(RCU + 0x000000C4U)        /*!< Additional clock configuration register */
83 #define RCU_ADDINT                      REG32(RCU + 0x000000CCU)        /*!< Additional clock interrupt register */
84 #define RCU_PLLSSCTL                    REG32(RCU + 0x000000D0U)        /*!< PLL clock spread spectrum control register */
85 #define RCU_CFG2                        REG32(RCU + 0x000000D4U)        /*!< clock configuration register 2 */
86 #define RCU_ADDAPB1RST                  REG32(RCU + 0x000000E0U)        /*!< APB1 additional reset register */
87 #define RCU_ADDAPB1EN                   REG32(RCU + 0x000000E4U)        /*!< APB1 additional enable register */
88 #elif defined(GD32EPRT)
89 #define RCU_CTL                         REG32(RCU + 0x00000000U)        /*!< control register */
90 #define RCU_CFG0                        REG32(RCU + 0x00000004U)        /*!< clock configuration register 0 */
91 #define RCU_INT                         REG32(RCU + 0x00000008U)        /*!< clock interrupt register */
92 #define RCU_APB2RST                     REG32(RCU + 0x0000000CU)        /*!< APB2 reset register */
93 #define RCU_APB1RST                     REG32(RCU + 0x00000010U)        /*!< APB1 reset register */
94 #define RCU_AHBEN                       REG32(RCU + 0x00000014U)        /*!< AHB1 enable register */
95 #define RCU_APB2EN                      REG32(RCU + 0x00000018U)        /*!< APB2 enable register */
96 #define RCU_APB1EN                      REG32(RCU + 0x0000001CU)        /*!< APB1 enable register */
97 #define RCU_BDCTL                       REG32(RCU + 0x00000020U)        /*!< backup domain control register */
98 #define RCU_RSTSCK                      REG32(RCU + 0x00000024U)        /*!< reset source / clock register */
99 #define RCU_AHBRST                      REG32(RCU + 0x00000028U)        /*!< AHB reset register */
100 #define RCU_CFG1                        REG32(RCU + 0x0000002CU)        /*!< clock configuration register 1 */
101 #define RCU_DSV                         REG32(RCU + 0x00000034U)        /*!< deep-sleep mode voltage register */
102 #define RCU_ADDCTL                      REG32(RCU + 0x000000C0U)        /*!< Additional clock control register */
103 #define RCU_ADDINT                      REG32(RCU + 0x000000CCU)        /*!< Additional clock interrupt register */
104 #define RCU_PLLSSCTL                    REG32(RCU + 0x000000D0U)        /*!< PLL clock spread spectrum control register */
105 #define RCU_CFG2                        REG32(RCU + 0x000000D4U)        /*!< clock configuration register 2 */
106 #define RCU_ADDAPB1RST                  REG32(RCU + 0x000000E0U)        /*!< APB1 additional reset register */
107 #define RCU_ADDAPB1EN                   REG32(RCU + 0x000000E4U)        /*!< APB1 additional enable register */
108 #endif /* GD32E50X_HD and GD32E50X_XD */
109 
110 /* bits definitions */
111 /* RCU_CTL */
112 #if defined(GD32E50X_HD) || defined(GD32E50X_XD)
113 #define RCU_CTL_IRC8MEN                 BIT(0)                    /*!< internal high speed oscillator enable */
114 #define RCU_CTL_IRC8MSTB                BIT(1)                    /*!< IRC8M high speed internal oscillator stabilization flag */
115 #define RCU_CTL_IRC8MADJ                BITS(3,7)                 /*!< high speed internal oscillator clock trim adjust value */
116 #define RCU_CTL_IRC8MCALIB              BITS(8,15)                /*!< high speed internal oscillator calibration value register */
117 #define RCU_CTL_HXTALEN                 BIT(16)                   /*!< external high speed oscillator enable */
118 #define RCU_CTL_HXTALSTB                BIT(17)                   /*!< external crystal oscillator clock stabilization flag */
119 #define RCU_CTL_HXTALBPS                BIT(18)                   /*!< external crystal oscillator clock bypass mode enable */
120 #define RCU_CTL_CKMEN                   BIT(19)                   /*!< HXTAL clock monitor enable */
121 #define RCU_CTL_PLLEN                   BIT(24)                   /*!< PLL enable */
122 #define RCU_CTL_PLLSTB                  BIT(25)                   /*!< PLL clock stabilization flag */
123 #elif defined(GD32E50X_CL) || defined(GD32EPRT) || defined(GD32E508)
124 #define RCU_CTL_IRC8MEN                 BIT(0)                    /*!< internal high speed oscillator enable */
125 #define RCU_CTL_IRC8MSTB                BIT(1)                    /*!< IRC8M high speed internal oscillator stabilization flag */
126 #define RCU_CTL_IRC8MADJ                BITS(3,7)                 /*!< high speed internal oscillator clock trim adjust value */
127 #define RCU_CTL_IRC8MCALIB              BITS(8,15)                /*!< high speed internal oscillator calibration value register */
128 #define RCU_CTL_HXTALEN                 BIT(16)                   /*!< external high speed oscillator enable */
129 #define RCU_CTL_HXTALSTB                BIT(17)                   /*!< external crystal oscillator clock stabilization flag */
130 #define RCU_CTL_HXTALBPS                BIT(18)                   /*!< external crystal oscillator clock bypass mode enable */
131 #define RCU_CTL_CKMEN                   BIT(19)                   /*!< HXTAL clock monitor enable */
132 #define RCU_CTL_PLLEN                   BIT(24)                   /*!< PLL enable */
133 #define RCU_CTL_PLLSTB                  BIT(25)                   /*!< PLL clock stabilization flag */
134 #define RCU_CTL_PLL1EN                  BIT(26)                   /*!< PLL1 enable */
135 #define RCU_CTL_PLL1STB                 BIT(27)                   /*!< PLL1 clock stabilization flag */
136 #define RCU_CTL_PLL2EN                  BIT(28)                   /*!< PLL2 enable */
137 #define RCU_CTL_PLL2STB                 BIT(29)                   /*!< PLL2 clock stabilization flag */
138 #endif /* GD32E50X_HD and GD32E50X_XD*/
139 
140 /* RCU_CFG0 */
141 #if defined(GD32E50X_HD) || defined(GD32E50X_XD)
142 #define RCU_CFG0_SCS                    BITS(0,1)                 /*!< system clock switch */
143 #define RCU_CFG0_SCSS                   BITS(2,3)                 /*!< system clock switch status */
144 #define RCU_CFG0_AHBPSC                 BITS(4,7)                 /*!< AHB prescaler selection */
145 #define RCU_CFG0_APB1PSC                BITS(8,10)                /*!< APB1 prescaler selection */
146 #define RCU_CFG0_APB2PSC                BITS(11,13)               /*!< APB2 prescaler selection */
147 #define RCU_CFG0_ADCPSC                 BITS(14,15)               /*!< ADC prescaler selection */
148 #define RCU_CFG0_PLLSEL                 BIT(16)                   /*!< PLL clock source selection */
149 #define RCU_CFG0_PREDV0                 BIT(17)                   /*!< PREDV0 division factor */
150 #define RCU_CFG0_PLLMF                  BITS(18,21)               /*!< PLL clock multiplication factor */
151 #define RCU_CFG0_USBDPSC                BITS(22,23)               /*!< USBD clock prescaler selection */
152 #define RCU_CFG0_CKOUT0SEL              BITS(24,26)               /*!< CKOUT0 clock source selection */
153 #define RCU_CFG0_PLLMF_4                BIT(27)                   /*!< bit 4 of PLLMF */
154 #define RCU_CFG0_ADCPSC_2               BIT(28)                   /*!< bit 2 of ADCPSC */
155 #define RCU_CFG0_PLLMF_5                BIT(30)                   /*!< bit 5 of PLLMF */
156 #define RCU_CFG0_USBDPSC_2              BIT(31)                   /*!< bit 2 of USBDPSC */
157 #elif defined(GD32E50X_CL) || defined(GD32E508)
158 #define RCU_CFG0_SCS                    BITS(0,1)                 /*!< system clock switch */
159 #define RCU_CFG0_SCSS                   BITS(2,3)                 /*!< system clock switch status */
160 #define RCU_CFG0_AHBPSC                 BITS(4,7)                 /*!< AHB prescaler selection */
161 #define RCU_CFG0_APB1PSC                BITS(8,10)                /*!< APB1 prescaler selection */
162 #define RCU_CFG0_APB2PSC                BITS(11,13)               /*!< APB2 prescaler selection */
163 #define RCU_CFG0_ADCPSC                 BITS(14,15)               /*!< ADC prescaler selection */
164 #define RCU_CFG0_PLLSEL                 BIT(16)                   /*!< PLL clock source selection */
165 #define RCU_CFG0_PREDV0_LSB             BIT(17)                   /*!< the LSB of PREDV0 division factor */
166 #define RCU_CFG0_PLLMF                  BITS(18,21)               /*!< PLL clock multiplication factor */
167 #define RCU_CFG0_USBHSPSC               BITS(22,23)               /*!< USBHS clock prescaler selection */
168 #define RCU_CFG0_CKOUT0SEL              BITS(24,27)               /*!< CKOUT0 clock source selection */
169 #define RCU_CFG0_ADCPSC_2               BIT(28)                   /*!< bit 2 of ADCPSC */
170 #define RCU_CFG0_PLLMF_4                BIT(29)                   /*!< bit 4 of PLLMF */
171 #define RCU_CFG0_PLLMF_5                BIT(30)                   /*!< bit 5 of PLLMF */
172 #define RCU_CFG0_USBHSPSC_2             BIT(31)                   /*!< bit 2 of USBHSPSC */
173 #elif defined(GD32EPRT)
174 #define RCU_CFG0_SCS                    BITS(0,1)                 /*!< system clock switch */
175 #define RCU_CFG0_SCSS                   BITS(2,3)                 /*!< system clock switch status */
176 #define RCU_CFG0_AHBPSC                 BITS(4,7)                 /*!< AHB prescaler selection */
177 #define RCU_CFG0_APB1PSC                BITS(8,10)                /*!< APB1 prescaler selection */
178 #define RCU_CFG0_APB2PSC                BITS(11,13)               /*!< APB2 prescaler selection */
179 #define RCU_CFG0_ADCPSC                 BITS(14,15)               /*!< ADC prescaler selection */
180 #define RCU_CFG0_PLLSEL                 BIT(16)                   /*!< PLL clock source selection */
181 #define RCU_CFG0_PREDV0_LSB             BIT(17)                   /*!< the LSB of PREDV0 division factor */
182 #define RCU_CFG0_PLLMF                  BITS(18,21)               /*!< PLL clock multiplication factor */
183 #define RCU_CFG0_USBDPSC                BITS(22,23)               /*!< USBD clock prescaler selection */
184 #define RCU_CFG0_CKOUT0SEL              BITS(24,27)               /*!< CKOUT0 clock source selection */
185 #define RCU_CFG0_ADCPSC_2               BIT(28)                   /*!< bit 2 of ADCPSC */
186 #define RCU_CFG0_PLLMF_4                BIT(29)                   /*!< bit 4 of PLLMF */
187 #define RCU_CFG0_PLLMF_5                BIT(30)                   /*!< bit 5 of PLLMF */
188 #define RCU_CFG0_USBDPSC_2              BIT(31)                   /*!< bit 2 of USBDPSC */
189 #endif /* GD32E50X_HD and GD32E50X_XD */
190 
191 /* RCU_INT */
192 #if defined(GD32E50X_HD) || defined(GD32E50X_XD)
193 #define RCU_INT_IRC40KSTBIF             BIT(0)                    /*!< IRC40K stabilization interrupt flag */
194 #define RCU_INT_LXTALSTBIF              BIT(1)                    /*!< LXTAL stabilization interrupt flag */
195 #define RCU_INT_IRC8MSTBIF              BIT(2)                    /*!< IRC8M stabilization interrupt flag */
196 #define RCU_INT_HXTALSTBIF              BIT(3)                    /*!< HXTAL stabilization interrupt flag */
197 #define RCU_INT_PLLSTBIF                BIT(4)                    /*!< PLL stabilization interrupt flag */
198 #define RCU_INT_CKMIF                   BIT(7)                    /*!< HXTAL clock stuck interrupt flag */
199 #define RCU_INT_IRC40KSTBIE             BIT(8)                    /*!< IRC40K stabilization interrupt enable */
200 #define RCU_INT_LXTALSTBIE              BIT(9)                    /*!< LXTAL stabilization interrupt enable */
201 #define RCU_INT_IRC8MSTBIE              BIT(10)                   /*!< IRC8M stabilization interrupt enable */
202 #define RCU_INT_HXTALSTBIE              BIT(11)                   /*!< HXTAL stabilization interrupt enable */
203 #define RCU_INT_PLLSTBIE                BIT(12)                   /*!< PLL stabilization interrupt enable */
204 #define RCU_INT_IRC40KSTBIC             BIT(16)                   /*!< IRC40K Stabilization interrupt clear */
205 #define RCU_INT_LXTALSTBIC              BIT(17)                   /*!< LXTAL Stabilization interrupt clear */
206 #define RCU_INT_IRC8MSTBIC              BIT(18)                   /*!< IRC8M Stabilization interrupt clear */
207 #define RCU_INT_HXTALSTBIC              BIT(19)                   /*!< HXTAL Stabilization interrupt clear */
208 #define RCU_INT_PLLSTBIC                BIT(20)                   /*!< PLL stabilization interrupt clear */
209 #define RCU_INT_CKMIC                   BIT(23)                   /*!< HXTAL clock stuck interrupt clear */
210 #elif defined(GD32E50X_CL) || defined(GD32EPRT) || defined(GD32E508)
211 #define RCU_INT_IRC40KSTBIF             BIT(0)                    /*!< IRC40K stabilization interrupt flag */
212 #define RCU_INT_LXTALSTBIF              BIT(1)                    /*!< LXTAL stabilization interrupt flag */
213 #define RCU_INT_IRC8MSTBIF              BIT(2)                    /*!< IRC8M stabilization interrupt flag */
214 #define RCU_INT_HXTALSTBIF              BIT(3)                    /*!< HXTAL stabilization interrupt flag */
215 #define RCU_INT_PLLSTBIF                BIT(4)                    /*!< PLL stabilization interrupt flag */
216 #define RCU_INT_PLL1STBIF               BIT(5)                    /*!< PLL1 stabilization interrupt flag */
217 #define RCU_INT_PLL2STBIF               BIT(6)                    /*!< PLL2 stabilization interrupt flag */
218 #define RCU_INT_CKMIF                   BIT(7)                    /*!< HXTAL clock stuck interrupt flag */
219 #define RCU_INT_IRC40KSTBIE             BIT(8)                    /*!< IRC40K stabilization interrupt enable */
220 #define RCU_INT_LXTALSTBIE              BIT(9)                    /*!< LXTAL stabilization interrupt enable */
221 #define RCU_INT_IRC8MSTBIE              BIT(10)                   /*!< IRC8M stabilization interrupt enable */
222 #define RCU_INT_HXTALSTBIE              BIT(11)                   /*!< HXTAL stabilization interrupt enable */
223 #define RCU_INT_PLLSTBIE                BIT(12)                   /*!< PLL stabilization interrupt enable */
224 #define RCU_INT_PLL1STBIE               BIT(13)                   /*!< PLL1 stabilization interrupt enable */
225 #define RCU_INT_PLL2STBIE               BIT(14)                   /*!< PLL2 stabilization interrupt enable */
226 #define RCU_INT_IRC40KSTBIC             BIT(16)                   /*!< IRC40K stabilization interrupt clear */
227 #define RCU_INT_LXTALSTBIC              BIT(17)                   /*!< LXTAL stabilization interrupt clear */
228 #define RCU_INT_IRC8MSTBIC              BIT(18)                   /*!< IRC8M stabilization interrupt clear */
229 #define RCU_INT_HXTALSTBIC              BIT(19)                   /*!< HXTAL stabilization interrupt clear */
230 #define RCU_INT_PLLSTBIC                BIT(20)                   /*!< PLL stabilization interrupt clear */
231 #define RCU_INT_PLL1STBIC               BIT(21)                   /*!< PLL1 stabilization interrupt clear */
232 #define RCU_INT_PLL2STBIC               BIT(22)                   /*!< PLL2 stabilization interrupt clear */
233 #define RCU_INT_CKMIC                   BIT(23)                   /*!< HXTAL clock stuck interrupt clear */
234 #endif /* GD32E50X_HD and GD32E50X_XD */
235 
236 /* RCU_APB2RST */
237 #define RCU_APB2RST_AFRST               BIT(0)                    /*!< alternate function I/O reset */
238 #define RCU_APB2RST_PARST               BIT(2)                    /*!< GPIO port A reset */
239 #define RCU_APB2RST_PBRST               BIT(3)                    /*!< GPIO port B reset */
240 #define RCU_APB2RST_PCRST               BIT(4)                    /*!< GPIO port C reset */
241 #define RCU_APB2RST_PDRST               BIT(5)                    /*!< GPIO port D reset */
242 #define RCU_APB2RST_PERST               BIT(6)                    /*!< GPIO port E reset */
243 #define RCU_APB2RST_PFRST               BIT(7)                    /*!< GPIO port F reset */
244 #define RCU_APB2RST_PGRST               BIT(8)                    /*!< GPIO port G reset */
245 #define RCU_APB2RST_ADC0RST             BIT(9)                    /*!< ADC0 reset */
246 #define RCU_APB2RST_ADC1RST             BIT(10)                   /*!< ADC1 reset */
247 #define RCU_APB2RST_TIMER0RST           BIT(11)                   /*!< TIMER0 reset */
248 #define RCU_APB2RST_SPI0RST             BIT(12)                   /*!< SPI0 reset */
249 #define RCU_APB2RST_TIMER7RST           BIT(13)                   /*!< TIMER7 reset */
250 #define RCU_APB2RST_USART0RST           BIT(14)                   /*!< USART0 reset */
251 #if defined(GD32E50X_XD) || defined(GD32E50X_HD) || defined(GD32EPRT)
252 #define RCU_APB2RST_ADC2RST             BIT(15)                   /*!< ADC2 reset */
253 #endif /* GD32E50X_XD and GD32E50X_HDand GD32EPRT */
254 #ifndef GD32EPRT
255 #define RCU_APB2RST_TIMER8RST           BIT(19)                   /*!< TIMER8 reset */
256 #define RCU_APB2RST_TIMER9RST           BIT(20)                   /*!< TIMER9 reset */
257 #define RCU_APB2RST_TIMER10RST          BIT(21)                   /*!< TIMER10 reset */
258 #endif /* GD32EPRT*/
259 #define RCU_APB2RST_USART5RST           BIT(28)                   /*!< USART5 reset */
260 #ifndef GD32EPRT
261 #define RCU_APB2RST_SHRTIMERRST         BIT(29)                   /*!< HPTIME reset */
262 #endif /* GD32EPRT */
263 #if defined(GD32E50X_CL) || defined(GD32E508)
264 #define RCU_APB2RST_CMPRST              BIT(31)                   /*!< CMP reset */
265 #endif /* GD32E50X_CL and GD32E508 */
266 
267 /* RCU_APB1RST */
268 #define RCU_APB1RST_TIMER1RST           BIT(0)                    /*!< TIMER1 reset */
269 #define RCU_APB1RST_TIMER2RST           BIT(1)                    /*!< TIMER2 reset */
270 #define RCU_APB1RST_TIMER3RST           BIT(2)                    /*!< TIMER3 reset */
271 #define RCU_APB1RST_TIMER4RST           BIT(3)                    /*!< TIMER4 reset */
272 #define RCU_APB1RST_TIMER5RST           BIT(4)                    /*!< TIMER5 reset */
273 #define RCU_APB1RST_TIMER6RST           BIT(5)                    /*!< TIMER6 reset */
274 #ifndef GD32EPRT
275 #define RCU_APB1RST_TIMER11RST          BIT(6)                    /*!< TIMER11 reset */
276 #define RCU_APB1RST_TIMER12RST          BIT(7)                    /*!< TIMER12 reset */
277 #define RCU_APB1RST_TIMER13RST          BIT(8)                    /*!< TIMER13 reset */
278 #endif /* GD32EPRT */
279 #define RCU_APB1RST_WWDGTRST            BIT(11)                   /*!< WWDGT reset */
280 #define RCU_APB1RST_SPI1RST             BIT(14)                   /*!< SPI1 reset */
281 #define RCU_APB1RST_SPI2RST             BIT(15)                   /*!< SPI2 reset */
282 #define RCU_APB1RST_USART1RST           BIT(17)                   /*!< USART1 reset */
283 #define RCU_APB1RST_USART2RST           BIT(18)                   /*!< USART2 reset */
284 #define RCU_APB1RST_UART3RST            BIT(19)                   /*!< UART3 reset */
285 #define RCU_APB1RST_UART4RST            BIT(20)                   /*!< UART4 reset */
286 #define RCU_APB1RST_I2C0RST             BIT(21)                   /*!< I2C0 reset */
287 #define RCU_APB1RST_I2C1RST             BIT(22)                   /*!< I2C1 reset */
288 #if (defined(GD32E50X_HD) || defined(GD32E50X_XD) || defined(GD32EPRT))
289 #define RCU_APB1RST_USBDRST             BIT(23)                   /*!< USBD reset */
290 #endif /* GD32E50X_HD and GD32E50X_XD and GD32EPRT */
291 #define RCU_APB1RST_I2C2RST             BIT(24)                   /*!< I2C2 reset */
292 #ifndef GD32EPRT
293 #define RCU_APB1RST_CAN0RST             BIT(25)                   /*!< CAN0 reset */
294 #define RCU_APB1RST_CAN1RST             BIT(26)                   /*!< CAN1 reset */
295 #endif /* GD32EPRT */
296 #define RCU_APB1RST_BKPIRST             BIT(27)                   /*!< backup interface reset */
297 #define RCU_APB1RST_PMURST              BIT(28)                   /*!< PMU reset */
298 #define RCU_APB1RST_DACRST              BIT(29)                   /*!< DAC reset */
299 
300 /* RCU_AHBEN */
301 #define RCU_AHBEN_DMA0EN                BIT(0)                    /*!< DMA0 clock enable */
302 #define RCU_AHBEN_DMA1EN                BIT(1)                    /*!< DMA1 clock enable */
303 #define RCU_AHBEN_SRAMSPEN              BIT(2)                    /*!< SRAM clock enable when sleep mode */
304 #define RCU_AHBEN_FMCSPEN               BIT(4)                    /*!< FMC clock enable when sleep mode */
305 #define RCU_AHBEN_CRCEN                 BIT(6)                    /*!< CRC clock enable */
306 #define RCU_AHBEN_EXMCEN                BIT(8)                    /*!< EXMC clock enable */
307 #if (defined(GD32E50X_HD) || defined(GD32E50X_XD))
308 #define RCU_AHBEN_SDIOEN                BIT(10)                   /*!< SDIO clock enable */
309 #elif defined(GD32E50X_CL) || defined(GD32E508)
310 #define RCU_AHBEN_USBHSEN               BIT(12)                   /*!< USBHS clock enable */
311 #define RCU_AHBEN_ULPIEN                BIT(13)                   /*!< ULPI clock enable */
312 #define RCU_AHBEN_TMUEN                 BIT(30)                   /*!< TMU clock enable */
313 #endif /* GD32E50X_HD and GD32E50X_XD */
314 #if (defined(GD32E50X_CL) || defined(GD32EPRT) || defined(GD32E508))
315 #define RCU_AHBEN_ENETEN                BIT(14)                   /*!< ENET clock enable */
316 #define RCU_AHBEN_ENETTXEN              BIT(15)                   /*!< Ethernet TX clock enable */
317 #define RCU_AHBEN_ENETRXEN              BIT(16)                   /*!< Ethernet RX clock enable */
318 #endif /* GD32E50X_CL and GD32EPRT and GD32E508 */
319 #define RCU_AHBEN_SQPIEN                BIT(31)                   /*!< SQPI clock enable */
320 
321 /* RCU_APB2EN */
322 #define RCU_APB2EN_AFEN                 BIT(0)                    /*!< alternate function IO clock enable */
323 #define RCU_APB2EN_PAEN                 BIT(2)                    /*!< GPIO port A clock enable */
324 #define RCU_APB2EN_PBEN                 BIT(3)                    /*!< GPIO port B clock enable */
325 #define RCU_APB2EN_PCEN                 BIT(4)                    /*!< GPIO port C clock enable */
326 #define RCU_APB2EN_PDEN                 BIT(5)                    /*!< GPIO port D clock enable */
327 #define RCU_APB2EN_PEEN                 BIT(6)                    /*!< GPIO port E clock enable */
328 #define RCU_APB2EN_PFEN                 BIT(7)                    /*!< GPIO port F clock enable */
329 #define RCU_APB2EN_PGEN                 BIT(8)                    /*!< GPIO port G clock enable */
330 #define RCU_APB2EN_ADC0EN               BIT(9)                    /*!< ADC0 clock enable */
331 #define RCU_APB2EN_ADC1EN               BIT(10)                   /*!< ADC1 clock enable */
332 #define RCU_APB2EN_TIMER0EN             BIT(11)                   /*!< TIMER0 clock enable */
333 #define RCU_APB2EN_SPI0EN               BIT(12)                   /*!< SPI0 clock enable */
334 #define RCU_APB2EN_TIMER7EN             BIT(13)                   /*!< TIMER7 clock enable */
335 #define RCU_APB2EN_USART0EN             BIT(14)                   /*!< USART0 clock enable */
336 #if defined(GD32E50X_XD) || defined(GD32E50X_HD) || defined(GD32EPRT)
337 #define RCU_APB2EN_ADC2EN               BIT(15)                   /*!< ADC2 clock enable */
338 #endif /* GD32E50X_XD and GD32E50X_HDand GD32EPRT */
339 #ifndef GD32EPRT
340 #define RCU_APB2EN_TIMER8EN             BIT(19)                   /*!< TIMER8 clock enable */
341 #define RCU_APB2EN_TIMER9EN             BIT(20)                   /*!< TIMER9 clock enable */
342 #define RCU_APB2EN_TIMER10EN            BIT(21)                   /*!< TIMER10 clock enable */
343 #endif /* GD32EPRT */
344 #define RCU_APB2EN_USART5EN             BIT(28)                   /*!< USART5 clock enable */
345 #ifndef GD32EPRT
346 #define RCU_APB2EN_SHRTIMEREN           BIT(29)                   /*!< SHRTIMER clock enable */
347 #endif /* GD32EPRT */
348 #if defined(GD32E50X_CL) || defined(GD32E508)
349 #define RCU_APB2EN_CMPEN                BIT(31)                   /*!< CMP clock enable */
350 #endif /* GD32E50X_CL and GD32E508 */
351 
352 /* RCU_APB1EN */
353 #define RCU_APB1EN_TIMER1EN             BIT(0)                    /*!< TIMER1 clock enable */
354 #define RCU_APB1EN_TIMER2EN             BIT(1)                    /*!< TIMER2 clock enable */
355 #define RCU_APB1EN_TIMER3EN             BIT(2)                    /*!< TIMER3 clock enable */
356 #define RCU_APB1EN_TIMER4EN             BIT(3)                    /*!< TIMER4 clock enable */
357 #define RCU_APB1EN_TIMER5EN             BIT(4)                    /*!< TIMER5 clock enable */
358 #define RCU_APB1EN_TIMER6EN             BIT(5)                    /*!< TIMER6 clock enable */
359 #ifndef GD32EPRT
360 #define RCU_APB1EN_TIMER11EN            BIT(6)                    /*!< TIMER11 clock enable */
361 #define RCU_APB1EN_TIMER12EN            BIT(7)                    /*!< TIMER12 clock enable */
362 #define RCU_APB1EN_TIMER13EN            BIT(8)                    /*!< TIMER13 clock enable */
363 #endif /* GD32EPRT */
364 #define RCU_APB1EN_WWDGTEN              BIT(11)                   /*!< WWDGT clock enable */
365 #define RCU_APB1EN_SPI1EN               BIT(14)                   /*!< SPI1 clock enable */
366 #define RCU_APB1EN_SPI2EN               BIT(15)                   /*!< SPI2 clock enable */
367 #define RCU_APB1EN_USART1EN             BIT(17)                   /*!< USART1 clock enable */
368 #define RCU_APB1EN_USART2EN             BIT(18)                   /*!< USART2 clock enable */
369 #define RCU_APB1EN_UART3EN              BIT(19)                   /*!< UART3 clock enable */
370 #define RCU_APB1EN_UART4EN              BIT(20)                   /*!< UART4 clock enable */
371 #define RCU_APB1EN_I2C0EN               BIT(21)                   /*!< I2C0 clock enable */
372 #define RCU_APB1EN_I2C1EN               BIT(22)                   /*!< I2C1 clock enable */
373 #if (defined(GD32E50X_HD) || defined(GD32E50X_XD) || defined(GD32EPRT))
374 #define RCU_APB1EN_USBDEN               BIT(23)                   /*!< USBD clock enable */
375 #endif /* GD32E50X_HD and GD32E50X_XD and GD32EPRT */
376 #define RCU_APB1EN_I2C2EN               BIT(24)                   /*!< I2C2 clock enable */
377 #ifndef GD32EPRT
378 #define RCU_APB1EN_CAN0EN               BIT(25)                   /*!< CAN0 clock enable */
379 #define RCU_APB1EN_CAN1EN               BIT(26)                   /*!< CAN1 clock enable */
380 #endif /* GD32EPRT */
381 #define RCU_APB1EN_BKPIEN               BIT(27)                   /*!< backup interface clock enable */
382 #define RCU_APB1EN_PMUEN                BIT(28)                   /*!< PMU clock enable */
383 #define RCU_APB1EN_DACEN                BIT(29)                   /*!< DAC clock enable */
384 
385 /* RCU_BDCTL */
386 #define RCU_BDCTL_LXTALEN               BIT(0)                    /*!< LXTAL enable */
387 #define RCU_BDCTL_LXTALSTB              BIT(1)                    /*!< low speed crystal oscillator stabilization flag */
388 #define RCU_BDCTL_LXTALBPS              BIT(2)                    /*!< LXTAL bypass mode enable */
389 #define RCU_BDCTL_LXTALDRI              BITS(3,4)                 /*!< LXTAL drive capability */
390 #define RCU_BDCTL_RTCSRC                BITS(8,9)                 /*!< RTC clock entry selection */
391 #define RCU_BDCTL_RTCEN                 BIT(15)                   /*!< RTC clock enable */
392 #define RCU_BDCTL_BKPRST                BIT(16)                   /*!< backup domain reset */
393 
394 /* RCU_RSTSCK */
395 #define RCU_RSTSCK_IRC40KEN             BIT(0)                    /*!< IRC40K enable */
396 #define RCU_RSTSCK_IRC40KSTB            BIT(1)                    /*!< IRC40K stabilization flag */
397 #define RCU_RSTSCK_RSTFC                BIT(24)                   /*!< reset flag clear */
398 #define RCU_RSTSCK_BORRSTF              BIT(25)                   /*!< BOR reset flag */
399 #define RCU_RSTSCK_EPRSTF               BIT(26)                   /*!< external pin reset flag */
400 #define RCU_RSTSCK_PORRSTF              BIT(27)                   /*!< power reset flag */
401 #define RCU_RSTSCK_SWRSTF               BIT(28)                   /*!< software reset flag */
402 #define RCU_RSTSCK_FWDGTRSTF            BIT(29)                   /*!< free watchdog timer reset flag */
403 #define RCU_RSTSCK_WWDGTRSTF            BIT(30)                   /*!< window watchdog timer reset flag */
404 #define RCU_RSTSCK_LPRSTF               BIT(31)                   /*!< low-power reset flag */
405 
406 #if defined(GD32E50X_CL) || defined(GD32E508)
407 /* RCU_AHBRST */
408 #define RCU_AHBRST_USBHSRST             BIT(12)                   /*!< USBHS reset */
409 #define RCU_AHBRST_TMURST               BIT(30)                   /*!< TMU reset */
410 #endif /* GD32E50X_CL and GD32E508 */
411 #if (defined(GD32E50X_CL) || defined(GD32EPRT) || defined(GD32E508))
412 #define RCU_AHBRST_ENETRST              BIT(14)                   /*!< ENET reset */
413 #endif /* GD32E50X_CL and GD32EPRT and GD32E508 */
414 #define RCU_AHBRST_SQPIRST              BIT(31)                   /*!< SQPI reset */
415 
416 /* RCU_CFG1 */
417 #define RCU_CFG1_PREDV0                 BITS(0,3)                 /*!< PREDV0 division factor */
418 #define RCU_CFG1_PREDV1                 BITS(4,7)                 /*!< PREDV1 division factor */
419 #define RCU_CFG1_PLL1MF                 BITS(8,11)                /*!< PLL1 clock multiplication factor */
420 #define RCU_CFG1_PLL2MF                 BITS(12,15)               /*!< PLL2 clock multiplication factor */
421 #define RCU_CFG1_PREDV0SEL              BIT(16)                   /*!< PREDV0 input clock source selection */
422 #if defined(GD32E50X_CL) || defined(GD32EPRT) || defined(GD32E508)
423 #define RCU_CFG1_I2S1SEL                BIT(17)                   /*!< I2S1 clock source selection */
424 #define RCU_CFG1_I2S2SEL                BIT(18)                   /*!< I2S2 clock source selection  */
425 #define RCU_CFG1_PLL2MF_5               BIT(28)                   /*!< bit 6 of PLL2MF */
426 #define RCU_CFG1_PLL2MF_4               BIT(31)                   /*!< bit 5 of PLL2MF */
427 #endif /* GD32E50X_CL and GD32EPRT and GD32E508 */
428 #ifndef GD32EPRT
429 #define RCU_CFG1_SHRTIMERSEL            BIT(19)                   /*!< SHRTIMER clock source selection  */
430 #endif /* GD32EPRT */
431 #define RCU_CFG1_ADCPSC_3               BIT(29)                   /*!< bit 4 of ADCPSC */
432 #define RCU_CFG1_PLLPRESEL              BIT(30)                   /*!< PLL clock source selection */
433 
434 /* RCU_DSV */
435 #define RCU_DSV_DSLPVS                  BITS(0,2)                 /*!< deep-sleep mode voltage select */
436 
437 /* RCU_ADDCTL */
438 #define RCU_ADDCTL_CK48MSEL             BITS(0,1)                 /*!< 48MHz clock selection */
439 #if defined(GD32E50X_CL) || defined(GD32E508)
440 #define RCU_ADDCTL_USBHSSEL             BIT(2)                    /*!< USBHS clock selection */
441 #define RCU_ADDCTL_USBHSDV              BITS(3,5)                 /*!< USBHS clock divider factor */
442 #define RCU_ADDCTL_USBSWEN              BIT(6)                    /*!< USB clock source selection enable */
443 #define RCU_ADDCTL_PLLUSBEN             BIT(14)                   /*!< PLLUSB enable */
444 #define RCU_ADDCTL_PLLUSBSTB            BIT(15)                   /*!< PLLUSB clock stabilization flag */
445 #endif /* GD32E50X_CL and GD32E508 */
446 #define RCU_ADDCTL_IRC48MEN             BIT(16)                   /*!< internal 48MHz RC oscillator enable */
447 #define RCU_ADDCTL_IRC48MSTB            BIT(17)                   /*!< internal 48MHz RC oscillator clock stabilization flag */
448 #define RCU_ADDCTL_IRC48MCAL            BITS(24,31)               /*!< internal 48MHz RC oscillator calibration value register */
449 
450 /* RCU_ADDCFG */
451 #if defined(GD32E50X_CL) || defined(GD32E508)
452 #define RCU_ADDCFG_PLLUSBPREDV          BITS(0,3)                 /*!< PLLUSBPREDV division factor */
453 #define RCU_ADDCFG_PLLUSBPRESEL         BIT(16)                   /*!< PLLUSB clock source preselection */
454 #define RCU_ADDCFG_PLLUSBPREDVSEL       BIT(17)                   /*!< PLLUSBPREDV input Clock Source Selection */
455 #define RCU_ADDCFG_PLLUSBMF             BITS(18,24)               /*!< The PLLUSB clock multiplication factor */
456 #endif /* GD32E50X_CL and GD32E508 */
457 
458 /* RCU_ADDINT */
459 #define RCU_ADDINT_IRC48MSTBIF          BIT(6)                    /*!< IRC48M stabilization interrupt flag */
460 #define RCU_ADDINT_IRC48MSTBIE          BIT(14)                   /*!< internal 48 MHz RC oscillator stabilization interrupt enable */
461 #define RCU_ADDINT_IRC48MSTBIC          BIT(22)                   /*!< internal 48 MHz RC oscillator stabilization interrupt clear */
462 #if defined(GD32E50X_CL) || defined(GD32E508)
463 #define RCU_ADDINT_PLLUSBSTBIF          BIT(7)                    /*!< PLLUSB stabilization interrupt flag */
464 #define RCU_ADDINT_PLLUSBSTBIE          BIT(15)                   /*!< PLLUSB stabilization interrupt enable */
465 #define RCU_ADDINT_PLLUSBSTBIC          BIT(23)                   /*!< PLLUSB stabilization interrupt clear */
466 #endif /* GD32E50X_CL and GD32E508 */
467 
468 /* RCU_PLLSSCTL */
469 #define RCU_PLLSSCTL_MODCNT             BITS(0,12)                /*!< these bits configure PLL spread spectrum modulation
470                                                                        profile amplitude and frequency. the following criteria
471                                                                        must be met: MODSTEP*MODCNT=215-1 */
472 #define RCU_PLLSSCTL_MODSTEP            BITS(13,27)               /*!< these bits configure PLL spread spectrum modulation
473                                                                        profile amplitude and frequency. the following criteria
474                                                                        must be met: MODSTEP*MODCNT=215-1 */
475 #define RCU_PLLSSCTL_SS_TYPE            BIT(30)                   /*!< PLL spread spectrum modulation type select */
476 #define RCU_PLLSSCTL_SSCGON             BIT(31)                   /*!< PLL spread spectrum modulation enable */
477 
478 /* RCU_CFG2 */
479 #define RCU_CFG2_USART5SEL              BITS(0,1)                 /*!< USART5 Clock Source Selection */
480 #define RCU_CFG2_I2C2SEL                BITS(4,5)                 /*!< I2C2 Clock Source Selection */
481 
482 /* RCU_ADDAPB1RST */
483 #define RCU_ADDAPB1RST_CTCRST           BIT(27)                   /*!< CTC reset */
484 #if defined(GD32E50X_CL) || defined(GD32E508)
485 #define RCU_ADDAPB1RST_CAN2RST          BIT(31)                   /*!< CAN2 reset */
486 #endif /* GD32E50X_CL and GD32E508 */
487 
488 /* RCU_ADDAPB1EN */
489 #define RCU_ADDAPB1EN_CTCEN             BIT(27)                   /*!< CTC clock enable */
490 #if defined(GD32E50X_CL) || defined(GD32E508)
491 #define RCU_ADDAPB1EN_CAN2EN            BIT(31)                   /*!< CAN2 clock enable */
492 #endif /* GD32E50X_CL and GD32E508 */
493 
494 /* constants definitions */
495 /* define the peripheral clock enable bit position and its register index offset */
496 #define RCU_REGIDX_BIT(regidx, bitpos)      (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos))
497 #define RCU_REG_VAL(periph)                 (REG32(RCU + ((uint32_t)(periph) >> 6)))
498 #define RCU_BIT_POS(val)                    ((uint32_t)(val) & 0x1FU)
499 
500 /* register offset */
501 /* peripherals enable */
502 #define AHBEN_REG_OFFSET                0x14U                     /*!< AHB enable register offset */
503 #define APB1EN_REG_OFFSET               0x1CU                     /*!< APB1 enable register offset */
504 #define APB2EN_REG_OFFSET               0x18U                     /*!< APB2 enable register offset */
505 #define ADD_APB1EN_REG_OFFSET           0xE4U                     /*!< APB1 additional enable register offset */
506 
507 /* peripherals reset */
508 #define AHBRST_REG_OFFSET               0x28U                     /*!< AHB reset register offset */
509 #define APB1RST_REG_OFFSET              0x10U                     /*!< APB1 reset register offset */
510 #define APB2RST_REG_OFFSET              0x0CU                     /*!< APB2 reset register offset */
511 #define ADD_APB1RST_REG_OFFSET          0xE0U                     /*!< APB1 additional reset register offset */
512 #define RSTSCK_REG_OFFSET               0x24U                     /*!< reset source/clock register offset */
513 
514 /* clock control */
515 #define CTL_REG_OFFSET                  0x00U                     /*!< control register offset */
516 #define BDCTL_REG_OFFSET                0x20U                     /*!< backup domain control register offset */
517 #define ADDCTL_REG_OFFSET               0xC0U                     /*!< additional clock control register offset */
518 #define PLLSSCTL_REG_OFFSET             0xD0U                      /*!<PLL clock spread spectrum control register offset */
519 
520 /* clock stabilization and stuck interrupt */
521 #define INT_REG_OFFSET                  0x08U                     /*!< clock interrupt register offset */
522 #define ADDINT_REG_OFFSET               0xCCU                     /*!< additional clock interrupt register offset */
523 
524 /* configuration register */
525 #define CFG0_REG_OFFSET                 0x04U                     /*!< clock configuration register 0 offset */
526 #define CFG1_REG_OFFSET                 0x2CU                     /*!< clock configuration register 1 offset */
527 #define ADDCFG_REG_OFFSET               0xC4U                     /*!< Additional clock configuration register offset */
528 
529 /* peripheral clock enable */
530 typedef enum
531 {
532     /* AHB peripherals */
533     RCU_DMA0      = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 0U),                   /*!< DMA0 clock */
534     RCU_DMA1      = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 1U),                   /*!< DMA1 clock */
535     RCU_CRC       = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 6U),                   /*!< CRC clock */
536     RCU_EXMC      = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 8U),                   /*!< EXMC clock */
537 #if (defined(GD32E50X_HD) || defined(GD32E50X_XD))
538     RCU_SDIO      = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 10U),                  /*!< SDIO clock */
539 #elif defined(GD32E50X_CL) || defined(GD32E508)
540     RCU_USBHS     = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 12U),                  /*!< USBHS clock */
541     RCU_ULPI      = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 13U),                  /*!< ULPI clock */
542     RCU_TMU       = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 30U),                  /*!< TMU clock */
543 #endif /* GD32E50X_HD and GD32E50X_XD */
544 #if (defined(GD32E50X_CL) || defined(GD32EPRT) || defined(GD32E508))
545     RCU_ENET      = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 14U),                  /*!< ENET clock */
546     RCU_ENETTX    = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 15U),                  /*!< ENETTX clock */
547     RCU_ENETRX    = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 16U),                  /*!< ENETRX clock */
548 #endif /* GD32E50X_CL and GD32EPRT and GD32E508 */
549     RCU_SQPI      = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 31U),                  /*!< SQPI clock */
550 
551     /* APB1 peripherals */
552     RCU_TIMER1    = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 0U),                  /*!< TIMER1 clock */
553     RCU_TIMER2    = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 1U),                  /*!< TIMER2 clock */
554     RCU_TIMER3    = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 2U),                  /*!< TIMER3 clock */
555     RCU_TIMER4    = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 3U),                  /*!< TIMER4 clock */
556     RCU_TIMER5    = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 4U),                  /*!< TIMER5 clock */
557     RCU_TIMER6    = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 5U),                  /*!< TIMER6 clock */
558 #ifndef GD32EPRT
559     RCU_TIMER11   = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 6U),                  /*!< TIMER11 clock */
560     RCU_TIMER12   = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 7U),                  /*!< TIMER12 clock */
561     RCU_TIMER13   = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 8U),                  /*!< TIMER13 clock */
562 #endif /* GD32EPRT */
563     RCU_WWDGT     = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 11U),                 /*!< WWDGT clock */
564     RCU_SPI1      = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 14U),                 /*!< SPI1 clock */
565     RCU_SPI2      = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 15U),                 /*!< SPI2 clock */
566     RCU_USART1    = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 17U),                 /*!< USART1 clock */
567     RCU_USART2    = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 18U),                 /*!< USART2 clock */
568     RCU_UART3     = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 19U),                 /*!< UART3 clock */
569     RCU_UART4     = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 20U),                 /*!< UART4 clock */
570     RCU_I2C0      = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 21U),                 /*!< I2C0 clock */
571     RCU_I2C1      = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 22U),                 /*!< I2C1 clock */
572 #if (defined(GD32E50X_HD) || defined(GD32E50X_XD) || defined(GD32EPRT))
573     RCU_USBD      = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 23U),                 /*!< USBD clock */
574 #endif /* GD32E50X_HD and GD32E50X_XD and GD32EPRT */
575     RCU_I2C2      = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 24U),                 /*!< I2C2 clock */
576 #ifndef GD32EPRT
577     RCU_CAN0      = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 25U),                 /*!< CAN0 clock */
578     RCU_CAN1      = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 26U),                 /*!< CAN1 clock */
579 #endif /* GD32EPRT */
580     RCU_BKPI      = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 27U),                 /*!< BKPI clock */
581     RCU_PMU       = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 28U),                 /*!< PMU clock */
582     RCU_DAC       = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 29U),                 /*!< DAC clock */
583     RCU_RTC       = RCU_REGIDX_BIT(BDCTL_REG_OFFSET, 15U),                  /*!< RTC clock */
584     RCU_CTC       = RCU_REGIDX_BIT(ADD_APB1EN_REG_OFFSET, 27U),             /*!< CTC clock */
585 #if defined(GD32E50X_CL) || defined(GD32E508)
586     RCU_CAN2      = RCU_REGIDX_BIT(ADD_APB1EN_REG_OFFSET, 31U),             /*!< CAN2 clock */
587 #endif /* GD32E50X_CL and GD32E508 */
588 
589     /* APB2 peripherals */
590     RCU_AF        = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 0U),                  /*!< alternate function clock */
591     RCU_GPIOA     = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 2U),                  /*!< GPIOA clock */
592     RCU_GPIOB     = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 3U),                  /*!< GPIOB clock */
593     RCU_GPIOC     = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 4U),                  /*!< GPIOC clock */
594     RCU_GPIOD     = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 5U),                  /*!< GPIOD clock */
595     RCU_GPIOE     = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 6U),                  /*!< GPIOE clock */
596     RCU_GPIOF     = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 7U),                  /*!< GPIOF clock */
597     RCU_GPIOG     = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 8U),                  /*!< GPIOG clock */
598     RCU_ADC0      = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 9U),                  /*!< ADC0 clock */
599     RCU_ADC1      = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 10U),                 /*!< ADC1 clock */
600     RCU_TIMER0    = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 11U),                 /*!< TIMER0 clock */
601     RCU_SPI0      = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 12U),                 /*!< SPI0 clock */
602     RCU_TIMER7    = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 13U),                 /*!< TIMER7 clock */
603     RCU_USART0    = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 14U),                 /*!< USART0 clock */
604 #ifndef GD32E50X_CL
605     RCU_ADC2      = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 15U),                 /*!< ADC2 clock */
606 #endif /* GD32E50X_CL */
607 #ifndef GD32EPRT
608     RCU_TIMER8    = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 19U),                 /*!< TIMER8 clock */
609     RCU_TIMER9    = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 20U),                 /*!< TIMER9 clock */
610     RCU_TIMER10   = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 21U),                 /*!< TIMER10 clock */
611 #endif /* GD32EPRT */
612 #ifndef GD32EPRT
613     RCU_SHRTIMER  = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 29U),                 /*!< SHRTIMER clock */
614 #endif /* GD32EPRT */
615     RCU_USART5    = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 28U),                 /*!< USART5 clock */
616 #if defined(GD32E50X_CL) || defined(GD32E508)
617     RCU_CMP       = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 31U),                 /*!< CMP clock */
618 #endif /* GD32E50X_CL and GD32E508 */
619 }rcu_periph_enum;
620 
621 /* peripheral clock enable when sleep mode*/
622 typedef enum
623 {
624     /* AHB peripherals */
625     RCU_SRAM_SLP     = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 2U),                /*!< SRAM clock when sleep mode */
626     RCU_FMC_SLP      = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 4U),                /*!< FMC clock when sleep mode */
627 }rcu_periph_sleep_enum;
628 
629 /* peripherals reset */
630 typedef enum
631 {
632     /* AHB peripherals */
633 #if defined(GD32E50X_CL) || defined(GD32E508)
634     RCU_USBHSRST     = RCU_REGIDX_BIT(AHBRST_REG_OFFSET, 12U),              /*!< USBHS clock reset */
635     RCU_TMURST       = RCU_REGIDX_BIT(AHBRST_REG_OFFSET, 30U),              /*!< TMU clock reset */
636 #endif /* GD32E50X_CL and GD32E508 */
637     #if (defined(GD32E50X_CL) || defined(GD32EPRT) || defined(GD32E508))
638     RCU_ENETRST      = RCU_REGIDX_BIT(AHBRST_REG_OFFSET, 14U),              /*!< ENET clock reset */
639     #endif /* GD32E50X_CL and GD32EPRT and GD32E508 */
640     RCU_SQPIRST      = RCU_REGIDX_BIT(AHBRST_REG_OFFSET, 31U),              /*!< SQPI clock reset */
641 
642     /* APB1 peripherals */
643     RCU_TIMER1RST    = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 0U),              /*!< TIMER1 clock reset */
644     RCU_TIMER2RST    = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 1U),              /*!< TIMER2 clock reset */
645     RCU_TIMER3RST    = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 2U),              /*!< TIMER3 clock reset */
646     RCU_TIMER4RST    = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 3U),              /*!< TIMER4 clock reset */
647     RCU_TIMER5RST    = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 4U),              /*!< TIMER5 clock reset */
648     RCU_TIMER6RST    = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 5U),              /*!< TIMER6 clock reset */
649 #ifndef GD32EPRT
650     RCU_TIMER11RST   = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 6U),              /*!< TIMER11 clock reset */
651     RCU_TIMER12RST   = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 7U),              /*!< TIMER12 clock reset */
652     RCU_TIMER13RST   = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 8U),              /*!< TIMER13 clock reset */
653 #endif /* GD32EPRT */
654     RCU_WWDGTRST     = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 11U),             /*!< WWDGT clock reset */
655     RCU_SPI1RST      = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 14U),             /*!< SPI1 clock reset */
656     RCU_SPI2RST      = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 15U),             /*!< SPI2 clock reset */
657     RCU_USART1RST    = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 17U),             /*!< USART1 clock reset */
658     RCU_USART2RST    = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 18U),             /*!< USART2 clock reset */
659     RCU_UART3RST     = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 19U),             /*!< UART3 clock reset */
660     RCU_UART4RST     = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 20U),             /*!< UART4 clock reset */
661     RCU_I2C0RST      = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 21U),             /*!< I2C0 clock reset */
662     RCU_I2C1RST      = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 22U),             /*!< I2C1 clock reset */
663 #if (defined(GD32E50X_HD) || defined(GD32E50X_XD) || defined(GD32EPRT))
664     RCU_USBDRST      = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 23U),             /*!< USBD clock reset */
665 #endif /* GD32E50X_HD and GD32E50X_XD and GD32EPRT */
666     RCU_I2C2RST      = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 24U),             /*!< I2C2 clock reset */
667 #ifndef GD32EPRT
668     RCU_CAN0RST      = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 25U),             /*!< CAN0 clock reset */
669     RCU_CAN1RST      = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 26U),             /*!< CAN1 clock reset */
670 #endif /* GD32EPRT */
671     RCU_BKPIRST      = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 27U),             /*!< BKPI clock reset */
672     RCU_PMURST       = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 28U),             /*!< PMU clock reset */
673     RCU_DACRST       = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 29U),             /*!< DAC clock reset */
674     RCU_CTCRST       = RCU_REGIDX_BIT(ADD_APB1RST_REG_OFFSET, 27U),         /*!< CTC clock reset */
675 #if defined(GD32E50X_CL) || defined(GD32E508)
676     RCU_CAN2RST      = RCU_REGIDX_BIT(ADD_APB1RST_REG_OFFSET, 31U),         /*!< CAN2 clock reset */
677 #endif /* GD32E50X_CL and GD32E508 */
678 
679 /* APB2 peripherals */
680     RCU_AFRST        = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 0U),              /*!< alternate function clock reset */
681     RCU_GPIOARST     = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 2U),              /*!< GPIOA clock reset */
682     RCU_GPIOBRST     = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 3U),              /*!< GPIOB clock reset */
683     RCU_GPIOCRST     = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 4U),              /*!< GPIOC clock reset */
684     RCU_GPIODRST     = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 5U),              /*!< GPIOD clock reset */
685     RCU_GPIOERST     = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 6U),              /*!< GPIOE clock reset */
686     RCU_GPIOFRST     = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 7U),              /*!< GPIOF clock reset */
687     RCU_GPIOGRST     = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 8U),              /*!< GPIOG clock reset */
688     RCU_ADC0RST      = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 9U),              /*!< ADC0 clock reset */
689     RCU_ADC1RST      = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 10U),             /*!< ADC1 clock reset */
690     RCU_TIMER0RST    = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 11U),             /*!< TIMER0 clock reset */
691     RCU_SPI0RST      = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 12U),             /*!< SPI0 clock reset */
692     RCU_TIMER7RST    = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 13U),             /*!< TIMER7 clock reset */
693     RCU_USART0RST    = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 14U),             /*!< USART0 clock reset */
694 #if (defined(GD32E50X_HD) || defined(GD32E50X_XD) || defined(GD32EPRT))
695     RCU_ADC2RST      = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 15U),             /*!< ADC2 clock reset */
696 #endif /* GD32E50X_HD and GD32E50X_XD and GD32EPRT */
697 #ifndef GD32EPRT
698     RCU_TIMER8RST    = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 19U),             /*!< TIMER8 clock reset */
699     RCU_TIMER9RST    = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 20U),             /*!< TIMER9 clock reset */
700     RCU_TIMER10RST   = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 21U),             /*!< TIMER10 clock reset */
701 #endif /* GD32EPRT */
702     RCU_USART5RST    = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 28U),             /*!< USART5 clock reset */
703 #ifndef GD32EPRT
704     RCU_SHRTIMERRST  = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 29U),             /*!< HPTIEMR clock reset */
705 #endif /* GD32EPRT */
706 #if defined(GD32E50X_CL) || defined(GD32E508)
707     RCU_CMPRST       = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 31U),             /*!< CMP clock reset */
708 #endif /* GD32E50X_CL and GD32E508 */
709 }rcu_periph_reset_enum;
710 
711 /* clock stabilization and peripheral reset flags */
712 typedef enum
713 {
714     /* clock stabilization flags */
715     RCU_FLAG_IRC8MSTB      = RCU_REGIDX_BIT(CTL_REG_OFFSET, 1U),            /*!< IRC8M stabilization flags */
716     RCU_FLAG_HXTALSTB      = RCU_REGIDX_BIT(CTL_REG_OFFSET, 17U),           /*!< HXTAL stabilization flags */
717     RCU_FLAG_PLLSTB        = RCU_REGIDX_BIT(CTL_REG_OFFSET, 25U),           /*!< PLL stabilization flags */
718 #if (defined(GD32E50X_CL) || defined(GD32EPRT) || defined(GD32E508))
719     RCU_FLAG_PLL1STB       = RCU_REGIDX_BIT(CTL_REG_OFFSET, 27U),           /*!< PLL1 stabilization flags */
720     RCU_FLAG_PLL2STB       = RCU_REGIDX_BIT(CTL_REG_OFFSET, 29U),           /*!< PLL2 stabilization flags */
721 #endif /* GD32E50X_CL and GD32EPRT and GD32E508 */
722 #if defined(GD32E50X_CL) || defined(GD32E508)
723     RCU_FLAG_PLLUSBSTB     = RCU_REGIDX_BIT(ADDCTL_REG_OFFSET, 15U),        /*!< PLLUSB stabilization flags */
724 #endif /* GD32E50X_CL and GD32E508 */
725     RCU_FLAG_LXTALSTB      = RCU_REGIDX_BIT(BDCTL_REG_OFFSET, 1U),          /*!< LXTAL stabilization flags */
726     RCU_FLAG_IRC40KSTB     = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 1U),         /*!< IRC40K stabilization flags */
727     RCU_FLAG_IRC48MSTB     = RCU_REGIDX_BIT(ADDCTL_REG_OFFSET, 17U),        /*!< IRC48M stabilization flags */
728     /* reset source flags */
729     RCU_FLAG_BORRST        = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 25U),        /*!< BOR reset flag */
730     RCU_FLAG_EPRST         = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 26U),        /*!< external PIN reset flags */
731     RCU_FLAG_PORRST        = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 27U),        /*!< power reset flags */
732     RCU_FLAG_SWRST         = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 28U),        /*!< software reset flags */
733     RCU_FLAG_FWDGTRST      = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 29U),        /*!< FWDGT reset flags */
734     RCU_FLAG_WWDGTRST      = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 30U),        /*!< WWDGT reset flags */
735     RCU_FLAG_LPRST         = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 31U),        /*!< low-power reset flags */
736 
737 }rcu_flag_enum;
738 
739 /* clock stabilization and ckm interrupt flags */
740 typedef enum
741 {
742     RCU_INT_FLAG_IRC40KSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 0U),            /*!< IRC40K stabilization interrupt flag */
743     RCU_INT_FLAG_LXTALSTB  = RCU_REGIDX_BIT(INT_REG_OFFSET, 1U),            /*!< LXTAL stabilization interrupt flag */
744     RCU_INT_FLAG_IRC8MSTB  = RCU_REGIDX_BIT(INT_REG_OFFSET, 2U),            /*!< IRC8M stabilization interrupt flag */
745     RCU_INT_FLAG_HXTALSTB  = RCU_REGIDX_BIT(INT_REG_OFFSET, 3U),            /*!< HXTAL stabilization interrupt flag */
746     RCU_INT_FLAG_PLLSTB    = RCU_REGIDX_BIT(INT_REG_OFFSET, 4U),            /*!< PLL stabilization interrupt flag */
747 #if (defined(GD32E50X_CL) || defined(GD32EPRT) || defined(GD32E508))
748     RCU_INT_FLAG_PLL1STB   = RCU_REGIDX_BIT(INT_REG_OFFSET, 5U),            /*!< PLL1 stabilization interrupt flag */
749     RCU_INT_FLAG_PLL2STB   = RCU_REGIDX_BIT(INT_REG_OFFSET, 6U),            /*!< PLL2 stabilization interrupt flag */
750 #endif /* GD32E50X_CL and GD32EPRT and GD32E508 */
751 #if defined(GD32E50X_CL) || defined(GD32E508)
752     RCU_INT_FLAG_PLLUSBSTB = RCU_REGIDX_BIT(ADDINT_REG_OFFSET, 7U),         /*!< PLLUSB stabilization interrupt flag */
753 #endif /* GD32E50X_CL and GD32E508 */
754     RCU_INT_FLAG_CKM       = RCU_REGIDX_BIT(INT_REG_OFFSET, 7U),            /*!< HXTAL clock stuck interrupt flag */
755     RCU_INT_FLAG_IRC48MSTB = RCU_REGIDX_BIT(ADDINT_REG_OFFSET, 6U),         /*!< IRC48M stabilization interrupt flag */
756 
757 }rcu_int_flag_enum;
758 
759 /* clock stabilization and stuck interrupt flags clear */
760 typedef enum
761 {
762     RCU_INT_FLAG_IRC40KSTB_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 16U),       /*!< IRC40K stabilization interrupt flags clear */
763     RCU_INT_FLAG_LXTALSTB_CLR  = RCU_REGIDX_BIT(INT_REG_OFFSET, 17U),       /*!< LXTAL stabilization interrupt flags clear */
764     RCU_INT_FLAG_IRC8MSTB_CLR  = RCU_REGIDX_BIT(INT_REG_OFFSET, 18U),       /*!< IRC8M stabilization interrupt flags clear */
765     RCU_INT_FLAG_HXTALSTB_CLR  = RCU_REGIDX_BIT(INT_REG_OFFSET, 19U),       /*!< HXTAL stabilization interrupt flags clear */
766     RCU_INT_FLAG_PLLSTB_CLR    = RCU_REGIDX_BIT(INT_REG_OFFSET, 20U),       /*!< PLL stabilization interrupt flags clear */
767 #if (defined(GD32E50X_CL) || defined(GD32EPRT) || defined(GD32E508))
768     RCU_INT_FLAG_PLL1STB_CLR   = RCU_REGIDX_BIT(INT_REG_OFFSET, 21U),       /*!< PLL1 stabilization interrupt flags clear */
769     RCU_INT_FLAG_PLL2STB_CLR   = RCU_REGIDX_BIT(INT_REG_OFFSET, 22U),       /*!< PLL2 stabilization interrupt flags clear */
770 #endif /* GD32E50X_CL and GD32EPRT and GD32E508 */
771 #if  defined(GD32E50X_CL) || defined(GD32E508)
772     RCU_INT_FLAG_PLLUSBSTB_CLR = RCU_REGIDX_BIT(ADDINT_REG_OFFSET, 23U),    /*!< PLLUSB stabilization interrupt flags clear */
773 #endif /* GD32E50X_CL and GD32E508 */
774     RCU_INT_FLAG_CKM_CLR       = RCU_REGIDX_BIT(INT_REG_OFFSET, 23U),       /*!< CKM interrupt flags clear */
775     RCU_INT_FLAG_IRC48MSTB_CLR = RCU_REGIDX_BIT(ADDINT_REG_OFFSET, 22U),    /*!< internal 48 MHz RC oscillator stabilization interrupt clear */
776 }rcu_int_flag_clear_enum;
777 
778 /* clock stabilization interrupt enable or disable */
779 typedef enum
780 {
781     RCU_INT_IRC40KSTB       = RCU_REGIDX_BIT(INT_REG_OFFSET, 8U),           /*!< IRC40K stabilization interrupt */
782     RCU_INT_LXTALSTB        = RCU_REGIDX_BIT(INT_REG_OFFSET, 9U),           /*!< LXTAL stabilization interrupt */
783     RCU_INT_IRC8MSTB        = RCU_REGIDX_BIT(INT_REG_OFFSET, 10U),          /*!< IRC8M stabilization interrupt */
784     RCU_INT_HXTALSTB        = RCU_REGIDX_BIT(INT_REG_OFFSET, 11U),          /*!< HXTAL stabilization interrupt */
785     RCU_INT_PLLSTB          = RCU_REGIDX_BIT(INT_REG_OFFSET, 12U),          /*!< PLL stabilization interrupt */
786 #if (defined(GD32E50X_CL) || defined(GD32EPRT) || defined(GD32E508))
787     RCU_INT_PLL1STB         = RCU_REGIDX_BIT(INT_REG_OFFSET, 13U),          /*!< PLL1 stabilization interrupt */
788     RCU_INT_PLL2STB         = RCU_REGIDX_BIT(INT_REG_OFFSET, 14U),          /*!< PLL2 stabilization interrupt */
789 #endif /* GD32E50X_CL and GD32EPRT and GD32E508 */
790 #if (defined(GD32E50X_CL) || defined(GD32E508))
791     RCU_INT_PLLUSBSTB       = RCU_REGIDX_BIT(ADDINT_REG_OFFSET, 15U),       /*!< PLLUSB stabilization interrupt */
792 #endif /* GD32E50X_CL and GD32E508 */
793     RCU_INT_IRC48MSTB       = RCU_REGIDX_BIT(ADDINT_REG_OFFSET, 14U),       /*!< internal 48 MHz RC oscillator stabilization interrupt */
794 }rcu_int_enum;
795 
796 /* oscillator types */
797 typedef enum
798 {
799     RCU_HXTAL      = RCU_REGIDX_BIT(CTL_REG_OFFSET, 16U),                   /*!< HXTAL */
800     RCU_LXTAL      = RCU_REGIDX_BIT(BDCTL_REG_OFFSET, 0U),                  /*!< LXTAL */
801     RCU_IRC8M      = RCU_REGIDX_BIT(CTL_REG_OFFSET, 0U),                    /*!< IRC8M */
802     RCU_IRC48M     = RCU_REGIDX_BIT(ADDCTL_REG_OFFSET, 16U),                /*!< IRC48M */
803     RCU_IRC40K     = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 0U),                 /*!< IRC40K */
804     RCU_PLL_CK     = RCU_REGIDX_BIT(CTL_REG_OFFSET, 24U),                   /*!< PLL */
805 #if (defined(GD32E50X_CL) || defined(GD32EPRT) || defined(GD32E508))
806     RCU_PLL1_CK    = RCU_REGIDX_BIT(CTL_REG_OFFSET, 26U),                   /*!< PLL1 */
807     RCU_PLL2_CK    = RCU_REGIDX_BIT(CTL_REG_OFFSET, 28U),                   /*!< PLL2 */
808 #endif /* GD32E50X_CL and GD32EPRT and GD32E508*/
809 #if defined(GD32E50X_CL) || defined(GD32E508)
810     RCU_PLLUSB_CK  = RCU_REGIDX_BIT(ADDCTL_REG_OFFSET, 14U),                /*!< PLLUSB */
811 #endif /* GD32E50X_CL and GD32E508 */
812 }rcu_osci_type_enum;
813 
814 /* rcu clock frequency */
815 typedef enum
816 {
817     CK_SYS      = 0,                                                        /*!< system clock */
818     CK_AHB,                                                                 /*!< AHB clock */
819     CK_APB1,                                                                /*!< APB1 clock */
820     CK_APB2,                                                                /*!< APB2 clock */
821     CK_USART                                                                /*!< USART5 clock */
822 }rcu_clock_freq_enum;
823 
824 /* RCU_CFG0 register bit define */
825 /* system clock source select */
826 #define CFG0_SCS(regval)                (BITS(0,1) & ((uint32_t)(regval) << 0))
827 #define RCU_CKSYSSRC_IRC8M              CFG0_SCS(0)                         /*!< system clock source select IRC8M */
828 #define RCU_CKSYSSRC_HXTAL              CFG0_SCS(1)                         /*!< system clock source select HXTAL */
829 #define RCU_CKSYSSRC_PLL                CFG0_SCS(2)                         /*!< system clock source select PLL */
830 
831 /* system clock source select status */
832 #define CFG0_SCSS(regval)               (BITS(2,3) & ((uint32_t)(regval) << 2))
833 #define RCU_SCSS_IRC8M                  CFG0_SCSS(0)                        /*!< system clock source select IRC8M */
834 #define RCU_SCSS_HXTAL                  CFG0_SCSS(1)                        /*!< system clock source select HXTAL */
835 #define RCU_SCSS_PLL                    CFG0_SCSS(2)                        /*!< system clock source select PLL */
836 
837 /* AHB prescaler selection */
838 #define CFG0_AHBPSC(regval)             (BITS(4,7) & ((uint32_t)(regval) << 4))
839 #define RCU_AHB_CKSYS_DIV1              CFG0_AHBPSC(0)                      /*!< AHB prescaler select CK_SYS */
840 #define RCU_AHB_CKSYS_DIV2              CFG0_AHBPSC(8)                      /*!< AHB prescaler select CK_SYS/2 */
841 #define RCU_AHB_CKSYS_DIV4              CFG0_AHBPSC(9)                      /*!< AHB prescaler select CK_SYS/4 */
842 #define RCU_AHB_CKSYS_DIV8              CFG0_AHBPSC(10)                     /*!< AHB prescaler select CK_SYS/8 */
843 #define RCU_AHB_CKSYS_DIV16             CFG0_AHBPSC(11)                     /*!< AHB prescaler select CK_SYS/16 */
844 #define RCU_AHB_CKSYS_DIV64             CFG0_AHBPSC(12)                     /*!< AHB prescaler select CK_SYS/64 */
845 #define RCU_AHB_CKSYS_DIV128            CFG0_AHBPSC(13)                     /*!< AHB prescaler select CK_SYS/128 */
846 #define RCU_AHB_CKSYS_DIV256            CFG0_AHBPSC(14)                     /*!< AHB prescaler select CK_SYS/256 */
847 #define RCU_AHB_CKSYS_DIV512            CFG0_AHBPSC(15)                     /*!< AHB prescaler select CK_SYS/512 */
848 
849 /* APB1 prescaler selection */
850 #define CFG0_APB1PSC(regval)            (BITS(8,10) & ((uint32_t)(regval) << 8))
851 #define RCU_APB1_CKAHB_DIV1             CFG0_APB1PSC(0)                     /*!< APB1 prescaler select CK_AHB */
852 #define RCU_APB1_CKAHB_DIV2             CFG0_APB1PSC(4)                     /*!< APB1 prescaler select CK_AHB/2 */
853 #define RCU_APB1_CKAHB_DIV4             CFG0_APB1PSC(5)                     /*!< APB1 prescaler select CK_AHB/4 */
854 #define RCU_APB1_CKAHB_DIV8             CFG0_APB1PSC(6)                     /*!< APB1 prescaler select CK_AHB/8 */
855 #define RCU_APB1_CKAHB_DIV16            CFG0_APB1PSC(7)                     /*!< APB1 prescaler select CK_AHB/16 */
856 
857 /* APB2 prescaler selection */
858 #define CFG0_APB2PSC(regval)            (BITS(11,13) & ((uint32_t)(regval) << 11))
859 #define RCU_APB2_CKAHB_DIV1             CFG0_APB2PSC(0)                     /*!< APB2 prescaler select CK_AHB */
860 #define RCU_APB2_CKAHB_DIV2             CFG0_APB2PSC(4)                     /*!< APB2 prescaler select CK_AHB/2 */
861 #define RCU_APB2_CKAHB_DIV4             CFG0_APB2PSC(5)                     /*!< APB2 prescaler select CK_AHB/4 */
862 #define RCU_APB2_CKAHB_DIV8             CFG0_APB2PSC(6)                     /*!< APB2 prescaler select CK_AHB/8 */
863 #define RCU_APB2_CKAHB_DIV16            CFG0_APB2PSC(7)                     /*!< APB2 prescaler select CK_AHB/16 */
864 
865 /* ADC prescaler select */
866 #define RCU_CKADC_CKAPB2_DIV2           ((uint32_t)0x00000000U)             /*!< ADC prescaler select CK_APB2/2 */
867 #define RCU_CKADC_CKAPB2_DIV4           ((uint32_t)0x00000001U)             /*!< ADC prescaler select CK_APB2/4 */
868 #define RCU_CKADC_CKAPB2_DIV6           ((uint32_t)0x00000002U)             /*!< ADC prescaler select CK_APB2/6 */
869 #define RCU_CKADC_CKAPB2_DIV8           ((uint32_t)0x00000003U)             /*!< ADC prescaler select CK_APB2/8 */
870 #define RCU_CKADC_CKAPB2_DIV12          ((uint32_t)0x00000005U)             /*!< ADC prescaler select CK_APB2/12 */
871 #define RCU_CKADC_CKAPB2_DIV16          ((uint32_t)0x00000007U)             /*!< ADC prescaler select CK_APB2/16 */
872 #define RCU_CKADC_CKAHB_DIV5            ((uint32_t)0x00000008U)             /*!< ADC prescaler select CK_AHB/5 */
873 #define RCU_CKADC_CKAHB_DIV6            ((uint32_t)0x00000009U)             /*!< ADC prescaler select CK_AHB/6 */
874 #define RCU_CKADC_CKAHB_DIV10           ((uint32_t)0x0000000AU)             /*!< ADC prescaler select CK_AHB/10 */
875 #define RCU_CKADC_CKAHB_DIV20           ((uint32_t)0x0000000BU)             /*!< ADC prescaler select CK_AHB/20 */
876 
877 /* PLL clock source selection */
878 #define RCU_PLLSRC_IRC8M_DIV2           ((uint32_t)0x00000000U)             /*!< IRC8M/2 clock selected as source clock of PLL */
879 #define RCU_PLLSRC_HXTAL_IRC48M         RCU_CFG0_PLLSEL                     /*!< HXTAL or IRC48M selected as source clock of PLL */
880 
881 /* PLL clock multiplication factor */
882 #define PLLMF_4                         RCU_CFG0_PLLMF_4                    /*!< bit 4 of PLLMF */
883 #define PLLMF_5                         RCU_CFG0_PLLMF_5                    /*!< bit 5 of PLLMF */
884 #define PLLMF_4_5                       (PLLMF_4 | PLLMF_5)                 /*!< bit 4 and 5 of PLLMF */
885 
886 #define CFG0_PLLMF(regval)              (BITS(18,21) & ((uint32_t)(regval) << 18))
887 #define RCU_PLL_MUL2                    CFG0_PLLMF(0)                       /*!< PLL source clock multiply by 2 */
888 #define RCU_PLL_MUL3                    CFG0_PLLMF(1)                       /*!< PLL source clock multiply by 3 */
889 #define RCU_PLL_MUL4                    CFG0_PLLMF(2)                       /*!< PLL source clock multiply by 4 */
890 #define RCU_PLL_MUL5                    CFG0_PLLMF(3)                       /*!< PLL source clock multiply by 5 */
891 #define RCU_PLL_MUL6                    CFG0_PLLMF(4)                       /*!< PLL source clock multiply by 6 */
892 #define RCU_PLL_MUL7                    CFG0_PLLMF(5)                       /*!< PLL source clock multiply by 7 */
893 #define RCU_PLL_MUL8                    CFG0_PLLMF(6)                       /*!< PLL source clock multiply by 8 */
894 #define RCU_PLL_MUL9                    CFG0_PLLMF(7)                       /*!< PLL source clock multiply by 9 */
895 #define RCU_PLL_MUL10                   CFG0_PLLMF(8)                       /*!< PLL source clock multiply by 10 */
896 #define RCU_PLL_MUL11                   CFG0_PLLMF(9)                       /*!< PLL source clock multiply by 11 */
897 #define RCU_PLL_MUL12                   CFG0_PLLMF(10)                      /*!< PLL source clock multiply by 12 */
898 #define RCU_PLL_MUL13                   CFG0_PLLMF(11)                      /*!< PLL source clock multiply by 13 */
899 #define RCU_PLL_MUL14                   CFG0_PLLMF(12)                      /*!< PLL source clock multiply by 14 */
900 #if defined(GD32E50X_HD) || defined(GD32E50X_XD)
901 #define RCU_PLL_MUL15                   CFG0_PLLMF(13)                      /*!< PLL source clock multiply by 15 */
902 #elif defined(GD32E50X_CL) || defined(GD32EPRT) || defined(GD32E508)
903 #define RCU_PLL_MUL6_5                  CFG0_PLLMF(13)                      /*!< PLL source clock multiply by 6.5 */
904 #endif /* GD32E50X_HD and GD32E50X_XD */
905 #define RCU_PLL_MUL16                   CFG0_PLLMF(14)                      /*!< PLL source clock multiply by 16 */
906 #define RCU_PLL_MUL17                   (PLLMF_4 | CFG0_PLLMF(0))           /*!< PLL source clock multiply by 17 */
907 #define RCU_PLL_MUL18                   (PLLMF_4 | CFG0_PLLMF(1))           /*!< PLL source clock multiply by 18 */
908 #define RCU_PLL_MUL19                   (PLLMF_4 | CFG0_PLLMF(2))           /*!< PLL source clock multiply by 19 */
909 #define RCU_PLL_MUL20                   (PLLMF_4 | CFG0_PLLMF(3))           /*!< PLL source clock multiply by 20 */
910 #define RCU_PLL_MUL21                   (PLLMF_4 | CFG0_PLLMF(4))           /*!< PLL source clock multiply by 21 */
911 #define RCU_PLL_MUL22                   (PLLMF_4 | CFG0_PLLMF(5))           /*!< PLL source clock multiply by 22 */
912 #define RCU_PLL_MUL23                   (PLLMF_4 | CFG0_PLLMF(6))           /*!< PLL source clock multiply by 23 */
913 #define RCU_PLL_MUL24                   (PLLMF_4 | CFG0_PLLMF(7))           /*!< PLL source clock multiply by 24 */
914 #define RCU_PLL_MUL25                   (PLLMF_4 | CFG0_PLLMF(8))           /*!< PLL source clock multiply by 25 */
915 #define RCU_PLL_MUL26                   (PLLMF_4 | CFG0_PLLMF(9))           /*!< PLL source clock multiply by 26 */
916 #define RCU_PLL_MUL27                   (PLLMF_4 | CFG0_PLLMF(10))          /*!< PLL source clock multiply by 27 */
917 #define RCU_PLL_MUL28                   (PLLMF_4 | CFG0_PLLMF(11))          /*!< PLL source clock multiply by 28 */
918 #define RCU_PLL_MUL29                   (PLLMF_4 | CFG0_PLLMF(12))          /*!< PLL source clock multiply by 29 */
919 #define RCU_PLL_MUL30                   (PLLMF_4 | CFG0_PLLMF(13))          /*!< PLL source clock multiply by 30 */
920 #define RCU_PLL_MUL31                   (PLLMF_4 | CFG0_PLLMF(14))          /*!< PLL source clock multiply by 31 */
921 #define RCU_PLL_MUL32                   (PLLMF_4 | CFG0_PLLMF(15))          /*!< PLL source clock multiply by 32 */
922 #define RCU_PLL_MUL33                   (PLLMF_5 | CFG0_PLLMF(0))           /*!< PLL source clock multiply by 33 */
923 #define RCU_PLL_MUL34                   (PLLMF_5 | CFG0_PLLMF(1))           /*!< PLL source clock multiply by 34 */
924 #define RCU_PLL_MUL35                   (PLLMF_5 | CFG0_PLLMF(2))           /*!< PLL source clock multiply by 35 */
925 #define RCU_PLL_MUL36                   (PLLMF_5 | CFG0_PLLMF(3))           /*!< PLL source clock multiply by 36 */
926 #define RCU_PLL_MUL37                   (PLLMF_5 | CFG0_PLLMF(4))           /*!< PLL source clock multiply by 37 */
927 #define RCU_PLL_MUL38                   (PLLMF_5 | CFG0_PLLMF(5))           /*!< PLL source clock multiply by 38 */
928 #define RCU_PLL_MUL39                   (PLLMF_5 | CFG0_PLLMF(6))           /*!< PLL source clock multiply by 39 */
929 #define RCU_PLL_MUL40                   (PLLMF_5 | CFG0_PLLMF(7))           /*!< PLL source clock multiply by 40 */
930 #define RCU_PLL_MUL41                   (PLLMF_5 | CFG0_PLLMF(8))           /*!< PLL source clock multiply by 41 */
931 #define RCU_PLL_MUL42                   (PLLMF_5 | CFG0_PLLMF(9))           /*!< PLL source clock multiply by 42 */
932 #define RCU_PLL_MUL43                   (PLLMF_5 | CFG0_PLLMF(10))          /*!< PLL source clock multiply by 43 */
933 #define RCU_PLL_MUL44                   (PLLMF_5 | CFG0_PLLMF(11))          /*!< PLL source clock multiply by 44 */
934 #define RCU_PLL_MUL45                   (PLLMF_5 | CFG0_PLLMF(12))          /*!< PLL source clock multiply by 45 */
935 #define RCU_PLL_MUL46                   (PLLMF_5 | CFG0_PLLMF(13))          /*!< PLL source clock multiply by 46 */
936 #define RCU_PLL_MUL47                   (PLLMF_5 | CFG0_PLLMF(14))          /*!< PLL source clock multiply by 47 */
937 #define RCU_PLL_MUL48                   (PLLMF_5 | CFG0_PLLMF(15))          /*!< PLL source clock multiply by 48 */
938 #define RCU_PLL_MUL49                   (PLLMF_4_5 | CFG0_PLLMF(0))         /*!< PLL source clock multiply by 49 */
939 #define RCU_PLL_MUL50                   (PLLMF_4_5 | CFG0_PLLMF(1))         /*!< PLL source clock multiply by 50 */
940 #define RCU_PLL_MUL51                   (PLLMF_4_5 | CFG0_PLLMF(2))         /*!< PLL source clock multiply by 51 */
941 #define RCU_PLL_MUL52                   (PLLMF_4_5 | CFG0_PLLMF(3))         /*!< PLL source clock multiply by 52 */
942 #define RCU_PLL_MUL53                   (PLLMF_4_5 | CFG0_PLLMF(4))         /*!< PLL source clock multiply by 53 */
943 #define RCU_PLL_MUL54                   (PLLMF_4_5 | CFG0_PLLMF(5))         /*!< PLL source clock multiply by 54 */
944 #define RCU_PLL_MUL55                   (PLLMF_4_5 | CFG0_PLLMF(6))         /*!< PLL source clock multiply by 55 */
945 #define RCU_PLL_MUL56                   (PLLMF_4_5 | CFG0_PLLMF(7))         /*!< PLL source clock multiply by 56 */
946 #define RCU_PLL_MUL57                   (PLLMF_4_5 | CFG0_PLLMF(8))         /*!< PLL source clock multiply by 57 */
947 #define RCU_PLL_MUL58                   (PLLMF_4_5 | CFG0_PLLMF(9))         /*!< PLL source clock multiply by 58 */
948 #define RCU_PLL_MUL59                   (PLLMF_4_5 | CFG0_PLLMF(10))        /*!< PLL source clock multiply by 59 */
949 #define RCU_PLL_MUL60                   (PLLMF_4_5 | CFG0_PLLMF(11))        /*!< PLL source clock multiply by 60 */
950 #define RCU_PLL_MUL61                   (PLLMF_4_5 | CFG0_PLLMF(12))        /*!< PLL source clock multiply by 61 */
951 #define RCU_PLL_MUL62                   (PLLMF_4_5 | CFG0_PLLMF(13))        /*!< PLL source clock multiply by 62 */
952 #define RCU_PLL_MUL63                   (PLLMF_4_5 | CFG0_PLLMF(14))        /*!< PLL source clock multiply by 63 */
953 #define RCU_PLL_MUL64                   (PLLMF_4_5 | CFG0_PLLMF(15))        /*!< PLL source clock multiply by 64 */
954 
955 #if (defined(GD32E50X_HD) || defined(GD32E50X_XD) || defined(GD32EPRT))
956 #define USBPSC_2 RCU_CFG0_USBDPSC_2
957 #elif defined(GD32E50X_CL) || defined(GD32E508)
958 #define USBPSC_2 RCU_CFG0_USBHSPSC_2
959 #endif /* GD32E50X_HD and GD32E50X_XD and GD32EPRT */
960 
961 /* USBD/USBHS prescaler select */
962 #define CFG0_USBPSC(regval)             (BITS(22,23) & ((uint32_t)(regval) << 22))
963 #define RCU_CKUSB_CKPLL_DIV1_5          CFG0_USBPSC(0)                      /*!< USBD/USBHS prescaler select CK_PLL/1.5 */
964 #define RCU_CKUSB_CKPLL_DIV1            CFG0_USBPSC(1)                      /*!< USBD/USBHS prescaler select CK_PLL/1 */
965 #define RCU_CKUSB_CKPLL_DIV2_5          CFG0_USBPSC(2)                      /*!< USBD/USBHS prescaler select CK_PLL/2.5 */
966 #define RCU_CKUSB_CKPLL_DIV2            CFG0_USBPSC(3)                      /*!< USBD/USBHS prescaler select CK_PLL/2 */
967 #define RCU_CKUSB_CKPLL_DIV3            (USBPSC_2 |CFG0_USBPSC(0))          /*!< USBD/USBHS prescaler select CK_PLL/3 */
968 #define RCU_CKUSB_CKPLL_DIV3_5          (USBPSC_2 |CFG0_USBPSC(1))          /*!< USBD/USBHS prescaler select CK_PLL/3.5 */
969 #define RCU_CKUSB_CKPLL_DIV4            (USBPSC_2 |CFG0_USBPSC(2))          /*!< USBD/USBHS prescaler select CK_PLL/4 */
970 
971 /* CKOUT0 Clock source selection */
972 #define CFG0_CKOUT0SEL(regval)          (BITS(24,27) & ((uint32_t)(regval) << 24))
973 #define RCU_CKOUT0SRC_NONE              CFG0_CKOUT0SEL(0)                   /*!< no clock selected */
974 #define RCU_CKOUT0SRC_CKSYS             CFG0_CKOUT0SEL(4)                   /*!< system clock selected */
975 #define RCU_CKOUT0SRC_IRC8M             CFG0_CKOUT0SEL(5)                   /*!< internal 8M RC oscillator clock selected */
976 #define RCU_CKOUT0SRC_HXTAL             CFG0_CKOUT0SEL(6)                   /*!< high speed crystal oscillator clock (HXTAL) selected */
977 #define RCU_CKOUT0SRC_CKPLL_DIV2        CFG0_CKOUT0SEL(7)                   /*!< CK_PLL/2 clock selected */
978 #if (defined(GD32E50X_CL) || defined(GD32EPRT) || defined(GD32E508))
979 #define RCU_CKOUT0SRC_CKPLL1            CFG0_CKOUT0SEL(8)                   /*!< CK_PLL1 clock selected */
980 #define RCU_CKOUT0SRC_CKPLL2_DIV2       CFG0_CKOUT0SEL(9)                   /*!< CK_PLL2/2 clock selected */
981 #define RCU_CKOUT0SRC_EXT1              CFG0_CKOUT0SEL(10)                  /*!< EXT1 selected, to provide the external clock for ENET */
982 #define RCU_CKOUT0SRC_CKPLL2            CFG0_CKOUT0SEL(11)                  /*!< CK_PLL2 clock selected */
983 #define RCU_CKOUT0SRC_CKIRC48M          CFG0_CKOUT0SEL(12)                  /*!< CK_IRC48M clock selected */
984 #define RCU_CKOUT0SRC_CKIRC48M_DIV8     CFG0_CKOUT0SEL(13)                  /*!< CK_IRC48M/8 clock selected */
985 #endif /* GD32E50X_CL and GD32EPRT and GD32E508*/
986 #if defined(GD32E50X_CL) || defined(GD32E508)
987 #define RCU_CKOUT0SRC_CKPLLUSB_DIV32    CFG0_CKOUT0SEL(14)                  /*!< CK_PLLUSB/32 clock selected */
988 #endif /* GD32E50X_CL and GD32E508 */
989 
990 /* LXTAL drive capability */
991 #define BDCTL_LXTALDRI(regval)          (BITS(3,4) & ((uint32_t)(regval) << 3))
992 #define RCU_LXTAL_LOWDRI                BDCTL_LXTALDRI(0)                   /*!< lower driving capability */
993 #define RCU_LXTAL_MED_LOWDRI            BDCTL_LXTALDRI(1)                   /*!< medium low driving capability */
994 #define RCU_LXTAL_MED_HIGHDRI           BDCTL_LXTALDRI(2)                   /*!< medium high driving capability */
995 #define RCU_LXTAL_HIGHDRI               BDCTL_LXTALDRI(3)                   /*!< higher driving capability */
996 
997 /* RTC clock entry selection */
998 #define BDCTL_RTCSRC(regval)            (BITS(8,9) & ((uint32_t)(regval) << 8))
999 #define RCU_RTCSRC_NONE                 BDCTL_RTCSRC(0)                     /*!< no clock selected */
1000 #define RCU_RTCSRC_LXTAL                BDCTL_RTCSRC(1)                     /*!< RTC source clock select LXTAL  */
1001 #define RCU_RTCSRC_IRC40K               BDCTL_RTCSRC(2)                     /*!< RTC source clock select IRC40K */
1002 #define RCU_RTCSRC_HXTAL_DIV_128        BDCTL_RTCSRC(3)                     /*!< RTC source clock select HXTAL/128 */
1003 
1004 /* PREDV0 division factor */
1005 #define CFG1_PREDV0(regval)             (BITS(0,3) & ((uint32_t)(regval) << 0))
1006 #define RCU_PREDV0_DIV1                CFG1_PREDV0(0)                       /*!< PREDV0 input source clock not divided */
1007 #define RCU_PREDV0_DIV2                CFG1_PREDV0(1)                       /*!< PREDV0 input source clock divided by 2 */
1008 #define RCU_PREDV0_DIV3                CFG1_PREDV0(2)                       /*!< PREDV0 input source clock divided by 3 */
1009 #define RCU_PREDV0_DIV4                CFG1_PREDV0(3)                       /*!< PREDV0 input source clock divided by 4 */
1010 #define RCU_PREDV0_DIV5                CFG1_PREDV0(4)                       /*!< PREDV0 input source clock divided by 5 */
1011 #define RCU_PREDV0_DIV6                CFG1_PREDV0(5)                       /*!< PREDV0 input source clock divided by 6 */
1012 #define RCU_PREDV0_DIV7                CFG1_PREDV0(6)                       /*!< PREDV0 input source clock divided by 7 */
1013 #define RCU_PREDV0_DIV8                CFG1_PREDV0(7)                       /*!< PREDV0 input source clock divided by 8 */
1014 #define RCU_PREDV0_DIV9                CFG1_PREDV0(8)                       /*!< PREDV0 input source clock divided by 9 */
1015 #define RCU_PREDV0_DIV10               CFG1_PREDV0(9)                       /*!< PREDV0 input source clock divided by 10 */
1016 #define RCU_PREDV0_DIV11               CFG1_PREDV0(10)                      /*!< PREDV0 input source clock divided by 11 */
1017 #define RCU_PREDV0_DIV12               CFG1_PREDV0(11)                      /*!< PREDV0 input source clock divided by 12 */
1018 #define RCU_PREDV0_DIV13               CFG1_PREDV0(12)                      /*!< PREDV0 input source clock divided by 13 */
1019 #define RCU_PREDV0_DIV14               CFG1_PREDV0(13)                      /*!< PREDV0 input source clock divided by 14 */
1020 #define RCU_PREDV0_DIV15               CFG1_PREDV0(14)                      /*!< PREDV0 input source clock divided by 15 */
1021 #define RCU_PREDV0_DIV16               CFG1_PREDV0(15)                      /*!< PREDV0 input source clock divided by 16 */
1022 
1023 /* PREDV1 division factor */
1024 #define CFG1_PREDV1(regval)             (BITS(4,7) & ((uint32_t)(regval) << 4))
1025 #define RCU_PREDV1_DIV1                CFG1_PREDV1(0)                       /*!< PREDV1 input source clock not divided */
1026 #define RCU_PREDV1_DIV2                CFG1_PREDV1(1)                       /*!< PREDV1 input source clock divided by 2 */
1027 #define RCU_PREDV1_DIV3                CFG1_PREDV1(2)                       /*!< PREDV1 input source clock divided by 3 */
1028 #define RCU_PREDV1_DIV4                CFG1_PREDV1(3)                       /*!< PREDV1 input source clock divided by 4 */
1029 #define RCU_PREDV1_DIV5                CFG1_PREDV1(4)                       /*!< PREDV1 input source clock divided by 5 */
1030 #define RCU_PREDV1_DIV6                CFG1_PREDV1(5)                       /*!< PREDV1 input source clock divided by 6 */
1031 #define RCU_PREDV1_DIV7                CFG1_PREDV1(6)                       /*!< PREDV1 input source clock divided by 7 */
1032 #define RCU_PREDV1_DIV8                CFG1_PREDV1(7)                       /*!< PREDV1 input source clock divided by 8 */
1033 #define RCU_PREDV1_DIV9                CFG1_PREDV1(8)                       /*!< PREDV1 input source clock divided by 9 */
1034 #define RCU_PREDV1_DIV10               CFG1_PREDV1(9)                       /*!< PREDV1 input source clock divided by 10 */
1035 #define RCU_PREDV1_DIV11               CFG1_PREDV1(10)                      /*!< PREDV1 input source clock divided by 11 */
1036 #define RCU_PREDV1_DIV12               CFG1_PREDV1(11)                      /*!< PREDV1 input source clock divided by 12 */
1037 #define RCU_PREDV1_DIV13               CFG1_PREDV1(12)                      /*!< PREDV1 input source clock divided by 13 */
1038 #define RCU_PREDV1_DIV14               CFG1_PREDV1(13)                      /*!< PREDV1 input source clock divided by 14 */
1039 #define RCU_PREDV1_DIV15               CFG1_PREDV1(14)                      /*!< PREDV1 input source clock divided by 15 */
1040 #define RCU_PREDV1_DIV16               CFG1_PREDV1(15)                      /*!< PREDV1 input source clock divided by 16 */
1041 
1042 /* PLL1 clock multiplication factor */
1043 #define CFG1_PLL1MF(regval)             (BITS(8,11) & ((uint32_t)(regval) << 8))
1044 #define RCU_PLL1_MUL8                   CFG1_PLL1MF(6)                      /*!< PLL1 source clock multiply by 8 */
1045 #define RCU_PLL1_MUL9                   CFG1_PLL1MF(7)                      /*!< PLL1 source clock multiply by 9 */
1046 #define RCU_PLL1_MUL10                  CFG1_PLL1MF(8)                      /*!< PLL1 source clock multiply by 10 */
1047 #define RCU_PLL1_MUL11                  CFG1_PLL1MF(9)                      /*!< PLL1 source clock multiply by 11 */
1048 #define RCU_PLL1_MUL12                  CFG1_PLL1MF(10)                     /*!< PLL1 source clock multiply by 12 */
1049 #define RCU_PLL1_MUL13                  CFG1_PLL1MF(11)                     /*!< PLL1 source clock multiply by 13 */
1050 #define RCU_PLL1_MUL14                  CFG1_PLL1MF(12)                     /*!< PLL1 source clock multiply by 14 */
1051 #define RCU_PLL1_MUL16                  CFG1_PLL1MF(14)                     /*!< PLL1 source clock multiply by 16 */
1052 #define RCU_PLL1_MUL20                  CFG1_PLL1MF(15)                     /*!< PLL1 source clock multiply by 20 */
1053 
1054 /* PLL2 clock multiplication factor */
1055 #define PLL2MF_4                        RCU_CFG1_PLL2MF_4                   /*!< bit 4 of PLL2MF */
1056 #define PLL2MF_5                        RCU_CFG1_PLL2MF_5                   /*!< bit 5 of PLL2MF */
1057 #define PLL2MF_4_5                     (PLL2MF_4 | PLL2MF_5)                /*!< bit 4 and 5 of PLL2MF */
1058 
1059 #define CFG1_PLL2MF(regval)             (BITS(12,15) & ((uint32_t)(regval) << 12))
1060 #define RCU_PLL2_MUL8                   CFG1_PLL2MF(6)                      /*!< PLL2 source clock multiply by 8 */
1061 #define RCU_PLL2_MUL9                   CFG1_PLL2MF(7)                      /*!< PLL2 source clock multiply by 9 */
1062 #define RCU_PLL2_MUL10                  CFG1_PLL2MF(8)                      /*!< PLL2 source clock multiply by 10 */
1063 #define RCU_PLL2_MUL11                  CFG1_PLL2MF(9)                      /*!< PLL2 source clock multiply by 11 */
1064 #define RCU_PLL2_MUL12                  CFG1_PLL2MF(10)                     /*!< PLL2 source clock multiply by 12 */
1065 #define RCU_PLL2_MUL13                  CFG1_PLL2MF(11)                     /*!< PLL2 source clock multiply by 13 */
1066 #define RCU_PLL2_MUL14                  CFG1_PLL2MF(12)                     /*!< PLL2 source clock multiply by 14 */
1067 #define RCU_PLL2_MUL16                  CFG1_PLL2MF(14)                     /*!< PLL2 source clock multiply by 16 */
1068 #define RCU_PLL2_MUL20                  CFG1_PLL2MF(15)                     /*!< PLL2 source clock multiply by 20 */
1069 #define RCU_PLL2_MUL18                  (PLL2MF_4 | CFG1_PLL2MF(0))         /*!< PLL2 source clock multiply by 18 */
1070 #define RCU_PLL2_MUL19                  (PLL2MF_4 | CFG1_PLL2MF(1))         /*!< PLL2 source clock multiply by 19 */
1071 #define RCU_PLL2_MUL21                  (PLL2MF_4 | CFG1_PLL2MF(3))         /*!< PLL2 source clock multiply by 21 */
1072 #define RCU_PLL2_MUL22                  (PLL2MF_4 | CFG1_PLL2MF(4))         /*!< PLL2 source clock multiply by 22 */
1073 #define RCU_PLL2_MUL23                  (PLL2MF_4 | CFG1_PLL2MF(5))         /*!< PLL2 source clock multiply by 23 */
1074 #define RCU_PLL2_MUL24                  (PLL2MF_4 | CFG1_PLL2MF(6))         /*!< PLL2 source clock multiply by 24 */
1075 #define RCU_PLL2_MUL25                  (PLL2MF_4 | CFG1_PLL2MF(7))         /*!< PLL2 source clock multiply by 25 */
1076 #define RCU_PLL2_MUL26                  (PLL2MF_4 | CFG1_PLL2MF(8))         /*!< PLL2 source clock multiply by 26 */
1077 #define RCU_PLL2_MUL27                  (PLL2MF_4 | CFG1_PLL2MF(9))         /*!< PLL2 source clock multiply by 27 */
1078 #define RCU_PLL2_MUL28                  (PLL2MF_4 | CFG1_PLL2MF(10))        /*!< PLL2 source clock multiply by 28 */
1079 #define RCU_PLL2_MUL29                  (PLL2MF_4 | CFG1_PLL2MF(11))        /*!< PLL2 source clock multiply by 29 */
1080 #define RCU_PLL2_MUL30                  (PLL2MF_4 | CFG1_PLL2MF(12))        /*!< PLL2 source clock multiply by 30 */
1081 #define RCU_PLL2_MUL31                  (PLL2MF_4 | CFG1_PLL2MF(13))        /*!< PLL2 source clock multiply by 31 */
1082 #define RCU_PLL2_MUL32                  (PLL2MF_4 | CFG1_PLL2MF(14))        /*!< PLL2 source clock multiply by 32 */
1083 #define RCU_PLL2_MUL40                  (PLL2MF_4 | CFG1_PLL2MF(15))        /*!< PLL2 source clock multiply by 40 */
1084 #define RCU_PLL2_MUL34                  (PLL2MF_5 | CFG1_PLL2MF(0))         /*!< PLL2 source clock multiply by 34 */
1085 #define RCU_PLL2_MUL35                  (PLL2MF_5 | CFG1_PLL2MF(1))         /*!< PLL2 source clock multiply by 35 */
1086 #define RCU_PLL2_MUL36                  (PLL2MF_5 | CFG1_PLL2MF(2))         /*!< PLL2 source clock multiply by 36 */
1087 #define RCU_PLL2_MUL37                  (PLL2MF_5 | CFG1_PLL2MF(3))         /*!< PLL2 source clock multiply by 37 */
1088 #define RCU_PLL2_MUL38                  (PLL2MF_5 | CFG1_PLL2MF(4))         /*!< PLL2 source clock multiply by 38 */
1089 #define RCU_PLL2_MUL39                  (PLL2MF_5 | CFG1_PLL2MF(5))         /*!< PLL2 source clock multiply by 39 */
1090 #define RCU_PLL2_MUL41                  (PLL2MF_5 | CFG1_PLL2MF(7))         /*!< PLL2 source clock multiply by 41 */
1091 #define RCU_PLL2_MUL42                  (PLL2MF_5 | CFG1_PLL2MF(8))         /*!< PLL2 source clock multiply by 42 */
1092 #define RCU_PLL2_MUL43                  (PLL2MF_5 | CFG1_PLL2MF(9))         /*!< PLL2 source clock multiply by 43 */
1093 #define RCU_PLL2_MUL44                  (PLL2MF_5 | CFG1_PLL2MF(10))        /*!< PLL2 source clock multiply by 44 */
1094 #define RCU_PLL2_MUL45                  (PLL2MF_5 | CFG1_PLL2MF(11))        /*!< PLL2 source clock multiply by 45 */
1095 #define RCU_PLL2_MUL46                  (PLL2MF_5 | CFG1_PLL2MF(12))        /*!< PLL2 source clock multiply by 46 */
1096 #define RCU_PLL2_MUL47                  (PLL2MF_5 | CFG1_PLL2MF(13))        /*!< PLL2 source clock multiply by 47 */
1097 #define RCU_PLL2_MUL48                  (PLL2MF_5 | CFG1_PLL2MF(14))        /*!< PLL2 source clock multiply by 48 */
1098 #define RCU_PLL2_MUL49                  (PLL2MF_5 | CFG1_PLL2MF(15))        /*!< PLL2 source clock multiply by 49 */
1099 #define RCU_PLL2_MUL50                  (PLL2MF_4_5 | CFG1_PLL2MF(0))       /*!< PLL2 source clock multiply by 50 */
1100 #define RCU_PLL2_MUL51                  (PLL2MF_4_5 | CFG1_PLL2MF(1))       /*!< PLL2 source clock multiply by 51 */
1101 #define RCU_PLL2_MUL52                  (PLL2MF_4_5 | CFG1_PLL2MF(2))       /*!< PLL2 source clock multiply by 52 */
1102 #define RCU_PLL2_MUL53                  (PLL2MF_4_5 | CFG1_PLL2MF(3))       /*!< PLL2 source clock multiply by 53 */
1103 #define RCU_PLL2_MUL54                  (PLL2MF_4_5 | CFG1_PLL2MF(4))       /*!< PLL2 source clock multiply by 54 */
1104 #define RCU_PLL2_MUL55                  (PLL2MF_4_5 | CFG1_PLL2MF(5))       /*!< PLL2 source clock multiply by 55 */
1105 #define RCU_PLL2_MUL56                  (PLL2MF_4_5 | CFG1_PLL2MF(6))       /*!< PLL2 source clock multiply by 56*/
1106 #define RCU_PLL2_MUL57                  (PLL2MF_4_5 | CFG1_PLL2MF(7))       /*!< PLL2 source clock multiply by 57 */
1107 #define RCU_PLL2_MUL58                  (PLL2MF_4_5 | CFG1_PLL2MF(8))       /*!< PLL2 source clock multiply by 58 */
1108 #define RCU_PLL2_MUL59                  (PLL2MF_4_5 | CFG1_PLL2MF(9))       /*!< PLL2 source clock multiply by 59 */
1109 #define RCU_PLL2_MUL60                  (PLL2MF_4_5 | CFG1_PLL2MF(10))      /*!< PLL2 source clock multiply by 60 */
1110 #define RCU_PLL2_MUL61                  (PLL2MF_4_5 | CFG1_PLL2MF(11))      /*!< PLL2 source clock multiply by 61 */
1111 #define RCU_PLL2_MUL62                  (PLL2MF_4_5 | CFG1_PLL2MF(12))      /*!< PLL2 source clock multiply by 62 */
1112 #define RCU_PLL2_MUL63                  (PLL2MF_4_5 | CFG1_PLL2MF(13))      /*!< PLL2 source clock multiply by 63 */
1113 #define RCU_PLL2_MUL64                  (PLL2MF_4_5 | CFG1_PLL2MF(14))      /*!< PLL2 source clock multiply by 64 */
1114 #define RCU_PLL2_MUL80                  (PLL2MF_4_5 | CFG1_PLL2MF(15))      /*!< PLL2 source clock multiply by 80 */
1115 
1116 #if (defined(GD32E50X_CL) || defined(GD32EPRT) || defined(GD32E508))
1117 /* PREDV0 input clock source selection */
1118 #define RCU_PREDV0SRC_HXTAL_IRC48M      ((uint32_t)0x00000000U)             /*!< HXTAL or IRC48M selected as PREDV0 input source clock */
1119 #define RCU_PREDV0SRC_CKPLL1            RCU_CFG1_PREDV0SEL                  /*!< CK_PLL1 selected as PREDV0 input source clock */
1120 
1121 /* I2S1 clock source selection */
1122 #define RCU_I2S1SRC_CKSYS               ((uint32_t)0x00000000U)             /*!< system clock selected as I2S1 source clock */
1123 #define RCU_I2S1SRC_CKPLL2_MUL2         RCU_CFG1_I2S1SEL                    /*!< (CK_PLL2 x 2) selected as I2S1 source clock */
1124 
1125 /* I2S2 clock source selection */
1126 #define RCU_I2S2SRC_CKSYS               ((uint32_t)0x00000000U)             /*!< system clock selected as I2S2 source clock */
1127 #define RCU_I2S2SRC_CKPLL2_MUL2         RCU_CFG1_I2S2SEL                    /*!< (CK_PLL2 x 2) selected as I2S2 source clock */
1128 #endif /* GD32E50X_CL and GD32EPRT and GD32E508 */
1129 
1130 /* SHRTIMER clock source selection */
1131 #ifndef GD32EPRT
1132 #define RCU_SHRTIMERSRC_CKAPB2           ((uint32_t)0x00000000U)            /*!< APB2 clock selected as SHRTIMER source clock */
1133 #define RCU_SHRTIMERSRC_CKSYS            RCU_CFG1_SHRTIMERSEL               /*!< system clock selected as SHRTIMER source clock */
1134 #endif /* GD32EPRT */
1135 
1136 /* PLL input clock source selection */
1137 #define RCU_PLLPRESRC_HXTAL             ((uint32_t)0x00000000U)             /*!< HXTAL selected as PLL source clock */
1138 #define RCU_PLLPRESRC_IRC48M            RCU_CFG1_PLLPRESEL                  /*!< CK_PLL selected as PREDV0 input source clock */
1139 
1140 /* deep-sleep mode voltage */
1141 #define DSV_DSLPVS(regval)              (BITS(0,2) & ((uint32_t)(regval) << 0))
1142 #define RCU_DEEPSLEEP_V_1_0             DSV_DSLPVS(0)                       /*!< core voltage is 1.0V in deep-sleep mode */
1143 #define RCU_DEEPSLEEP_V_0_9             DSV_DSLPVS(1)                       /*!< core voltage is 0.9V in deep-sleep mode */
1144 #define RCU_DEEPSLEEP_V_0_8             DSV_DSLPVS(2)                       /*!< core voltage is 0.8V in deep-sleep mode */
1145 #define RCU_DEEPSLEEP_V_0_7             DSV_DSLPVS(3)                       /*!< core voltage is 0.7V in deep-sleep mode */
1146 
1147 /* USB 48MHz clock selection */
1148 #define ADDCTL_CK48MSEL(regval)         (BITS(0,1) & ((uint32_t)(regval) << 0))
1149 #define RCU_CK48MSRC_CKPLL              ADDCTL_CK48MSEL(0)                  /*!< select select CK_PLL as CK48M clock source */
1150 #define RCU_CK48MSRC_IRC48M             ADDCTL_CK48MSEL(1)                  /*!< select select CK_IRC48M as CK48M clock source */
1151 #define RCU_CK48MSRC_CKPLLUSB           ADDCTL_CK48MSEL(2)                  /*!< select CK_PLLUSB clock as CK48M clock source */
1152 #define RCU_CK48MSRC_CKPLL2             ADDCTL_CK48MSEL(3)                  /*!< select CK_PLL2 clock as CK48M clock source */
1153 
1154 #if defined(GD32E50X_CL) || defined(GD32E508)
1155 /* USBHSSEL clock source selection */
1156 #define RCU_USBHSSRC_48M               ((uint32_t)0x00000000U)              /*!< 48M clock selected as USBHS source clock */
1157 #define RCU_CK48MSRC_60M                RCU_ADDCTL_USBHSSEL                 /*!< 60M clock selected as USBHS source clock */
1158 
1159 /* USBHSDV division factor */
1160 #define ADDCTL_USBHSDV(regval)         (BITS(3,5) & ((uint32_t)(regval) << 3))
1161 #define RCU_USBHSDV_DIV2                ADDCTL_USBHSDV(0)                   /*!< USBHSDV input source clock divided by 2 */
1162 #define RCU_USBHSDV_DIV4                ADDCTL_USBHSDV(1)                   /*!< USBHSDV input source clock divided by 4 */
1163 #define RCU_USBHSDV_DIV6                ADDCTL_USBHSDV(2)                   /*!< USBHSDV input source clock divided by 6 */
1164 #define RCU_USBHSDV_DIV8                ADDCTL_USBHSDV(3)                   /*!< USBHSDV input source clock divided by 8 */
1165 #define RCU_USBHSDV_DIV10               ADDCTL_USBHSDV(4)                   /*!< USBHSDV input source clock divided by 10 */
1166 #define RCU_USBHSDV_DIV12               ADDCTL_USBHSDV(5)                   /*!< USBHSDV input source clock divided by 12 */
1167 #define RCU_USBHSDV_DIV14               ADDCTL_USBHSDV(6)                   /*!< USBHSDV input source clock divided by 14 */
1168 #define RCU_USBHSDV_DIV16               ADDCTL_USBHSDV(7)                   /*!< USBHSDV input source clock divided by 16 */
1169 
1170 /* PLLUSBPREDV division factor */
1171 #define ADDCFG_PLLUSBPREDV(regval)     (BITS(0,3) & ((uint32_t)(regval) << 0))
1172 #define RCU_PLLUSBPREDV_DIV1            ADDCFG_PLLUSBPREDV(1)               /*!< PLLUSBPREDV input source clock divided by 1 */
1173 #define RCU_PLLUSBPREDV_DIV2            ADDCFG_PLLUSBPREDV(2)               /*!< PLLUSBPREDV input source clock divided by 2 */
1174 #define RCU_PLLUSBPREDV_DIV3            ADDCFG_PLLUSBPREDV(3)               /*!< PLLUSBPREDV input source clock divided by 3 */
1175 #define RCU_PLLUSBPREDV_DIV4            ADDCFG_PLLUSBPREDV(4)               /*!< PLLUSBPREDV input source clock divided by 4 */
1176 #define RCU_PLLUSBPREDV_DIV5            ADDCFG_PLLUSBPREDV(5)               /*!< PLLUSBPREDV input source clock divided by 5 */
1177 #define RCU_PLLUSBPREDV_DIV6            ADDCFG_PLLUSBPREDV(6)               /*!< PLLUSBPREDV input source clock divided by 6 */
1178 #define RCU_PLLUSBPREDV_DIV7            ADDCFG_PLLUSBPREDV(7)               /*!< PLLUSBPREDV input source clock divided by 7 */
1179 #define RCU_PLLUSBPREDV_DIV8            ADDCFG_PLLUSBPREDV(8)               /*!< PLLUSBPREDV input source clock divided by 8 */
1180 #define RCU_PLLUSBPREDV_DIV9            ADDCFG_PLLUSBPREDV(9)               /*!< PLLUSBPREDV input source clock divided by 9 */
1181 #define RCU_PLLUSBPREDV_DIV10           ADDCFG_PLLUSBPREDV(10)              /*!< PLLUSBPREDV input source clock divided by 10 */
1182 #define RCU_PLLUSBPREDV_DIV11           ADDCFG_PLLUSBPREDV(11)              /*!< PLLUSBPREDV input source clock divided by 11 */
1183 #define RCU_PLLUSBPREDV_DIV12           ADDCFG_PLLUSBPREDV(12)              /*!< PLLUSBPREDV input source clock divided by 12 */
1184 #define RCU_PLLUSBPREDV_DIV13           ADDCFG_PLLUSBPREDV(13)              /*!< PLLUSBPREDV input source clock divided by 13 */
1185 #define RCU_PLLUSBPREDV_DIV14           ADDCFG_PLLUSBPREDV(14)              /*!< PLLUSBPREDV input source clock divided by 14 */
1186 #define RCU_PLLUSBPREDV_DIV15           ADDCFG_PLLUSBPREDV(15)              /*!< PLLUSBPREDV input source clock divided by 15 */
1187 
1188 /* PLLUSB clock source selection */
1189 #define RCU_PLLUSBPRESRC_HXTAL         ((uint32_t)0x00000000U)              /*!< HXTAL selected as PLLUSB source clock */
1190 #define RCU_PLLUSBPRESRC_IRC48M         RCU_ADDCFG_PLLUSBPRESEL             /*!< IRC48M clock selected as PLLUSB source clock */
1191 
1192 /* PLLUSBPREDVSEL clock source selection */
1193 #define RCU_PLLUSBPREDVSRC_HXTAL_IRC48M ((uint32_t)0x00000000U)             /*!< HXTAL or IRC48M selected as PLLUSBPREDV input source clock */
1194 #define RCU_PLLUSBPREDVSRC_CKPLL1        RCU_ADDCFG_PLLUSBPREDVSEL          /*!< CK_PLL1 selected as PLLUSBPREDV input source clock */
1195 
1196 /* PLLUSB clock multiplication factor */
1197 #define ADDCFG_PLLUSBMF(regval)         (BITS(18,24) & ((uint32_t)(regval) << 18))
1198 #define RCU_PLLUSB_MUL16                ADDCFG_PLLUSBMF(16)                 /*!< PLLUSB source clock multiply by 16 */
1199 #define RCU_PLLUSB_MUL17                ADDCFG_PLLUSBMF(17)                 /*!< PLLUSB source clock multiply by 17 */
1200 #define RCU_PLLUSB_MUL18                ADDCFG_PLLUSBMF(18)                 /*!< PLLUSB source clock multiply by 18 */
1201 #define RCU_PLLUSB_MUL19                ADDCFG_PLLUSBMF(19)                 /*!< PLLUSB source clock multiply by 19 */
1202 #define RCU_PLLUSB_MUL20                ADDCFG_PLLUSBMF(20)                 /*!< PLLUSB source clock multiply by 20 */
1203 #define RCU_PLLUSB_MUL21                ADDCFG_PLLUSBMF(21)                 /*!< PLLUSB source clock multiply by 21 */
1204 #define RCU_PLLUSB_MUL22                ADDCFG_PLLUSBMF(22)                 /*!< PLLUSB source clock multiply by 22 */
1205 #define RCU_PLLUSB_MUL23                ADDCFG_PLLUSBMF(23)                 /*!< PLLUSB source clock multiply by 23 */
1206 #define RCU_PLLUSB_MUL24                ADDCFG_PLLUSBMF(24)                 /*!< PLLUSB source clock multiply by 24 */
1207 #define RCU_PLLUSB_MUL25                ADDCFG_PLLUSBMF(25)                 /*!< PLLUSB source clock multiply by 25 */
1208 #define RCU_PLLUSB_MUL26                ADDCFG_PLLUSBMF(26)                 /*!< PLLUSB source clock multiply by 26 */
1209 #define RCU_PLLUSB_MUL27                ADDCFG_PLLUSBMF(27)                 /*!< PLLUSB source clock multiply by 27 */
1210 #define RCU_PLLUSB_MUL28                ADDCFG_PLLUSBMF(28)                 /*!< PLLUSB source clock multiply by 28 */
1211 #define RCU_PLLUSB_MUL29                ADDCFG_PLLUSBMF(29)                 /*!< PLLUSB source clock multiply by 29 */
1212 #define RCU_PLLUSB_MUL30                ADDCFG_PLLUSBMF(30)                 /*!< PLLUSB source clock multiply by 30 */
1213 #define RCU_PLLUSB_MUL31                ADDCFG_PLLUSBMF(31)                 /*!< PLLUSB source clock multiply by 31 */
1214 #define RCU_PLLUSB_MUL32                ADDCFG_PLLUSBMF(32)                 /*!< PLLUSB source clock multiply by 32 */
1215 #define RCU_PLLUSB_MUL33                ADDCFG_PLLUSBMF(33)                 /*!< PLLUSB source clock multiply by 33 */
1216 #define RCU_PLLUSB_MUL34                ADDCFG_PLLUSBMF(34)                 /*!< PLLUSB source clock multiply by 34 */
1217 #define RCU_PLLUSB_MUL35                ADDCFG_PLLUSBMF(35)                 /*!< PLLUSB source clock multiply by 35 */
1218 #define RCU_PLLUSB_MUL36                ADDCFG_PLLUSBMF(36)                 /*!< PLLUSB source clock multiply by 36 */
1219 #define RCU_PLLUSB_MUL37                ADDCFG_PLLUSBMF(37)                 /*!< PLLUSB source clock multiply by 37 */
1220 #define RCU_PLLUSB_MUL38                ADDCFG_PLLUSBMF(38)                 /*!< PLLUSB source clock multiply by 38 */
1221 #define RCU_PLLUSB_MUL39                ADDCFG_PLLUSBMF(39)                 /*!< PLLUSB source clock multiply by 39 */
1222 #define RCU_PLLUSB_MUL40                ADDCFG_PLLUSBMF(40)                 /*!< PLLUSB source clock multiply by 40 */
1223 #define RCU_PLLUSB_MUL41                ADDCFG_PLLUSBMF(41)                 /*!< PLLUSB source clock multiply by 41 */
1224 #define RCU_PLLUSB_MUL42                ADDCFG_PLLUSBMF(42)                 /*!< PLLUSB source clock multiply by 42 */
1225 #define RCU_PLLUSB_MUL43                ADDCFG_PLLUSBMF(43)                 /*!< PLLUSB source clock multiply by 43 */
1226 #define RCU_PLLUSB_MUL44                ADDCFG_PLLUSBMF(44)                 /*!< PLLUSB source clock multiply by 44 */
1227 #define RCU_PLLUSB_MUL45                ADDCFG_PLLUSBMF(45)                 /*!< PLLUSB source clock multiply by 45 */
1228 #define RCU_PLLUSB_MUL46                ADDCFG_PLLUSBMF(46)                 /*!< PLLUSB source clock multiply by 46 */
1229 #define RCU_PLLUSB_MUL47                ADDCFG_PLLUSBMF(47)                 /*!< PLLUSB source clock multiply by 47 */
1230 #define RCU_PLLUSB_MUL48                ADDCFG_PLLUSBMF(48)                 /*!< PLLUSB source clock multiply by 48 */
1231 #define RCU_PLLUSB_MUL49                ADDCFG_PLLUSBMF(49)                 /*!< PLLUSB source clock multiply by 49 */
1232 #define RCU_PLLUSB_MUL50                ADDCFG_PLLUSBMF(50)                 /*!< PLLUSB source clock multiply by 50 */
1233 #define RCU_PLLUSB_MUL51                ADDCFG_PLLUSBMF(51)                 /*!< PLLUSB source clock multiply by 51 */
1234 #define RCU_PLLUSB_MUL52                ADDCFG_PLLUSBMF(52)                 /*!< PLLUSB source clock multiply by 52 */
1235 #define RCU_PLLUSB_MUL53                ADDCFG_PLLUSBMF(53)                 /*!< PLLUSB source clock multiply by 53 */
1236 #define RCU_PLLUSB_MUL54                ADDCFG_PLLUSBMF(54)                 /*!< PLLUSB source clock multiply by 54 */
1237 #define RCU_PLLUSB_MUL55                ADDCFG_PLLUSBMF(55)                 /*!< PLLUSB source clock multiply by 55 */
1238 #define RCU_PLLUSB_MUL56                ADDCFG_PLLUSBMF(56)                 /*!< PLLUSB source clock multiply by 56 */
1239 #define RCU_PLLUSB_MUL57                ADDCFG_PLLUSBMF(57)                 /*!< PLLUSB source clock multiply by 57 */
1240 #define RCU_PLLUSB_MUL58                ADDCFG_PLLUSBMF(58)                 /*!< PLLUSB source clock multiply by 58 */
1241 #define RCU_PLLUSB_MUL59                ADDCFG_PLLUSBMF(59)                 /*!< PLLUSB source clock multiply by 59 */
1242 #define RCU_PLLUSB_MUL60                ADDCFG_PLLUSBMF(60)                 /*!< PLLUSB source clock multiply by 60 */
1243 #define RCU_PLLUSB_MUL61                ADDCFG_PLLUSBMF(61)                 /*!< PLLUSB source clock multiply by 61 */
1244 #define RCU_PLLUSB_MUL62                ADDCFG_PLLUSBMF(62)                 /*!< PLLUSB source clock multiply by 62 */
1245 #define RCU_PLLUSB_MUL63                ADDCFG_PLLUSBMF(63)                 /*!< PLLUSB source clock multiply by 63 */
1246 #define RCU_PLLUSB_MUL64                ADDCFG_PLLUSBMF(64)                 /*!< PLLUSB source clock multiply by 64 */
1247 #define RCU_PLLUSB_MUL65                ADDCFG_PLLUSBMF(65)                 /*!< PLLUSB source clock multiply by 65 */
1248 #define RCU_PLLUSB_MUL66                ADDCFG_PLLUSBMF(66)                 /*!< PLLUSB source clock multiply by 66 */
1249 #define RCU_PLLUSB_MUL67                ADDCFG_PLLUSBMF(67)                 /*!< PLLUSB source clock multiply by 67 */
1250 #define RCU_PLLUSB_MUL68                ADDCFG_PLLUSBMF(68)                 /*!< PLLUSB source clock multiply by 68 */
1251 #define RCU_PLLUSB_MUL69                ADDCFG_PLLUSBMF(69)                 /*!< PLLUSB source clock multiply by 69 */
1252 #define RCU_PLLUSB_MUL70                ADDCFG_PLLUSBMF(70)                 /*!< PLLUSB source clock multiply by 70 */
1253 #define RCU_PLLUSB_MUL71                ADDCFG_PLLUSBMF(71)                 /*!< PLLUSB source clock multiply by 71 */
1254 #define RCU_PLLUSB_MUL72                ADDCFG_PLLUSBMF(72)                 /*!< PLLUSB source clock multiply by 72 */
1255 #define RCU_PLLUSB_MUL73                ADDCFG_PLLUSBMF(73)                 /*!< PLLUSB source clock multiply by 73 */
1256 #define RCU_PLLUSB_MUL74                ADDCFG_PLLUSBMF(74)                 /*!< PLLUSB source clock multiply by 74 */
1257 #define RCU_PLLUSB_MUL75                ADDCFG_PLLUSBMF(75)                 /*!< PLLUSB source clock multiply by 75 */
1258 #define RCU_PLLUSB_MUL76                ADDCFG_PLLUSBMF(76)                 /*!< PLLUSB source clock multiply by 76 */
1259 #define RCU_PLLUSB_MUL77                ADDCFG_PLLUSBMF(77)                 /*!< PLLUSB source clock multiply by 77 */
1260 #define RCU_PLLUSB_MUL78                ADDCFG_PLLUSBMF(78)                 /*!< PLLUSB source clock multiply by 78 */
1261 #define RCU_PLLUSB_MUL79                ADDCFG_PLLUSBMF(79)                 /*!< PLLUSB source clock multiply by 79 */
1262 #define RCU_PLLUSB_MUL80                ADDCFG_PLLUSBMF(80)                 /*!< PLLUSB source clock multiply by 80 */
1263 #define RCU_PLLUSB_MUL81                ADDCFG_PLLUSBMF(81)                 /*!< PLLUSB source clock multiply by 81 */
1264 #define RCU_PLLUSB_MUL82                ADDCFG_PLLUSBMF(82)                 /*!< PLLUSB source clock multiply by 82 */
1265 #define RCU_PLLUSB_MUL83                ADDCFG_PLLUSBMF(83)                 /*!< PLLUSB source clock multiply by 83 */
1266 #define RCU_PLLUSB_MUL84                ADDCFG_PLLUSBMF(84)                 /*!< PLLUSB source clock multiply by 84 */
1267 #define RCU_PLLUSB_MUL85                ADDCFG_PLLUSBMF(85)                 /*!< PLLUSB source clock multiply by 85 */
1268 #define RCU_PLLUSB_MUL86                ADDCFG_PLLUSBMF(86)                 /*!< PLLUSB source clock multiply by 86 */
1269 #define RCU_PLLUSB_MUL87                ADDCFG_PLLUSBMF(87)                 /*!< PLLUSB source clock multiply by 87 */
1270 #define RCU_PLLUSB_MUL88                ADDCFG_PLLUSBMF(88)                 /*!< PLLUSB source clock multiply by 88 */
1271 #define RCU_PLLUSB_MUL89                ADDCFG_PLLUSBMF(89)                 /*!< PLLUSB source clock multiply by 89 */
1272 #define RCU_PLLUSB_MUL90                ADDCFG_PLLUSBMF(90)                 /*!< PLLUSB source clock multiply by 90 */
1273 #define RCU_PLLUSB_MUL91                ADDCFG_PLLUSBMF(91)                 /*!< PLLUSB source clock multiply by 91 */
1274 #define RCU_PLLUSB_MUL92                ADDCFG_PLLUSBMF(92)                 /*!< PLLUSB source clock multiply by 92 */
1275 #define RCU_PLLUSB_MUL93                ADDCFG_PLLUSBMF(93)                 /*!< PLLUSB source clock multiply by 93 */
1276 #define RCU_PLLUSB_MUL94                ADDCFG_PLLUSBMF(94)                 /*!< PLLUSB source clock multiply by 94 */
1277 #define RCU_PLLUSB_MUL95                ADDCFG_PLLUSBMF(95)                 /*!< PLLUSB source clock multiply by 95 */
1278 #define RCU_PLLUSB_MUL96                ADDCFG_PLLUSBMF(96)                 /*!< PLLUSB source clock multiply by 96 */
1279 #define RCU_PLLUSB_MUL97                ADDCFG_PLLUSBMF(97)                 /*!< PLLUSB source clock multiply by 97 */
1280 #define RCU_PLLUSB_MUL98                ADDCFG_PLLUSBMF(98)                 /*!< PLLUSB source clock multiply by 98 */
1281 #define RCU_PLLUSB_MUL99                ADDCFG_PLLUSBMF(99)                 /*!< PLLUSB source clock multiply by 99 */
1282 #define RCU_PLLUSB_MUL100               ADDCFG_PLLUSBMF(100)                /*!< PLLUSB source clock multiply by 100 */
1283 #define RCU_PLLUSB_MUL101               ADDCFG_PLLUSBMF(101)                /*!< PLLUSB source clock multiply by 101 */
1284 #define RCU_PLLUSB_MUL102               ADDCFG_PLLUSBMF(102)                /*!< PLLUSB source clock multiply by 102 */
1285 #define RCU_PLLUSB_MUL103               ADDCFG_PLLUSBMF(103)                /*!< PLLUSB source clock multiply by 103 */
1286 #define RCU_PLLUSB_MUL104               ADDCFG_PLLUSBMF(104)                /*!< PLLUSB source clock multiply by 104 */
1287 #define RCU_PLLUSB_MUL105               ADDCFG_PLLUSBMF(105)                /*!< PLLUSB source clock multiply by 105 */
1288 #define RCU_PLLUSB_MUL106               ADDCFG_PLLUSBMF(106)                /*!< PLLUSB source clock multiply by 106 */
1289 #define RCU_PLLUSB_MUL107               ADDCFG_PLLUSBMF(107)                /*!< PLLUSB source clock multiply by 107 */
1290 #define RCU_PLLUSB_MUL108               ADDCFG_PLLUSBMF(108)                /*!< PLLUSB source clock multiply by 108 */
1291 #define RCU_PLLUSB_MUL109               ADDCFG_PLLUSBMF(109)                /*!< PLLUSB source clock multiply by 109 */
1292 #define RCU_PLLUSB_MUL110               ADDCFG_PLLUSBMF(110)                /*!< PLLUSB source clock multiply by 110 */
1293 #define RCU_PLLUSB_MUL111               ADDCFG_PLLUSBMF(111)                /*!< PLLUSB source clock multiply by 111 */
1294 #define RCU_PLLUSB_MUL112               ADDCFG_PLLUSBMF(112)                /*!< PLLUSB source clock multiply by 112 */
1295 #define RCU_PLLUSB_MUL113               ADDCFG_PLLUSBMF(113)                /*!< PLLUSB source clock multiply by 113 */
1296 #define RCU_PLLUSB_MUL114               ADDCFG_PLLUSBMF(114)                /*!< PLLUSB source clock multiply by 114 */
1297 #define RCU_PLLUSB_MUL115               ADDCFG_PLLUSBMF(115)                /*!< PLLUSB source clock multiply by 115 */
1298 #define RCU_PLLUSB_MUL116               ADDCFG_PLLUSBMF(116)                /*!< PLLUSB source clock multiply by 116 */
1299 #define RCU_PLLUSB_MUL117               ADDCFG_PLLUSBMF(117)                /*!< PLLUSB source clock multiply by 117 */
1300 #define RCU_PLLUSB_MUL118               ADDCFG_PLLUSBMF(118)                /*!< PLLUSB source clock multiply by 118 */
1301 #define RCU_PLLUSB_MUL119               ADDCFG_PLLUSBMF(119)                /*!< PLLUSB source clock multiply by 119 */
1302 #define RCU_PLLUSB_MUL120               ADDCFG_PLLUSBMF(120)                /*!< PLLUSB source clock multiply by 120 */
1303 #define RCU_PLLUSB_MUL121               ADDCFG_PLLUSBMF(121)                /*!< PLLUSB source clock multiply by 121 */
1304 #define RCU_PLLUSB_MUL122               ADDCFG_PLLUSBMF(122)                /*!< PLLUSB source clock multiply by 122 */
1305 #define RCU_PLLUSB_MUL123               ADDCFG_PLLUSBMF(123)                /*!< PLLUSB source clock multiply by 123 */
1306 #define RCU_PLLUSB_MUL124               ADDCFG_PLLUSBMF(124)                /*!< PLLUSB source clock multiply by 124 */
1307 #define RCU_PLLUSB_MUL125               ADDCFG_PLLUSBMF(125)                /*!< PLLUSB source clock multiply by 125 */
1308 #define RCU_PLLUSB_MUL126               ADDCFG_PLLUSBMF(126)                /*!< PLLUSB source clock multiply by 126 */
1309 #define RCU_PLLUSB_MUL127               ADDCFG_PLLUSBMF(127)                /*!< PLLUSB source clock multiply by 127 */
1310 #endif /* GD32E50X_CL and GD32E508 */
1311 
1312 /* USART5 clock source selection */
1313 #define CFG2_USART5SRC(regval)         (BITS(0,1) & ((uint32_t)(regval) << 0))
1314 #define RCU_USART5SRC_CKAPB2            CFG2_USART5SRC(0)                   /*!< CK_APB2 selected as USART5 source clock */
1315 #define RCU_USART5SRC_CKSYS             CFG2_USART5SRC(1)                   /*!< CK_SYS selected as USART5 source clock  */
1316 #define RCU_USART5SRC_LXTAL             CFG2_USART5SRC(2)                   /*!< CK_LXTAL selected as USART5 source clock */
1317 #define RCU_USART5SRC_IRC8M             CFG2_USART5SRC(3)                   /*!< CK_IRC8M selected as USART5 source clock */
1318 
1319 /* I2C2 clock source selection */
1320 #define CFG2_I2C2SRC(regval)           (BITS(4,5) & ((uint32_t)(regval) << 4))
1321 #define RCU_I2C2SRC_CKAPB1              CFG2_I2C2SRC(0)                     /*!< APB1 clock selected as I2C2 source clock */
1322 #define RCU_I2C2SRC_CKSYS               CFG2_I2C2SRC(1)                     /*!< System clock selected as I2C2 source clock */
1323 #define RCU_I2C2SRCSRC_CKIRC8M          CFG2_I2C2SRC(2)                     /*!< CK_IRC8M clock selected as I2C2 source clock */
1324 
1325 /* function declarations */
1326 /* deinitialize the RCU */
1327 void rcu_deinit(void);
1328 /* enable the peripherals clock */
1329 void rcu_periph_clock_enable(rcu_periph_enum periph);
1330 /* disable the peripherals clock */
1331 void rcu_periph_clock_disable(rcu_periph_enum periph);
1332 /* enable the peripherals clock when sleep mode */
1333 void rcu_periph_clock_sleep_enable(rcu_periph_sleep_enum periph);
1334 /* disable the peripherals clock when sleep mode */
1335 void rcu_periph_clock_sleep_disable(rcu_periph_sleep_enum periph);
1336 /* reset the peripherals */
1337 void rcu_periph_reset_enable(rcu_periph_reset_enum periph_reset);
1338 /* disable reset the peripheral */
1339 void rcu_periph_reset_disable(rcu_periph_reset_enum periph_reset);
1340 /* reset the BKP domain */
1341 void rcu_bkp_reset_enable(void);
1342 /* disable the BKP domain reset */
1343 void rcu_bkp_reset_disable(void);
1344 
1345 /* configure the system clock source */
1346 void rcu_system_clock_source_config(uint32_t ck_sys);
1347 /* get the system clock source */
1348 uint32_t rcu_system_clock_source_get(void);
1349 /* configure the AHB prescaler selection */
1350 void rcu_ahb_clock_config(uint32_t ck_ahb);
1351 /* configure the APB1 prescaler selection */
1352 void rcu_apb1_clock_config(uint32_t ck_apb1);
1353 /* configure the APB2 prescaler selection */
1354 void rcu_apb2_clock_config(uint32_t ck_apb2);
1355 /* configure the CK_OUT0 clock source and divider */
1356 void rcu_ckout0_config(uint32_t ckout0_src);
1357 /* configure the PLL clock source selection and PLL multiply factor */
1358 void rcu_pll_config(uint32_t pll_src, uint32_t pll_mul);
1359 /* configure the PLL clock source preselection */
1360 void rcu_pllpresel_config(uint32_t pll_presel);
1361 #if defined(GD32E50X_HD) || defined(GD32E50X_XD)
1362 /* configure the PREDV0 division factor and clock source */
1363 void rcu_predv0_config(uint32_t predv0_div);
1364 #elif defined(GD32E50X_CL)  || defined(GD32EPRT) || defined(GD32E508)
1365 /* configure the PREDV0 division factor and clock source */
1366 void rcu_predv0_config(uint32_t predv0_source, uint32_t predv0_div);
1367 /* configure the PREDV1 division factor */
1368 void rcu_predv1_config(uint32_t predv1_div);
1369 /* configure the PLL1 clock */
1370 void rcu_pll1_config(uint32_t pll_mul);
1371 /* configure the PLL2 clock */
1372 void rcu_pll2_config(uint32_t pll_mul);
1373 #endif /* GD32E50X_HD and GD32E50X_XD */
1374 #if defined(GD32E50X_CL) || defined(GD32E508)
1375 /* configure the PLLUSB clock source preselection */
1376 void rcu_pllusbpresel_config(uint32_t pllusb_presel);
1377 /* configure the PLLUSBPREDV division factor and clock source */
1378 void rcu_pllusbpredv_config(uint32_t pllusbpredv_source, uint32_t pllusbpredv_div);
1379 /* configure the PLLUSB clock */
1380 void rcu_pllusb_config(uint32_t pllusb_mul);
1381 #endif /* GD32E50X_CL and GD32E508 */
1382 
1383 /* configure the ADC division factor */
1384 void rcu_adc_clock_config(uint32_t adc_psc);
1385 /* configure the USBD/USBHS prescaler factor */
1386 void rcu_usb_clock_config(uint32_t usb_psc);
1387 /* configure the RTC clock source selection */
1388 void rcu_rtc_clock_config(uint32_t rtc_clock_source);
1389 #ifndef GD32EPRT
1390 /* configure the SHRTIMER clock source selection */
1391 void rcu_shrtimer_clock_config(uint32_t shrtimer_clock_source);
1392 #endif /* GD32EPRT */
1393 /* configure the usart5 clock source selection */
1394 void rcu_usart5_clock_config(uint32_t usart5_clock_source);
1395 /* configure the I2C2 clock source selection */
1396 void rcu_i2c2_clock_config(uint32_t i2c2_clock_source);
1397 /* configure the CK48M clock selection */
1398 void rcu_ck48m_clock_config(uint32_t ck48m_clock_source);
1399 #if defined(GD32E50X_CL)  || defined(GD32EPRT) || defined(GD32E508)
1400 /* configure the I2S1 clock source selection */
1401 void rcu_i2s1_clock_config(uint32_t i2s_clock_source);
1402 /* configure the I2S2 clock source selection */
1403 void rcu_i2s2_clock_config(uint32_t i2s_clock_source);
1404 #endif /* GD32E50X_CL and GD32EPRT and GD32E508 */
1405 #if defined(GD32E50X_CL) || defined(GD32E508)
1406 /* configure the USBHSSEL source clock selection */
1407 void rcu_usbhssel_config(uint32_t usbhssel_clock_source);
1408 /* configure the USBHSDV division factor */
1409 void rcu_usbdv_config(uint32_t usbhs_dv);
1410 #endif /* GD32E50X_CL and GD32E508 */
1411 
1412 /* get the clock stabilization and periphral reset flags */
1413 FlagStatus rcu_flag_get(rcu_flag_enum flag);
1414 /* clear the reset flag */
1415 void rcu_all_reset_flag_clear(void);
1416 /* get the clock stabilization interrupt and ckm flags */
1417 FlagStatus rcu_interrupt_flag_get(rcu_int_flag_enum int_flag);
1418 /* clear the interrupt flags */
1419 void rcu_interrupt_flag_clear(rcu_int_flag_clear_enum int_flag);
1420 /* enable the stabilization interrupt */
1421 void rcu_interrupt_enable(rcu_int_enum interrupt);
1422 /* disable the stabilization interrupt */
1423 void rcu_interrupt_disable(rcu_int_enum interrupt);
1424 
1425 /* configure the LXTAL drive capability */
1426 void rcu_lxtal_drive_capability_config(uint32_t lxtal_dricap);
1427 /* wait for oscillator stabilization flags is SET or oscillator startup is timeout */
1428 ErrStatus rcu_osci_stab_wait(rcu_osci_type_enum osci);
1429 /* turn on the oscillator */
1430 void rcu_osci_on(rcu_osci_type_enum osci);
1431 /* turn off the oscillator */
1432 void rcu_osci_off(rcu_osci_type_enum osci);
1433 /* enable the oscillator bypass mode, HXTALEN or LXTALEN must be reset before it */
1434 void rcu_osci_bypass_mode_enable(rcu_osci_type_enum osci);
1435 /* disable the oscillator bypass mode, HXTALEN or LXTALEN must be reset before it */
1436 void rcu_osci_bypass_mode_disable(rcu_osci_type_enum osci);
1437 /* enable the HXTAL clock monitor */
1438 void rcu_hxtal_clock_monitor_enable(void);
1439 /* disable the HXTAL clock monitor */
1440 void rcu_hxtal_clock_monitor_disable(void);
1441 
1442 /* set the IRC8M adjust value */
1443 void rcu_irc8m_adjust_value_set(uint32_t irc8m_adjval);
1444 
1445 /* set the deep sleep mode voltage */
1446 void rcu_deepsleep_voltage_set(uint32_t dsvol);
1447 
1448 /* get the system clock, bus and peripheral clock frequency */
1449 uint32_t rcu_clock_freq_get(rcu_clock_freq_enum clock);
1450 
1451 #endif /* GD32E50X_RCU_H */
1452