clk_rst.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #ifndef __CLK_RST_H__
  2. #define __CLK_RST_H__
  3. /*******************************************************************************
  4. * Include files
  5. ******************************************************************************/
  6. #include "stdint.h"
  7. /* C binding of definitions if building with C++ compiler */
  8. #ifdef __cplusplus
  9. extern "C"
  10. {
  11. #endif
  12. // the following macro make sure mutual exclusive read-modify-write when enable or disable peripheral clk in multi-task OS
  13. #define PeriClk_MutEnable(__CLK__) ((__CLK__)<32 ? PeriClk0MutEnable(0x1u<<(__CLK__)) : \
  14. PeriClk1MutEnable(0x1u<<((__CLK__)&0x1Fu)))
  15. #define PeriClk_MutDisable(__CLK__) ((__CLK__)<32 ? PeriClk0MutDisable(~(0x1u<<(__CLK__))) : \
  16. PeriClk1MutDisable(~(0x1u<<((__CLK__)&0x1Fu))))
  17. // the following is defined for __CLK__
  18. typedef enum {
  19. PeriClk_Uart0 = 0u,
  20. PeriClk_Uart1 = 1u,
  21. PeriClk_LpUart0 = 2u,
  22. PeriClk_LpUart1 = 3u,
  23. PeriClk_I2c0 = 4u,
  24. PeriClk_I2c1 = 5u,
  25. PeriClk_Spi0 = 6u,
  26. PeriClk_Spi1 = 7u,
  27. PeriClk_BaseTim = 8u,
  28. PeriClk_LpTim0 = 9u,
  29. PeriClk_AdvTim = 10u,
  30. PeriClk_Tim3 = 11u,
  31. PeriClk_Opa = 13u,
  32. PeriClk_Pca = 14u,
  33. PeriClk_Wdt = 15u,
  34. PeriClk_AdcBgr = 16u,
  35. PeriClk_VcLvd = 17u,
  36. PeriClk_Trng = 18u,
  37. PeriClk_Pcnt = 19u,
  38. PeriClk_Rtc = 20u,
  39. PeriClk_Trim = 21u,
  40. PeriClk_Lcd = 22u,
  41. PeriClk_Tick = 24u,
  42. PeriClk_Swd = 25u,
  43. PeriClk_Crc = 26u,
  44. PeriClk_Aes = 27u,
  45. PeriClk_Gpio = 28u,
  46. PeriClk_Dma = 29u,
  47. PeriClk_Flash = 31u,
  48. PeriClk_Dac = 35u,
  49. PeriClk_LpTim1 = 36u,
  50. PeriClk_Uart2 = 40u,
  51. PeriClk_Uart3 = 41u,
  52. } peri_clk_t;
  53. typedef enum {
  54. ResetUart0 = 0u,
  55. ResetUart1 = 1u,
  56. ResetLpUart0 = 2u,
  57. ResetLpUart1 = 3u,
  58. ResetI2c0 = 4u,
  59. ResetI2c1 = 5u,
  60. ResetSpi0 = 6u,
  61. ResetSpi1 = 7u,
  62. ResetBaseTim = 8u,
  63. ResetLpTim0 = 9u,
  64. ResetAdvTim = 10u,
  65. ResetTim3 = 11u,
  66. ResetOpa = 13u,
  67. ResetPca = 14u,
  68. ResetAdcBgr = 16u,
  69. ResetVcLvd = 17u,
  70. ResetRng = 18u,
  71. ResetPcnt = 19u,
  72. ResetRtc = 20u,
  73. ResetTrim = 21u,
  74. ResetLcd = 22u,
  75. ResetTick = 24u,
  76. ResetSwd = 25u,
  77. ResetCrc = 26u,
  78. ResetAes = 27u,
  79. ResetGpio = 28u,
  80. ResetDma = 29u,
  81. ResetDac = 35u,
  82. ResetLpTim1 = 36u,
  83. ResetUart2 = 40u,
  84. ResetUart3 = 41u,
  85. } peri_reset_t;
  86. extern void PeriClk0MutEnable(uint32_t ClkBitMsk);
  87. extern void PeriClk1MutEnable(uint32_t ClkBitMsk);
  88. extern void PeriClk0MutDisable(uint32_t ClkBitMsk_n);
  89. extern void PeriClk1MutDisable(uint32_t ClkBitMsk_n);
  90. extern void MutResetPeri(peri_reset_t PeriRst);
  91. typedef struct{
  92. uint8_t valid : 1; // Bit[0]
  93. int32_t ppm : 31; // Bit[31:1]
  94. } clkoffset_t;
  95. extern void clktrim_init(void);
  96. extern clkoffset_t clktrim_check(void);
  97. #ifdef __cplusplus
  98. }
  99. #endif
  100. #endif /* __CLK_RST_H__ */
  101. /******************************************************************************
  102. * EOF (not truncated)
  103. ******************************************************************************/