nu_clock_init.c 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417
  1. /**************************************************************************//**
  2. *
  3. * @copyright (C) 2019 Nuvoton Technology Corp. All rights reserved.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0
  6. *
  7. * Change Logs:
  8. * Date Author Notes
  9. * 2021-6-1 Wayne First version
  10. *
  11. ******************************************************************************/
  12. #include "board.h"
  13. static void nu_clock_uart_init(void)
  14. {
  15. #if defined(BSP_USING_UART0)
  16. CLK_EnableModuleClock(UART0_MODULE);
  17. CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL2_UART0SEL_HXT, CLK_CLKDIV1_UART0(1));
  18. #endif
  19. #if defined(BSP_USING_UART1)
  20. CLK_EnableModuleClock(UART1_MODULE);
  21. CLK_SetModuleClock(UART1_MODULE, CLK_CLKSEL2_UART1SEL_HXT, CLK_CLKDIV1_UART1(1));
  22. #endif
  23. #if defined(BSP_USING_UART2)
  24. CLK_EnableModuleClock(UART2_MODULE);
  25. CLK_SetModuleClock(UART2_MODULE, CLK_CLKSEL2_UART2SEL_HXT, CLK_CLKDIV1_UART2(1));
  26. #endif
  27. #if defined(BSP_USING_UART3)
  28. CLK_EnableModuleClock(UART3_MODULE);
  29. CLK_SetModuleClock(UART3_MODULE, CLK_CLKSEL2_UART3SEL_HXT, CLK_CLKDIV1_UART3(1));
  30. #endif
  31. #if defined(BSP_USING_UART4)
  32. CLK_EnableModuleClock(UART4_MODULE);
  33. CLK_SetModuleClock(UART4_MODULE, CLK_CLKSEL2_UART4SEL_HXT, CLK_CLKDIV1_UART4(1));
  34. #endif
  35. #if defined(BSP_USING_UART5)
  36. CLK_EnableModuleClock(UART5_MODULE);
  37. CLK_SetModuleClock(UART5_MODULE, CLK_CLKSEL2_UART5SEL_HXT, CLK_CLKDIV1_UART5(1));
  38. #endif
  39. #if defined(BSP_USING_UART6)
  40. CLK_EnableModuleClock(UART6_MODULE);
  41. CLK_SetModuleClock(UART6_MODULE, CLK_CLKSEL2_UART6SEL_HXT, CLK_CLKDIV1_UART6(1));
  42. #endif
  43. #if defined(BSP_USING_UART7)
  44. CLK_EnableModuleClock(UART7_MODULE);
  45. CLK_SetModuleClock(UART7_MODULE, CLK_CLKSEL2_UART7SEL_HXT, CLK_CLKDIV1_UART7(1));
  46. #endif
  47. #if defined(BSP_USING_UART8)
  48. CLK_EnableModuleClock(UART8_MODULE);
  49. CLK_SetModuleClock(UART8_MODULE, CLK_CLKSEL3_UART8SEL_HXT, CLK_CLKDIV1_UART8(1));
  50. #endif
  51. #if defined(BSP_USING_UART9)
  52. CLK_EnableModuleClock(UART9_MODULE);
  53. CLK_SetModuleClock(UART9_MODULE, CLK_CLKSEL3_UART9SEL_HXT, CLK_CLKDIV2_UART9(1));
  54. #endif
  55. #if defined(BSP_USING_UART10)
  56. CLK_EnableModuleClock(UART10_MODULE);
  57. CLK_SetModuleClock(UART10_MODULE, CLK_CLKSEL3_UART10SEL_HXT, CLK_CLKDIV2_UART10(1));
  58. #endif
  59. #if defined(BSP_USING_UART11)
  60. CLK_EnableModuleClock(UART11_MODULE);
  61. CLK_SetModuleClock(UART11_MODULE, CLK_CLKSEL3_UART11SEL_HXT, CLK_CLKDIV2_UART11(1));
  62. #endif
  63. #if defined(BSP_USING_UART12)
  64. CLK_EnableModuleClock(UART12_MODULE);
  65. CLK_SetModuleClock(UART12_MODULE, CLK_CLKSEL3_UART12SEL_HXT, CLK_CLKDIV3_UART12(1));
  66. #endif
  67. #if defined(BSP_USING_UART13)
  68. CLK_EnableModuleClock(UART13_MODULE);
  69. CLK_SetModuleClock(UART13_MODULE, CLK_CLKSEL3_UART13SEL_HXT, CLK_CLKDIV3_UART13(1));
  70. #endif
  71. #if defined(BSP_USING_UART14)
  72. CLK_EnableModuleClock(UART14_MODULE);
  73. CLK_SetModuleClock(UART14_MODULE, CLK_CLKSEL3_UART14SEL_HXT, CLK_CLKDIV3_UART14(1));
  74. #endif
  75. #if defined(BSP_USING_UART15)
  76. CLK_EnableModuleClock(UART15_MODULE);
  77. CLK_SetModuleClock(UART15_MODULE, CLK_CLKSEL3_UART15SEL_HXT, CLK_CLKDIV3_UART15(1));
  78. #endif
  79. #if defined(BSP_USING_UART16)
  80. CLK_EnableModuleClock(UART16_MODULE);
  81. CLK_SetModuleClock(UART16_MODULE, CLK_CLKSEL3_UART16SEL_HXT, CLK_CLKDIV3_UART16(1));
  82. #endif
  83. }
  84. static void nu_clock_pdma_init(void)
  85. {
  86. #if defined(BSP_USING_PDMA0)
  87. CLK_EnableModuleClock(PDMA0_MODULE);
  88. #endif
  89. #if defined(BSP_USING_PDMA1)
  90. CLK_EnableModuleClock(PDMA1_MODULE);
  91. #endif
  92. #if defined(BSP_USING_PDMA2)
  93. CLK_EnableModuleClock(PDMA2_MODULE);
  94. #endif
  95. #if defined(BSP_USING_PDMA3)
  96. CLK_EnableModuleClock(PDMA3_MODULE);
  97. #endif
  98. }
  99. static void nu_clock_gpio_init(void)
  100. {
  101. #if defined(BSP_USING_GPIO)
  102. CLK_EnableModuleClock(GPA_MODULE);
  103. CLK_EnableModuleClock(GPB_MODULE);
  104. CLK_EnableModuleClock(GPC_MODULE);
  105. CLK_EnableModuleClock(GPD_MODULE);
  106. CLK_EnableModuleClock(GPE_MODULE);
  107. CLK_EnableModuleClock(GPF_MODULE);
  108. CLK_EnableModuleClock(GPG_MODULE);
  109. CLK_EnableModuleClock(GPH_MODULE);
  110. CLK_EnableModuleClock(GPI_MODULE);
  111. CLK_EnableModuleClock(GPJ_MODULE);
  112. CLK_EnableModuleClock(GPK_MODULE);
  113. CLK_EnableModuleClock(GPL_MODULE);
  114. CLK_EnableModuleClock(GPM_MODULE);
  115. CLK_EnableModuleClock(GPN_MODULE);
  116. #endif
  117. }
  118. static void nu_clock_qspi_init(void)
  119. {
  120. #if defined(BSP_USING_QSPI0)
  121. CLK_EnableModuleClock(QSPI0_MODULE);
  122. CLK_SetModuleClock(QSPI0_MODULE, CLK_CLKSEL4_QSPI0SEL_PCLK0, MODULE_NoMsk);
  123. #endif
  124. #if defined(BSP_USING_QSPI1)
  125. CLK_EnableModuleClock(QSPI1_MODULE);
  126. CLK_SetModuleClock(QSPI1_MODULE, CLK_CLKSEL4_QSPI1SEL_PCLK0, MODULE_NoMsk);
  127. #endif
  128. }
  129. static void nu_clock_spi_init(void)
  130. {
  131. #if defined(BSP_USING_SPI0)
  132. CLK_EnableModuleClock(SPI0_MODULE);
  133. CLK_SetModuleClock(SPI0_MODULE, CLK_CLKSEL4_SPI0SEL_PCLK1, MODULE_NoMsk);
  134. #endif
  135. #if defined(BSP_USING_SPI1)
  136. CLK_EnableModuleClock(SPI1_MODULE);
  137. CLK_SetModuleClock(SPI1_MODULE, CLK_CLKSEL4_SPI1SEL_PCLK2, MODULE_NoMsk);
  138. #endif
  139. #if defined(BSP_USING_SPI2)
  140. CLK_EnableModuleClock(SPI2_MODULE);
  141. CLK_SetModuleClock(SPI2_MODULE, CLK_CLKSEL4_SPI2SEL_PCLK1, MODULE_NoMsk);
  142. #endif
  143. #if defined(BSP_USING_SPI3)
  144. CLK_EnableModuleClock(SPI3_MODULE);
  145. CLK_SetModuleClock(SPI3_MODULE, CLK_CLKSEL4_SPI3SEL_PCLK2, MODULE_NoMsk);
  146. #endif
  147. }
  148. static void nu_clock_i2c_init(void)
  149. {
  150. #if defined(BSP_USING_I2C0)
  151. CLK_EnableModuleClock(I2C0_MODULE);
  152. #endif
  153. #if defined(BSP_USING_I2C1)
  154. CLK_EnableModuleClock(I2C1_MODULE);
  155. #endif
  156. #if defined(BSP_USING_I2C2)
  157. CLK_EnableModuleClock(I2C2_MODULE);
  158. #endif
  159. #if defined(BSP_USING_I2C3)
  160. CLK_EnableModuleClock(I2C3_MODULE);
  161. #endif
  162. #if defined(BSP_USING_I2C4)
  163. CLK_EnableModuleClock(I2C4_MODULE);
  164. #endif
  165. #if defined(BSP_USING_I2C5)
  166. CLK_EnableModuleClock(I2C5_MODULE);
  167. #endif
  168. }
  169. static void nu_clock_epwm_init(void)
  170. {
  171. #if defined(BSP_USING_EPWM0)
  172. CLK_EnableModuleClock(EPWM0_MODULE);
  173. #endif
  174. #if defined(BSP_USING_EPWM1)
  175. CLK_EnableModuleClock(EPWM1_MODULE);
  176. #endif
  177. #if defined(BSP_USING_EPWM2)
  178. CLK_EnableModuleClock(EPWM2_MODULE);
  179. #endif
  180. }
  181. static void nu_clock_i2s_init(void)
  182. {
  183. #if defined(BSP_USING_I2S0)
  184. CLK_EnableModuleClock(I2S0_MODULE);
  185. CLK_SetModuleClock(I2S0_MODULE, CLK_CLKSEL4_I2S0SEL_APLL, MODULE_NoMsk);
  186. #endif
  187. #if defined(BSP_USING_I2S1)
  188. CLK_EnableModuleClock(I2S1_MODULE);
  189. CLK_SetModuleClock(I2S1_MODULE, CLK_CLKSEL4_I2S1SEL_APLL, MODULE_NoMsk);
  190. #endif
  191. }
  192. void nu_clock_timer_init(void)
  193. {
  194. #if defined(BSP_USING_TMR0)
  195. CLK_EnableModuleClock(TMR0_MODULE);
  196. CLK_SetModuleClock(TMR0_MODULE, CLK_CLKSEL1_TMR0SEL_HXT, MODULE_NoMsk);
  197. #endif
  198. #if defined(BSP_USING_TMR1)
  199. CLK_EnableModuleClock(TMR1_MODULE);
  200. CLK_SetModuleClock(TMR1_MODULE, CLK_CLKSEL1_TMR1SEL_HXT, MODULE_NoMsk);
  201. #endif
  202. #if defined(BSP_USING_TMR2)
  203. CLK_EnableModuleClock(TMR2_MODULE);
  204. CLK_SetModuleClock(TMR2_MODULE, CLK_CLKSEL1_TMR2SEL_HXT, MODULE_NoMsk);
  205. #endif
  206. #if defined(BSP_USING_TMR3)
  207. CLK_EnableModuleClock(TMR3_MODULE);
  208. CLK_SetModuleClock(TMR3_MODULE, CLK_CLKSEL1_TMR3SEL_HXT, MODULE_NoMsk);
  209. #endif
  210. #if defined(BSP_USING_TMR4)
  211. CLK_EnableModuleClock(TMR4_MODULE);
  212. CLK_SetModuleClock(TMR4_MODULE, CLK_CLKSEL1_TMR4SEL_HXT, MODULE_NoMsk);
  213. #endif
  214. #if defined(BSP_USING_TMR5)
  215. CLK_EnableModuleClock(TMR5_MODULE);
  216. CLK_SetModuleClock(TMR5_MODULE, CLK_CLKSEL1_TMR5SEL_HXT, MODULE_NoMsk);
  217. #endif
  218. #if defined(BSP_USING_TMR6)
  219. CLK_EnableModuleClock(TMR6_MODULE);
  220. CLK_SetModuleClock(TMR6_MODULE, CLK_CLKSEL1_TMR6SEL_HXT, MODULE_NoMsk);
  221. #endif
  222. #if defined(BSP_USING_TMR7)
  223. CLK_EnableModuleClock(TMR7_MODULE);
  224. CLK_SetModuleClock(TMR7_MODULE, CLK_CLKSEL1_TMR7SEL_HXT, MODULE_NoMsk);
  225. #endif
  226. #if defined(BSP_USING_TMR8)
  227. CLK_EnableModuleClock(TMR8_MODULE);
  228. CLK_SetModuleClock(TMR8_MODULE, CLK_CLKSEL2_TMR8SEL_HXT, MODULE_NoMsk);
  229. #endif
  230. #if defined(BSP_USING_TMR9)
  231. CLK_EnableModuleClock(TMR9_MODULE);
  232. CLK_SetModuleClock(TMR9_MODULE, CLK_CLKSEL2_TMR9SEL_HXT, MODULE_NoMsk);
  233. #endif
  234. #if defined(BSP_USING_TMR10)
  235. CLK_EnableModuleClock(TMR10_MODULE);
  236. CLK_SetModuleClock(TMR10_MODULE, CLK_CLKSEL2_TMR10SEL_HXT, MODULE_NoMsk);
  237. #endif
  238. #if defined(BSP_USING_TMR11)
  239. CLK_EnableModuleClock(TMR11_MODULE);
  240. CLK_SetModuleClock(TMR11_MODULE, CLK_CLKSEL2_TMR11SEL_HXT, MODULE_NoMsk);
  241. #endif
  242. }
  243. void nu_clock_wdt_init(void)
  244. {
  245. #if defined(BSP_USING_WDT0)
  246. CLK_EnableModuleClock(WDT0_MODULE);
  247. CLK_SetModuleClock(WDT0_MODULE, CLK_CLKSEL3_WDT0SEL_PCLK3_DIV4096, MODULE_NoMsk);
  248. #endif
  249. #if defined(BSP_USING_WDT1)
  250. CLK_EnableModuleClock(WDT1_MODULE);
  251. CLK_SetModuleClock(WDT1_MODULE, CLK_CLKSEL3_WDT1SEL_PCLK3_DIV4096, MODULE_NoMsk);
  252. #endif
  253. #if defined(BSP_USING_WDT2)
  254. CLK_EnableModuleClock(WDT2_MODULE);
  255. CLK_SetModuleClock(WDT2_MODULE, CLK_CLKSEL3_WDT2SEL_PCLK3_DIV4096, MODULE_NoMsk);
  256. #endif
  257. }
  258. void nu_clock_canfd_init(void)
  259. {
  260. #if defined(BSP_USING_CANFD0)
  261. CLK_EnableModuleClock(CANFD0_MODULE);
  262. CLK_SetModuleClock(CANFD0_MODULE, CLK_CLKSEL4_CANFD0SEL_APLL, CLK_CLKDIV0_CANFD0(1));
  263. #endif
  264. #if defined(BSP_USING_CANFD1)
  265. CLK_EnableModuleClock(CANFD1_MODULE);
  266. CLK_SetModuleClock(CANFD1_MODULE, CLK_CLKSEL4_CANFD1SEL_APLL, CLK_CLKDIV0_CANFD1(1));
  267. #endif
  268. #if defined(BSP_USING_CANFD2)
  269. CLK_EnableModuleClock(CANFD2_MODULE);
  270. CLK_SetModuleClock(CANFD2_MODULE, CLK_CLKSEL4_CANFD2SEL_APLL, CLK_CLKDIV0_CANFD2(1));
  271. #endif
  272. #if defined(BSP_USING_CANFD3)
  273. CLK_EnableModuleClock(CANFD3_MODULE);
  274. CLK_SetModuleClock(CANFD3_MODULE, CLK_CLKSEL4_CANFD3SEL_APLL, CLK_CLKDIV0_CANFD3(1));
  275. #endif
  276. }
  277. void nu_clock_sc_init(void)
  278. {
  279. #if defined(BSP_USING_SCUART0)
  280. CLK_EnableModuleClock(SC0_MODULE);
  281. CLK_SetModuleClock(SC0_MODULE, CLK_CLKSEL4_SC0SEL_HXT, MODULE_NoMsk);
  282. #endif
  283. #if defined(BSP_USING_SCUART1)
  284. CLK_EnableModuleClock(SC1_MODULE);
  285. CLK_SetModuleClock(SC1_MODULE, CLK_CLKSEL4_SC1SEL_HXT, MODULE_NoMsk);
  286. #endif
  287. }
  288. void nu_clock_rtc_init(void)
  289. {
  290. #if defined(BSP_USING_RTC)
  291. CLK_EnableModuleClock(RTC_MODULE);
  292. #endif
  293. }
  294. #if !defined(USE_MA35D1_SUBM)
  295. static void nu_clock_usbd_init(void)
  296. {
  297. }
  298. static void nu_clock_usbh_init(void)
  299. {
  300. }
  301. static void nu_clock_gmac_init(void)
  302. {
  303. #if defined(BSP_USING_GMAC0)
  304. CLK_EnableModuleClock(GMAC0_MODULE);
  305. #endif
  306. #if defined(BSP_USING_GMAC1)
  307. CLK_EnableModuleClock(GMAC1_MODULE);
  308. #endif
  309. }
  310. static void nu_clock_sdh_init(void)
  311. {
  312. #if defined(BSP_USING_SDH0)
  313. CLK_EnableModuleClock(SDH0_MODULE);
  314. #endif
  315. #if defined(BSP_USING_SDH1)
  316. CLK_EnableModuleClock(SDH1_MODULE);
  317. #endif
  318. }
  319. static void nu_clock_disp_init(void)
  320. {
  321. #if defined(BSP_USING_DISP)
  322. CLK_EnableModuleClock(DCU_MODULE);
  323. CLK_SetModuleClock(DCU_MODULE, CLK_CLKSEL0_DCUSEL_EPLL_DIV2, MODULE_NoMsk);
  324. // CLK_SetModuleClock(DCUP_MODULE, CLK_CLKSEL0_DCUPSEL_VPLL, MODULE_NoMsk);
  325. #endif
  326. }
  327. void nu_clock_base_init(void)
  328. {
  329. /* Enable HXT, LXT */
  330. CLK->PWRCTL |= (CLK_PWRCTL_HXTEN_Msk | CLK_PWRCTL_HIRCEN_Msk | CLK_PWRCTL_LXTEN_Msk | CLK_PWRCTL_LIRCEN_Msk);
  331. /* Waiting clock ready */
  332. CLK_WaitClockReady(CLK_STATUS_HXTSTB_Msk);
  333. /* Waiting clock ready */
  334. CLK_WaitClockReady(CLK_STATUS_LXTSTB_Msk);
  335. /* Waiting clock ready */
  336. CLK_WaitClockReady(CLK_STATUS_HIRCSTB_Msk);
  337. /* Waiting clock ready */
  338. CLK_WaitClockReady(CLK_STATUS_LIRCSTB_Msk);
  339. }
  340. #endif
  341. static void nu_clock_hwsem_init(void)
  342. {
  343. #if defined(BSP_USING_HWSEM0)
  344. CLK_EnableModuleClock(HWSEM0_MODULE);
  345. #endif
  346. }
  347. static void nu_clock_whc_init(void)
  348. {
  349. #if defined(BSP_USING_WHC0)
  350. CLK_EnableModuleClock(WHC0_MODULE);
  351. #endif
  352. #if defined(BSP_USING_WHC1)
  353. CLK_EnableModuleClock(WHC1_MODULE);
  354. #endif
  355. }
  356. void nu_clock_init(void)
  357. {
  358. #if !defined(USE_MA35D1_SUBM)
  359. nu_clock_base_init();
  360. nu_clock_gmac_init();
  361. nu_clock_sdh_init();
  362. nu_clock_usbd_init();
  363. nu_clock_usbh_init();
  364. nu_clock_disp_init();
  365. #endif
  366. nu_clock_whc_init();
  367. nu_clock_hwsem_init();
  368. nu_clock_pdma_init();
  369. nu_clock_gpio_init();
  370. nu_clock_uart_init();
  371. nu_clock_qspi_init();
  372. nu_clock_spi_init();
  373. nu_clock_i2c_init();
  374. nu_clock_epwm_init();
  375. nu_clock_i2s_init();
  376. nu_clock_canfd_init();
  377. nu_clock_sc_init();
  378. nu_clock_timer_init();
  379. nu_clock_wdt_init();
  380. nu_clock_rtc_init();
  381. }
  382. void nu_clock_deinit(void)
  383. {
  384. }