driver_clk.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. /*
  2. * @File name : driver_clk.h
  3. * @Author : Bluetrum IOT Team
  4. * @Date : 2023-04-04
  5. * @Description : This file contains all the functions prototypes for the CLK library.
  6. *
  7. * Copyright (c) by Bluetrum, All Rights Reserved.
  8. */
  9. #ifndef _DRIVER_CLK_H
  10. #define _DRIVER_CLK_H
  11. #include "global.h"
  12. #include "api.h"
  13. #define CLK_GATE0_ROM0 ((uint32_t)(0x00000001)) /* CLKGAT0[0] */
  14. #define CLK_GATE0_ROM1 ((uint32_t)(0x00000002)) /* CLKGAT0[1] */
  15. #define CLK_GATE0_RAM0 ((uint32_t)(0x00000004)) /* CLKGAT0[2] */
  16. #define CLK_GATE0_RAM1 ((uint32_t)(0x00000008)) /* CLKGAT0[3] */
  17. #define CLK_GATE0_RAM2 ((uint32_t)(0x00000010)) /* CLKGAT0[4] */
  18. #define CLK_GATE0_RAM3 ((uint32_t)(0x00000020)) /* CLKGAT0[5] */
  19. #define CLK_GATE0_RAM4 ((uint32_t)(0x00000040)) /* CLKGAT0[6] */
  20. #define CLK_GATE0_TMR0 ((uint32_t)(0x00000100)) /* CLKGAT0[8] */
  21. #define CLK_GATE0_SD0 ((uint32_t)(0x00000200)) /* CLKGAT0[9] */
  22. #define CLK_GATE0_UART ((uint32_t)(0x00000400)) /* CLKGAT0[10] */
  23. #define CLK_GATE0_HSUART ((uint32_t)(0x00000800)) /* CLKGAT0[11] */
  24. #define CLK_GATE0_DAC ((uint32_t)(0x00001000)) /* CLKGAT0[12] */
  25. #define CLK_GATE0_SARADC ((uint32_t)(0x00002000)) /* CLKGAT0[13] */
  26. #define CLK_GATE0_USB ((uint32_t)(0x00004000)) /* CLKGAT0[14] */
  27. #define CLK_GATE0_LP ((uint32_t)(0x00008000)) /* CLKGAT0[15] */
  28. #define CLK_GATE0_AUDEC ((uint32_t)(0x00010000)) /* CLKGAT0[16] */
  29. #define CLK_GATE0_POTR ((uint32_t)(0x00020000)) /* CLKGAT0[17] */
  30. #define CLK_GATE0_MBIST ((uint32_t)(0x00040000)) /* CLKGAT0[18] */
  31. #define CLK_GATE0_SPI0 ((uint32_t)(0x00080000)) /* CLKGAT0[19] */
  32. #define CLK_GATE0_BT ((uint32_t)(0x00100000)) /* CLKGAT0[20] */
  33. #define CLK_GATE0_UDET ((uint32_t)(0x00200000)) /* CLKGAT0[21] */
  34. #define CLK_GATE0_SDADCL ((uint32_t)(0x00400000)) /* CLKGAT0[22] */
  35. #define CLK_GATE0_SDADCR ((uint32_t)(0x00800000)) /* CLKGAT0[23] */
  36. #define CLK_GATE0_TMR1 ((uint32_t)(0x01000000)) /* CLKGAT0[24] */
  37. #define CLK_GATE0_TMR2 ((uint32_t)(0x02000000)) /* CLKGAT0[25] */
  38. #define CLK_GATE0_RTCC ((uint32_t)(0x04000000)) /* CLKGAT0[26] */
  39. #define CLK_GATE0_RECSRC ((uint32_t)(0x08000000)) /* CLKGAT0[27] */
  40. #define CLK_GATE0_SDADCM ((uint32_t)(0x10000000)) /* CLKGAT0[28] */
  41. #define CLK_GATE0_SPF ((uint32_t)(0x20000000)) /* CLKGAT0[29] */
  42. #define CLK_GATE0_AEC ((uint32_t)(0x40000000)) /* CLKGAT0[30] */
  43. #define CLK_GATE0_CVSD ((uint32_t)(0x80000000)) /* CLKGAT0[31] */
  44. #define CLK_GATE1_IRTX ((uint32_t)(0x00000004)) /* CLKGAT1[2] */
  45. #define CLK_GATE1_IRRX ((uint32_t)(0x00000008)) /* CLKGAT1[3] */
  46. #define CLK_GATE1_SBCEC ((uint32_t)(0x00000020)) /* CLKGAT1[5] */
  47. #define CLK_GATE1_LPBK ((uint32_t)(0x00000040)) /* CLKGAT1[6] */
  48. #define CLK_GATE1_PLC ((uint32_t)(0x00000080)) /* CLKGAT1[7] */
  49. #define CLK_GATE1_TMR3 ((uint32_t)(0x00000100)) /* CLKGAT1[8] */
  50. #define CLK_GATE1_UDET ((uint32_t)(0x00000800)) /* CLKGAT1[11] */
  51. #define CLK_GATE1_SPI1 ((uint32_t)(0x00001000)) /* CLKGAT1[12] */
  52. #define CLK_GATE1_QDECX ((uint32_t)(0x00002000)) /* CLKGAT1[13] */
  53. #define CLK_GATE1_QDECY ((uint32_t)(0x00004000)) /* CLKGAT1[14] */
  54. #define CLK_GATE1_PIANO ((uint32_t)(0x00008000)) /* CLKGAT1[15] */
  55. #define CLK_GATE1_TICK0 ((uint32_t)(0x00010000)) /* CLKGAT1[16] */
  56. #define CLK_GATE1_QDEC ((uint32_t)(0x00020000)) /* CLKGAT1[17] */
  57. #define CLK_GATE1_LPWM ((uint32_t)(0x00040000)) /* CLKGAT1[18] */
  58. #define CLK_GATE1_AECRAM ((uint32_t)(0x00800000)) /* CLKGAT1[23] */
  59. #define CLK_GATE1_ROM2 ((uint32_t)(0x01000000)) /* CLKGAT1[24] */
  60. #define CLK_GATE1_ROM3 ((uint32_t)(0x02000000)) /* CLKGAT1[25] */
  61. #define CLK_GATE1_FREQDET ((uint32_t)(0x04000000)) /* CLKGAT1[26] */
  62. #define CLK_GATE1_PBF ((uint32_t)(0x08000000)) /* CLKGAT1[27] */
  63. #define CLK_GATE1_DBG ((uint32_t)(0x10000000)) /* CLKGAT1[28] */
  64. #define CLK_GATE1_X24M ((uint32_t)(0x20000000)) /* CLKGAT1[29] */
  65. #define CLK_GATE1_M2M ((uint32_t)(0x40000000)) /* CLKGAT1[30] */
  66. #define CLK_GATE1_EFUS ((uint32_t)(0x80000000)) /* CLKGAT1[31] */
  67. #define CLK_GATE2_IIC ((uint32_t)(0x00000001)) /* CLKGAT2[0] */
  68. #define CLK_GATE2_IRFLT ((uint32_t)(0x00000002)) /* CLKGAT2[1] */
  69. #define CLK_GATE2_LEDC ((uint32_t)(0x00000004)) /* CLKGAT2[2] */
  70. #define CLK_GATE2_SYSX24M ((uint32_t)(0x00000100)) /* CLKGAT2[8] */
  71. #define CLK_GATE2_X48M ((uint32_t)(0x00000200)) /* CLKGAT2[9] */
  72. #define CLK_GATE2_BSP ((uint32_t)(0x00000400)) /* CLKGAT2[10] */
  73. #define CLK_GATE2_CLKOUTDIV2 ((uint32_t)(0x00000800)) /* CLKGAT2[11] */
  74. #define CLK_GATE2_CLKOUTDIV4 ((uint32_t)(0x00001000)) /* CLKGAT2[12] */
  75. #define CLK_GATE2_SYSDIV ((uint32_t)(0x00002000)) /* CLKGAT2[13] */
  76. #define CLK_GATE2_ADDIV ((uint32_t)(0x00004000)) /* CLKGAT2[14] */
  77. #define CLK_GATE2_DAC_CLK ((uint32_t)(0x00008000)) /* CLKGAT2[15] */
  78. #define CLK_GATE2_DAC_CLK25 ((uint32_t)(0x00010000)) /* CLKGAT2[16] */
  79. #define CLK_GATE2_DAC_DIV2SEL ((uint32_t)(0x00020000)) /* CLKGAT2[17] */
  80. #define CLK_GATE2_DRC_PCLK ((uint32_t)(0x00040000)) /* CLKGAT2[18] */
  81. #define CLK_GATE2_RNN ((uint32_t)(0x00080000)) /* CLKGAT2[19] */
  82. #define CLK_GATE2_RDFT ((uint32_t)(0x00100000)) /* CLKGAT2[20] */
  83. #define CLK_GATE2_HWMATH ((uint32_t)(0x00200000)) /* CLKGAT2[21] */
  84. /**
  85. * @brief Clock Status Enumeration.
  86. */
  87. typedef enum {
  88. CLK_DIS = 0,
  89. CLK_EN = 1,
  90. } CLK_STATE;
  91. /**
  92. * @brief Clock Info Type Enumeration.
  93. */
  94. typedef enum {
  95. CLK_VALUE_MODE_IDX = 0,
  96. CLK_VALUE_MODE_FREQ = 1,
  97. } CLK_VALUE_MODE_TYPEDEF;
  98. /**
  99. * @brief Clock of CLKOUT Enumeration.
  100. */
  101. typedef enum {
  102. CLK_CLKOUT_XOSC24M = 1,
  103. CLK_CLKOUT_X24M_32K,
  104. CLK_CLKOUT_OSC32K,
  105. CLK_CLKOUT_PLLDIV4,
  106. CLK_CLKOUT_XOSC48M,
  107. CLK_CLKOUT_DAC_CLKPPP,
  108. CLK_CLKOUT_RC2M,
  109. CLK_CLKOUT_RTC_RC2M,
  110. CLK_CLKOUT_SYS_CLK,
  111. CLK_CLKOUT_BT24M_CLK,
  112. CLK_CLKOUT_TKA_OUT,
  113. CLK_CLKOUT_BTLP_CLK,
  114. } CLK_CLKOUT_TYPEDEF;
  115. /**
  116. * @brief Clock of CLK32K_RTC Enumeration.
  117. */
  118. typedef enum {
  119. CLK_CLK32K_RTC_1BIT = 0,
  120. CLK_CLK32K_RTC_RC2M_RTC,
  121. CLK_CLK32K_RTC_SNF_RC_RTC,
  122. CLK_CLK32K_RTC_X24MDIV12_RTC,
  123. } CLK_CLK32K_RTC_TYPEDEF;
  124. /**
  125. * @brief Clock of HSUART_CLK Enumeration.
  126. */
  127. typedef enum {
  128. CLK_HSUT0_CLK_XOSC24M_CLK = 0,
  129. CLK_HSUT0_CLK_XOSC48M,
  130. CLK_HSUT0_CLK_PLLDIV2_CLK,
  131. CLK_HSUT0_CLK_UDET_CLKPP,
  132. } CLK_HSUART_CLK_TYPEDEF;
  133. /**
  134. * @brief Clock of SARADC_CLK Enumeration.
  135. */
  136. typedef enum {
  137. CLK_SARADC_CLK_RC2M_CLK = 0,
  138. CLK_SARADC_CLK_X24M_CLKDIV4,
  139. CLK_SARADC_CLK_X24M_CLKDIV2,
  140. CLK_SARADC_CLK_X24Md32K_CLK,
  141. } CLK_SARADC_CLK_TYPEDEF;
  142. /**
  143. * @brief Clock of UDET_CLK Enumeration.
  144. */
  145. typedef enum {
  146. CLK_UDET_CLK_RC2M_CLK = 0,
  147. CLK_UDET_CLK_RTC_RC2M,
  148. XOSC24M_CLK,
  149. XOSC48M,
  150. } CLK_UDET_CLK_TYPEDEF;
  151. /**
  152. * @brief Clock of TMR_INC Enumeration.
  153. */
  154. typedef enum {
  155. CLK_TMR_INC_OSC32K = 0,
  156. CLK_TMR_INC_CLKOUOT_PIN,
  157. CLK_TMR_INC_X24M_DIV_CLK,
  158. CLK_TMR_INC_RC2M_D0,
  159. } CLK_TMR_INC_TYPEDEF;
  160. /**
  161. * @brief Clock of UART_INC Enumeration.
  162. */
  163. typedef enum {
  164. CLK_UART_INC_X24M_DIV_CLK = 0,
  165. CLK_UART_INC_X24M_CLKDIV4,
  166. } CLK_UART_INC_TPYEDEF;
  167. /**
  168. * @brief Clock of CLK2M_KS(KeyScan) Enumeration.
  169. */
  170. typedef enum {
  171. CLK_CLK2M_KS_1BIT = 0,
  172. CLK_CLK2M_KS_RC2M_RTC,
  173. CLK_CLK2M_KS_SNF_RC_RTC,
  174. CLK_CLK2M_KS_X24MDIV12_RTC,
  175. } CLK_CLK2M_KS_TYPEDEF;
  176. /**
  177. * @brief Clock of SDADDA_CLK Enumeration.
  178. */
  179. typedef enum {
  180. CLK_SDADDA_CLK_1BIT = 0,
  181. CLK_SDADDA_CLK_ADDA_CLK24_A,
  182. CLK_SDADDA_CLK_XOSC24M_CLK,
  183. CLK_SDADDA_CLK_PB4,
  184. CLK_SDADDA_CLK_XOSC24M_CLK_2PLL = 5,
  185. } CLK_SDADDA_CLK_TYPEDEF;
  186. /**
  187. * @brief Clock of LEDC_CLK Enumeration.
  188. */
  189. typedef enum {
  190. CLK_LEDC_CLK_XOSC24M = 0,
  191. CLK_LEDC_CLK_X24M_CLKDIV2,
  192. } CLK_LEDC_CLK_TYPEDEF;
  193. /**
  194. * @brief Clock of TOUCH_KEY Enumeration.
  195. */
  196. typedef enum {
  197. CLK_TOUCH_KEY_RC2M = 1,
  198. CLK_TOUCH_KEY_CLK_XOSC24M = 3,
  199. } CLK_TOUCH_KEY_TYPEDEF;
  200. /**
  201. * @brief Clock of TTMR_INC(tick0) Enumeration.
  202. */
  203. typedef enum {
  204. CLK_TTMR_INC_OSC_32K = 0,
  205. CLK_TTMR_INC_CLKOUT_PIN,
  206. CLK_TTMR_INC_X24M_DIV_CLK,
  207. CLK_TTMR_INC_RC2M_D0,
  208. } CLK_TTMR_INC_TYPEDEF;
  209. void clk_gate0_cmd(uint32_t clock_gate, CLK_STATE state);
  210. void clk_gate1_cmd(uint32_t clock_gate, CLK_STATE state);
  211. void clk_gate2_cmd(uint32_t clock_gate, CLK_STATE state);
  212. void clk_clkout_set(CLK_CLKOUT_TYPEDEF clk_sel, uint8_t div, CLK_STATE state);
  213. void clk_clk32k_rtc_set(CLK_CLK32K_RTC_TYPEDEF clk_sel);
  214. void clk_hsut0_clk_set(CLK_HSUART_CLK_TYPEDEF clk_sel, uint8_t div);
  215. void clk_saradc_clk_set(CLK_SARADC_CLK_TYPEDEF clk_sel);
  216. void clk_udet_clk_set(CLK_UDET_CLK_TYPEDEF clk_sel);
  217. void clk_tmr_inc_set(CLK_TMR_INC_TYPEDEF clk_sel);
  218. void clk_uart_inc_set(CLK_UART_INC_TPYEDEF clk_sel);
  219. void clk_clk2m_ks_set(CLK_CLK2M_KS_TYPEDEF clk_sel);
  220. void clk_sdadda_clk_set(CLK_SDADDA_CLK_TYPEDEF clk_sel, uint8_t div);
  221. void clk_ledc_clk_set(CLK_LEDC_CLK_TYPEDEF clk_sel);
  222. void clk_touch_key_clk_set(CLK_TOUCH_KEY_TYPEDEF clk_sel);
  223. void clk_ttmr_inc_set(CLK_TTMR_INC_TYPEDEF clk_sel);
  224. uint32_t clk_clk32k_rtc_get(CLK_VALUE_MODE_TYPEDEF mode);
  225. uint32_t clk_hsut0_clk_get(CLK_VALUE_MODE_TYPEDEF mode);
  226. uint32_t clk_saradc_clk_get(CLK_VALUE_MODE_TYPEDEF mode);
  227. uint32_t clk_udet_clk_get(CLK_VALUE_MODE_TYPEDEF mode);
  228. uint32_t clk_tmr_inc_get(CLK_VALUE_MODE_TYPEDEF mode);
  229. uint32_t clk_uart_inc_get(CLK_VALUE_MODE_TYPEDEF mode);
  230. uint32_t clk_clk2m_ks_get(CLK_VALUE_MODE_TYPEDEF mode);
  231. uint32_t clk_sdadda_clk_get(CLK_VALUE_MODE_TYPEDEF mode);
  232. uint32_t clk_ledc_clk_get(CLK_VALUE_MODE_TYPEDEF mode);
  233. uint32_t clk_touch_key_clk_get(CLK_VALUE_MODE_TYPEDEF mode);
  234. uint32_t clk_ttmr_inc_get(CLK_VALUE_MODE_TYPEDEF mode);
  235. #endif // _DRIVER_CLK_H