t_icu.c 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. #include "t_define.h"
  2. #include "t_bk3231sf.h"
  3. #include "t_icu.h"
  4. void IcuPphCfg(uint8 pph, uint8 clksrc, uint8 clkfreq, uint8 clkprediv, uint8 clken, uint8 inten, uint8 wakeen, uint8 fiqprio)
  5. {
  6. if(pph == ICU_PPH_CORE)
  7. {
  8. }
  9. else if(pph == ICU_PPH_ADC)
  10. {
  11. REG_ICU_ADC_CLK_CFG = SET_VALUE(REG_ICU_ADC_CLK_CFG,
  12. (BM_ICU_ADC_CLK_DIV|BM_ICU_ADC_CLK_DISEN),
  13. (((uint32)clkprediv<<BO_ICU_ADC_CLK_DIV) | ((uint32)clken<<BO_ICU_ADC_CLK_DISEN)));
  14. REG_ICU_PPH_INT_EN = SET_VALUE(REG_ICU_PPH_INT_EN,
  15. (BM_ICU_INT_ADC|BM_ICU_INT_ADC_WAKEUP),
  16. (((uint32)inten<<BO_ICU_INT_ADC) | ((uint32)wakeen<<BO_ICU_INT_ADC_WAKEUP)));
  17. REG_ICU_PPH_INT_FIQ_PRIORITY_EN = SET_VALUE(REG_ICU_PPH_INT_FIQ_PRIORITY_EN,
  18. (BM_ICU_INT_ADC|BM_ICU_INT_ADC_WAKEUP),
  19. (((uint32)(inten&fiqprio)<<BO_ICU_INT_ADC) | ((uint32)(wakeen&fiqprio)<<BO_ICU_INT_ADC_WAKEUP)));
  20. }
  21. else if(pph == ICU_PPH_UART)
  22. {
  23. REG_ICU_UART_CLK_CFG = SET_VALUE(REG_ICU_I2C_CLK_CFG,
  24. BM_ICU_UART_CLK_DISEN,
  25. ((uint32)clken<<BO_ICU_UART_CLK_DISEN));
  26. REG_ICU_PPH_INT_EN = SET_VALUE(REG_ICU_PPH_INT_EN,
  27. (BM_ICU_INT_UART|BM_ICU_INT_UART_WAKEUP),
  28. (((uint32)inten<<BO_ICU_INT_UART) | ((uint32)wakeen<<BO_ICU_INT_UART_WAKEUP)));
  29. REG_ICU_PPH_INT_FIQ_PRIORITY_EN = SET_VALUE(REG_ICU_PPH_INT_FIQ_PRIORITY_EN,
  30. (BM_ICU_INT_UART|BM_ICU_INT_UART_WAKEUP),
  31. (((uint32)(inten&fiqprio)<<BO_ICU_INT_UART) | ((uint32)(wakeen&fiqprio)<<BO_ICU_INT_UART_WAKEUP)));
  32. }
  33. else if(pph == ICU_PPH_I2C0)
  34. {
  35. REG_ICU_I2C_CLK_CFG = SET_VALUE(REG_ICU_I2C_CLK_CFG,
  36. BM_ICU_I2C0_CLK_DISEN,
  37. ((uint32)clken<<BO_ICU_I2C0_CLK_DISEN));
  38. REG_ICU_PPH_INT_EN = SET_VALUE(REG_ICU_PPH_INT_EN,
  39. (BM_ICU_INT_I2C0|BM_ICU_INT_I2C0_WAKEUP),
  40. (((uint32)inten<<BO_ICU_INT_I2C0) | ((uint32)wakeen<<BO_ICU_INT_I2C0_WAKEUP)));
  41. REG_ICU_PPH_INT_FIQ_PRIORITY_EN = SET_VALUE(REG_ICU_PPH_INT_FIQ_PRIORITY_EN,
  42. (BM_ICU_INT_I2C0|BM_ICU_INT_I2C0_WAKEUP),
  43. (((uint32)(inten&fiqprio)<<BO_ICU_INT_I2C0) | ((uint32)(wakeen&fiqprio)<<BO_ICU_INT_I2C0_WAKEUP)));
  44. }
  45. else if(pph == ICU_PPH_I2C1)
  46. {
  47. REG_ICU_I2C_CLK_CFG = SET_VALUE(REG_ICU_I2C_CLK_CFG,
  48. BM_ICU_I2C1_CLK_DISEN,
  49. ((uint32)clken<<BO_ICU_I2C1_CLK_DISEN));
  50. REG_ICU_PPH_INT_EN = SET_VALUE(REG_ICU_PPH_INT_EN,
  51. (BM_ICU_INT_I2C1|BM_ICU_INT_I2C1_WAKEUP),
  52. (((uint32)inten<<BO_ICU_INT_I2C1) | ((uint32)wakeen<<BO_ICU_INT_I2C1_WAKEUP)));
  53. REG_ICU_PPH_INT_FIQ_PRIORITY_EN = SET_VALUE(REG_ICU_PPH_INT_FIQ_PRIORITY_EN,
  54. (BM_ICU_INT_I2C1|BM_ICU_INT_I2C1_WAKEUP),
  55. (((uint32)(inten&fiqprio)<<BO_ICU_INT_I2C1) | ((uint32)(wakeen&fiqprio)<<BO_ICU_INT_I2C1_WAKEUP)));
  56. }
  57. else if(pph == ICU_PPH_SPI)
  58. {
  59. }
  60. else if(pph == ICU_PPH_CEVA)
  61. {
  62. }
  63. else if(pph == ICU_PPH_WD)
  64. {
  65. }
  66. else if(pph == ICU_PPH_BK24)
  67. {
  68. }
  69. else if(pph == ICU_PPH_LPO)
  70. {
  71. }
  72. else if(pph == ICU_PPH_RTC)
  73. {
  74. REG_ICU_RTC_CLK_CFG = SET_VALUE(REG_ICU_RTC_CLK_CFG,
  75. BM_ICU_RTC_CLK_DISEN,
  76. ((uint32)clken<<BO_ICU_RTC_CLK_DISEN));
  77. REG_ICU_PPH_INT_EN = SET_VALUE(REG_ICU_PPH_INT_EN,
  78. (BM_ICU_INT_RTC|BM_ICU_INT_RTC_WAKEUP),
  79. (((uint32)inten<<BO_ICU_INT_RTC) | ((uint32)wakeen<<BO_ICU_INT_RTC_WAKEUP)));
  80. REG_ICU_PPH_INT_FIQ_PRIORITY_EN = SET_VALUE(REG_ICU_PPH_INT_FIQ_PRIORITY_EN,
  81. (BM_ICU_INT_PWM|BM_ICU_INT_PWM_WAKEUP),
  82. (((uint32)(inten&fiqprio)<<BO_ICU_INT_PWM) | ((uint32)(wakeen&fiqprio)<<BO_ICU_INT_PWM_WAKEUP)));
  83. }
  84. else if(pph == ICU_PPH_PWM0)
  85. {
  86. REG_ICU_PWM0_CLK_CFG = SET_VALUE(REG_ICU_PWM0_CLK_CFG,
  87. (BM_ICU_PWM0_CLK_SEL|BM_ICU_PWM0_CLK_DISEN),
  88. (((uint32)clkfreq<<BO_ICU_PWM0_CLK_SEL) | ((uint32)clken<<BO_ICU_PWM0_CLK_DISEN)));
  89. REG_ICU_PPH_INT_EN = SET_VALUE(REG_ICU_PPH_INT_EN,
  90. (BM_ICU_INT_PWM|BM_ICU_INT_PWM_WAKEUP),
  91. (((uint32)inten<<BO_ICU_INT_PWM) | ((uint32)wakeen<<BO_ICU_INT_PWM_WAKEUP)));
  92. REG_ICU_PPH_INT_FIQ_PRIORITY_EN = SET_VALUE(REG_ICU_PPH_INT_FIQ_PRIORITY_EN,
  93. (BM_ICU_INT_PWM|BM_ICU_INT_PWM_WAKEUP),
  94. (((uint32)(inten&fiqprio)<<BO_ICU_INT_PWM) | ((uint32)(wakeen&fiqprio)<<BO_ICU_INT_PWM_WAKEUP)));
  95. }
  96. else if(pph == ICU_PPH_PWM1)
  97. {
  98. REG_ICU_PWM1_CLK_CFG = SET_VALUE(REG_ICU_PWM1_CLK_CFG,
  99. (BM_ICU_PWM1_CLK_SEL|BM_ICU_PWM1_CLK_DISEN),
  100. (((uint32)clkfreq<<BO_ICU_PWM1_CLK_SEL) | ((uint32)clken<<BO_ICU_PWM1_CLK_DISEN)));
  101. REG_ICU_PPH_INT_EN = SET_VALUE(REG_ICU_PPH_INT_EN,
  102. (BM_ICU_INT_PWM|BM_ICU_INT_PWM_WAKEUP),
  103. (((uint32)inten<<BO_ICU_INT_PWM) | ((uint32)wakeen<<BO_ICU_INT_PWM_WAKEUP)));
  104. REG_ICU_PPH_INT_FIQ_PRIORITY_EN = SET_VALUE(REG_ICU_PPH_INT_FIQ_PRIORITY_EN,
  105. (BM_ICU_INT_PWM|BM_ICU_INT_PWM_WAKEUP),
  106. (((uint32)(inten&fiqprio)<<BO_ICU_INT_PWM) | ((uint32)(wakeen&fiqprio)<<BO_ICU_INT_PWM_WAKEUP)));
  107. }
  108. else if(pph == ICU_PPH_PWM2)
  109. {
  110. REG_ICU_PWM2_CLK_CFG = SET_VALUE(REG_ICU_PWM2_CLK_CFG,
  111. (BM_ICU_PWM2_CLK_SEL|BM_ICU_PWM2_CLK_DISEN),
  112. (((uint32)clkfreq<<BO_ICU_PWM2_CLK_SEL) | ((uint32)clken<<BO_ICU_PWM2_CLK_DISEN)));
  113. REG_ICU_PPH_INT_EN = SET_VALUE(REG_ICU_PPH_INT_EN,
  114. (BM_ICU_INT_PWM|BM_ICU_INT_PWM_WAKEUP),
  115. (((uint32)inten<<BO_ICU_INT_PWM) | ((uint32)wakeen<<BO_ICU_INT_PWM_WAKEUP)));
  116. REG_ICU_PPH_INT_FIQ_PRIORITY_EN = SET_VALUE(REG_ICU_PPH_INT_FIQ_PRIORITY_EN,
  117. (BM_ICU_INT_PWM|BM_ICU_INT_PWM_WAKEUP),
  118. (((uint32)(inten&fiqprio)<<BO_ICU_INT_PWM) | ((uint32)(wakeen&fiqprio)<<BO_ICU_INT_PWM_WAKEUP)));
  119. }
  120. else if(pph == ICU_PPH_PWM3)
  121. {
  122. REG_ICU_PWM3_CLK_CFG = SET_VALUE(REG_ICU_PWM3_CLK_CFG,
  123. (BM_ICU_PWM3_CLK_SEL|BM_ICU_PWM3_CLK_DISEN),
  124. (((uint32)clkfreq<<BO_ICU_PWM3_CLK_SEL) | ((uint32)clken<<BO_ICU_PWM3_CLK_DISEN)));
  125. REG_ICU_PPH_INT_EN = SET_VALUE(REG_ICU_PPH_INT_EN,
  126. (BM_ICU_INT_PWM|BM_ICU_INT_PWM_WAKEUP),
  127. (((uint32)inten<<BO_ICU_INT_PWM) | ((uint32)wakeen<<BO_ICU_INT_PWM_WAKEUP)));
  128. REG_ICU_PPH_INT_FIQ_PRIORITY_EN = SET_VALUE(REG_ICU_PPH_INT_FIQ_PRIORITY_EN,
  129. (BM_ICU_INT_PWM|BM_ICU_INT_PWM_WAKEUP),
  130. (((uint32)(inten&fiqprio)<<BO_ICU_INT_PWM) | ((uint32)(wakeen&fiqprio)<<BO_ICU_INT_PWM_WAKEUP)));
  131. }
  132. else if(pph == ICU_PPH_PWM4)
  133. {
  134. REG_ICU_PWM4_CLK_CFG = SET_VALUE(REG_ICU_PWM4_CLK_CFG,
  135. (BM_ICU_PWM4_CLK_SEL|BM_ICU_PWM4_CLK_DISEN),
  136. (((uint32)clkfreq<<BO_ICU_PWM4_CLK_SEL) | ((uint32)clken<<BO_ICU_PWM4_CLK_DISEN)));
  137. REG_ICU_PPH_INT_EN = SET_VALUE(REG_ICU_PPH_INT_EN,
  138. (BM_ICU_INT_PWM|BM_ICU_INT_PWM_WAKEUP),
  139. (((uint32)inten<<BO_ICU_INT_PWM) | ((uint32)wakeen<<BO_ICU_INT_PWM_WAKEUP)));
  140. REG_ICU_PPH_INT_FIQ_PRIORITY_EN = SET_VALUE(REG_ICU_PPH_INT_FIQ_PRIORITY_EN,
  141. (BM_ICU_INT_PWM|BM_ICU_INT_PWM_WAKEUP),
  142. (((uint32)(inten&fiqprio)<<BO_ICU_INT_PWM) | ((uint32)(wakeen&fiqprio)<<BO_ICU_INT_PWM_WAKEUP)));
  143. }
  144. else if(pph == ICU_PPH_PWM5)
  145. {
  146. REG_ICU_PWM4_CLK_CFG = SET_VALUE(REG_ICU_PWM4_CLK_CFG,
  147. (BM_ICU_PWM5_CLK_SEL|BM_ICU_PWM5_CLK_DISEN),
  148. (((uint32)clkfreq<<BO_ICU_PWM5_CLK_SEL) | ((uint32)clken<<BO_ICU_PWM5_CLK_DISEN)));
  149. REG_ICU_PPH_INT_EN = SET_VALUE(REG_ICU_PPH_INT_EN,
  150. (BM_ICU_INT_PWM|BM_ICU_INT_PWM_WAKEUP),
  151. (((uint32)inten<<BO_ICU_INT_PWM) | ((uint32)wakeen<<BO_ICU_INT_PWM_WAKEUP)));
  152. REG_ICU_PPH_INT_FIQ_PRIORITY_EN = SET_VALUE(REG_ICU_PPH_INT_FIQ_PRIORITY_EN,
  153. (BM_ICU_INT_PWM|BM_ICU_INT_PWM_WAKEUP),
  154. (((uint32)(inten&fiqprio)<<BO_ICU_INT_PWM) | ((uint32)(wakeen&fiqprio)<<BO_ICU_INT_PWM_WAKEUP)));
  155. }
  156. else if(pph == ICU_PPH_TIMER)
  157. {
  158. REG_ICU_PWM4_CLK_CFG = SET_VALUE(REG_ICU_PWM4_CLK_CFG,
  159. (BM_ICU_TIMER_CLK_SEL|BM_ICU_TIMER_CLK_DISEN),
  160. (((uint32)clkfreq<<BO_ICU_TIMER_CLK_SEL) | ((uint32)clken<<BO_ICU_TIMER_CLK_DISEN)));
  161. REG_ICU_PPH_INT_EN = SET_VALUE(REG_ICU_PPH_INT_EN,
  162. (BM_ICU_INT_TIMER|BM_ICU_INT_TIMER_WAKEUP),
  163. (((uint32)inten<<BO_ICU_INT_TIMER) | ((uint32)wakeen<<BO_ICU_INT_TIMER_WAKEUP)));
  164. REG_ICU_PPH_INT_FIQ_PRIORITY_EN = SET_VALUE(REG_ICU_PPH_INT_FIQ_PRIORITY_EN,
  165. (BM_ICU_INT_TIMER|BM_ICU_INT_TIMER_WAKEUP),
  166. (((uint32)(inten&fiqprio)<<BO_ICU_INT_TIMER) | ((uint32)(wakeen&fiqprio)<<BO_ICU_INT_TIMER_WAKEUP)));
  167. }
  168. else if(pph == ICU_PPH_GPIO)
  169. {
  170. REG_ICU_PPH_INT_EN = SET_VALUE(REG_ICU_PPH_INT_EN,
  171. (BM_ICU_INT_GPIO|BM_ICU_INT_GPIO_WAKEUP),
  172. (((uint32)inten<<BO_ICU_INT_GPIO) | ((uint32)wakeen<<BO_ICU_INT_GPIO_WAKEUP)));
  173. REG_ICU_PPH_INT_FIQ_PRIORITY_EN = SET_VALUE(REG_ICU_PPH_INT_FIQ_PRIORITY_EN,
  174. (BM_ICU_INT_GPIO|BM_ICU_INT_GPIO_WAKEUP),
  175. (((uint32)(inten&fiqprio)<<BO_ICU_INT_GPIO) | ((uint32)(wakeen&fiqprio)<<BO_ICU_INT_GPIO_WAKEUP)));
  176. }
  177. }
  178. void IcuPphClkCfg(uint8 pph, uint8 clksrc, uint8 clkfreq, uint8 clkprediv, uint8 clken)
  179. {
  180. }
  181. void IcuPphIntCfg(uint8 pph, uint8 inten, uint8 wakeen, uint8 fiqprio)
  182. {
  183. }
  184. uint32 IcuPphGetIntSta(void)
  185. {
  186. return REG_ICU_PPH_INT_STA;
  187. }
  188. void IcuPphClearIntSta(uint32 intsta)
  189. {
  190. REG_ICU_PPH_INT_STA = intsta;
  191. }
  192. void IcuPphFiqCfg(uint8 en)
  193. {
  194. REG_ICU_FIQ_IRQ_EN = SET_VALUE(REG_ICU_FIQ_IRQ_EN,
  195. BM_ICU_INT_FIQ_EN,
  196. (en<<BO_ICU_INT_FIQ_EN));
  197. }
  198. void IcuPphIrqCfg(uint8 en)
  199. {
  200. REG_ICU_FIQ_IRQ_EN = SET_VALUE(REG_ICU_FIQ_IRQ_EN,
  201. BM_ICU_INT_IRQ_EN,
  202. (en<<BM_ICU_INT_IRQ_EN));
  203. }
  204. void IcuPphIrqFiqCfg(uint8 en)
  205. {
  206. }
  207. void IcuEnterDeepSleep(void)
  208. {
  209. REG_ICU_GPIO4_DEEP_WAKEUP_EN = SET_VALUE(REG_ICU_GPIO4_DEEP_WAKEUP_EN,
  210. BM_ICU_DEEP_SLEEP_CTRL_WORD,
  211. (0x3231ul<<BO_ICU_DEEP_SLEEP_CTRL_WORD));
  212. }