CH57x_timer.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. #ifndef __CH57x_TIMER_H__
  2. #define __CH57x_TIMER_H__
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. #include "CH579SFR.h"
  7. #include "core_cm0.h"
  8. #define DataBit_25 (1<<25)
  9. /**
  10. * @brief TMR0 interrupt bit define
  11. */
  12. #define TMR0_3_IT_CYC_END 0x01 // 周期结束标志:捕捉-超时,定时-周期结束,PWM-周期结束
  13. #define TMR0_3_IT_DATA_ACT 0x02 // 数据有效标志:捕捉-新数据,PWM-有效电平结束
  14. #define TMR0_3_IT_FIFO_HF 0x04 // FIFO 使用过半:捕捉- FIFO>=4, PWM- FIFO<4
  15. #define TMR1_2_IT_DMA_END 0x08 // DMA 结束,支持TMR1和TMR2
  16. #define TMR0_3_IT_FIFO_OV 0x10 // FIFO 溢出:捕捉- FIFO满, PWM- FIFO空
  17. /**
  18. * @brief Configuration PWM effective level repeat times
  19. */
  20. typedef enum
  21. {
  22. PWM_Times_1 = 0, // PWM 有效输出重复1次数
  23. PWM_Times_4, // PWM 有效输出重复4次数
  24. PWM_Times_8, // PWM 有效输出重复8次数
  25. PWM_Times_16, // PWM 有效输出重复16次数
  26. }PWM_RepeatTsTypeDef;
  27. /**
  28. * @brief Configuration Cap mode
  29. */
  30. typedef enum
  31. {
  32. CAP_NULL = 0, // 不捕捉 & 不计数
  33. Edge_To_Edge, // 任意边沿之间 & 计数任意边沿
  34. FallEdge_To_FallEdge, // 下降沿到下降沿 & 计数下降沿
  35. RiseEdge_To_RiseEdge, // 上升沿到上升沿 & 计数上升沿
  36. }CapModeTypeDef;
  37. /**
  38. * @brief Configuration DMA mode
  39. */
  40. typedef enum
  41. {
  42. Mode_Single = 0, // 单次模式
  43. Mode_LOOP, // 循环模式
  44. }DMAModeTypeDef;
  45. /****************** TMR0 */
  46. // 定时功能
  47. void TMR0_TimerInit( UINT32 t ); /* 定时功能初始化 */
  48. void TMR0_EXTSingleCounterInit( UINT32 c ); /* 外部信号计数功能初始化 */
  49. #define TMR0_GetCurrentTimer() R32_TMR0_COUNT /* 获取当前定时器值,最大67108864 */
  50. //计数功能
  51. void TMR0_CountInit( CapModeTypeDef cap ); /* 外部信号边沿计数初始化 */
  52. #define TMR0_CountOverflowCfg( cyc ) (R32_TMR0_CNT_END=(cyc+2)) /* 计数统计溢出大小,最大67108862 */
  53. #define TMR0_GetCurrentCount() R32_TMR0_COUNT /* 获取当前计数值,最大67108862 */
  54. // PWM功能
  55. #define TMR0_PWMCycleCfg( cyc ) (R32_TMR0_CNT_END=cyc) /* PWM0 通道输出波形周期配置, 最大67108864 */
  56. void TMR0_PWMInit( PWMX_PolarTypeDef pr, PWM_RepeatTsTypeDef ts ); /* PWM 输出初始化 */
  57. #define TMR0_PWMActDataWidth( d ) (R32_TMR0_FIFO = d) /* PWM0 有效数据脉宽, 最大67108864 */
  58. // 捕捉脉宽
  59. #define TMR0_CAPTimeoutCfg( cyc ) (R32_TMR0_CNT_END=cyc) /* CAP0 捕捉电平超时配置, 最大33554432 */
  60. void TMR0_CapInit( CapModeTypeDef cap ); /* 外部信号捕捉功能初始化 */
  61. #define TMR0_CAPGetData() R32_TMR0_FIFO /* 获取脉冲数据 */
  62. #define TMR0_CAPDataCounter() R8_TMR0_FIFO_COUNT /* 获取当前已捕获数据个数 */
  63. #define TMR0_Disable() (R8_TMR0_CTRL_MOD &= ~RB_TMR_COUNT_EN) /* 关闭 TMR0 */
  64. #define TMR0_Enable() (R8_TMR0_CTRL_MOD |= RB_TMR_COUNT_EN) /* 开启 TMR0 */
  65. // refer to TMR0 interrupt bit define
  66. #define TMR0_ITCfg(s,f) ((s)?(R8_TMR0_INTER_EN|=f):(R8_TMR0_INTER_EN&=~f)) /* TMR0 相应中断位开启与关闭 */
  67. // refer to TMR0 interrupt bit define
  68. #define TMR0_ClearITFlag(f) (R8_TMR0_INT_FLAG = f) /* 清除中断标志 */
  69. #define TMR0_GetITFlag(f) (R8_TMR0_INT_FLAG&f) /* 查询中断标志状态 */
  70. /****************** TMR1 */
  71. // 定时和计数
  72. void TMR1_TimerInit( UINT32 t ); /* 定时功能初始化 */
  73. void TMR1_EXTSingleCounterInit( UINT32 c ); /* 外部信号计数功能初始化 */
  74. #define TMR1_GetCurrentTimer() R32_TMR1_COUNT /* 获取当前定时器值,最大67108864 */
  75. //计数功能
  76. void TMR1_CountInit( CapModeTypeDef cap ); /* 外部信号边沿计数初始化 */
  77. #define TMR1_CountOverflowCfg( cyc ) (R32_TMR1_CNT_END=(cyc+2)) /* 计数统计溢出大小,最大67108862 */
  78. #define TMR1_GetCurrentCount() R32_TMR1_COUNT /* 获取当前计数值,最大67108862 */
  79. // PWM功能
  80. #define TMR1_PWMCycleCfg( cyc ) (R32_TMR1_CNT_END=cyc) /* PWM1 通道输出波形周期配置, 最大67108864 */
  81. void TMR1_PWMInit( PWMX_PolarTypeDef pr, PWM_RepeatTsTypeDef ts ); /* PWM1 输出初始化 */
  82. #define TMR1_PWMActDataWidth( d ) (R32_TMR1_FIFO = d) /* PWM1 有效数据脉宽, 最大67108864 */
  83. // 捕捉脉宽
  84. #define TMR1_CAPTimeoutCfg( cyc ) (R32_TMR1_CNT_END=cyc) /* CAP1 捕捉电平超时配置, 最大33554432 */
  85. void TMR1_CapInit( CapModeTypeDef cap ); /* 外部信号捕捉功能初始化 */
  86. #define TMR1_CAPGetData() R32_TMR1_FIFO /* 获取脉冲数据 */
  87. #define TMR1_CAPDataCounter() R8_TMR1_FIFO_COUNT /* 获取当前已捕获数据个数 */
  88. void TMR1_DMACfg( UINT8 s, UINT16 startAddr, UINT16 endAddr, DMAModeTypeDef m ); /* DMA配置 */
  89. #define TMR1_Disable() (R8_TMR1_CTRL_MOD &= ~RB_TMR_COUNT_EN) /* 关闭 TMR1 */
  90. #define TMR1_Enable() (R8_TMR1_CTRL_MOD |= RB_TMR_COUNT_EN) /* 开启 TMR1 */
  91. // refer to TMR1 interrupt bit define
  92. #define TMR1_ITCfg(s,f) ((s)?(R8_TMR1_INTER_EN|=f):(R8_TMR1_INTER_EN&=~f)) /* TMR1 相应中断位开启与关闭 */
  93. // refer to TMR1 interrupt bit define
  94. #define TMR1_ClearITFlag(f) (R8_TMR1_INT_FLAG = f) /* 清除中断标志 */
  95. #define TMR1_GetITFlag(f) (R8_TMR1_INT_FLAG&f) /* 查询中断标志状态 */
  96. /****************** TMR2 */
  97. // 定时和计数
  98. void TMR2_TimerInit( UINT32 t ); /* 定时功能初始化 */
  99. void TMR2_EXTSingleCounterInit( UINT32 c ); /* 外部信号计数功能初始化 */
  100. #define TMR2_GetCurrentTimer() R32_TMR2_COUNT /* 获取当前定时器值,最大67108864 */
  101. //计数功能
  102. void TMR2_CountInit( CapModeTypeDef cap ); /* 外部信号边沿计数初始化 */
  103. #define TMR2_CountOverflowCfg( cyc ) (R32_TMR2_CNT_END=(cyc+2)) /* 计数统计溢出大小,最大67108862 */
  104. #define TMR2_GetCurrentCount() R32_TMR2_COUNT /* 获取当前计数值,最大67108862 */
  105. // PWM功能
  106. #define TMR2_PWMCycleCfg( cyc ) (R32_TMR2_CNT_END=cyc) /* PWM2 通道输出波形周期配置, 最大67108864 */
  107. void TMR2_PWMInit( PWMX_PolarTypeDef pr, PWM_RepeatTsTypeDef ts ); /* PWM2 输出初始化 */
  108. #define TMR2_PWMActDataWidth( d ) (R32_TMR2_FIFO = d) /* PWM2 有效数据脉宽, 最大67108864 */
  109. // 捕捉脉宽
  110. #define TMR2_CAPTimeoutCfg( cyc ) (R32_TMR2_CNT_END=cyc) /* CAP2 捕捉电平超时配置, 最大33554432 */
  111. void TMR2_CapInit( CapModeTypeDef cap ); /* 外部信号捕捉功能初始化 */
  112. #define TMR2_CAPGetData() R32_TMR2_FIFO /* 获取脉冲数据 */
  113. #define TMR2_CAPDataCounter() R8_TMR2_FIFO_COUNT /* 获取当前已捕获数据个数 */
  114. void TMR2_DMACfg( UINT8 s, UINT16 startAddr, UINT16 endAddr, DMAModeTypeDef m ); /* DMA配置 */
  115. #define TMR2_Disable() (R8_TMR2_CTRL_MOD &= ~RB_TMR_COUNT_EN) /* 关闭 TMR2 */
  116. #define TMR2_Enable() (R8_TMR2_CTRL_MOD |= RB_TMR_COUNT_EN) /* 开启 TMR2 */
  117. // refer to TMR2 interrupt bit define
  118. #define TMR2_ITCfg(s,f) ((s)?(R8_TMR2_INTER_EN|=f):(R8_TMR2_INTER_EN&=~f)) /* TMR2 相应中断位开启与关闭 */
  119. // refer to TMR2 interrupt bit define
  120. #define TMR2_ClearITFlag(f) (R8_TMR2_INT_FLAG = f) /* 清除中断标志 */
  121. #define TMR2_GetITFlag(f) (R8_TMR2_INT_FLAG&f) /* 查询中断标志状态 */
  122. /****************** TMR3 */
  123. // 定时和计数
  124. void TMR3_TimerInit( UINT32 t ); /* 定时功能初始化 */
  125. void TMR3_EXTSingleCounterInit( UINT32 c ); /* 外部信号计数功能初始化 */
  126. #define TMR3_GetCurrentTimer() R32_TMR3_COUNT /* 获取当前定时器值,最大67108864 */
  127. //计数功能
  128. void TMR3_CountInit( CapModeTypeDef cap ); /* 外部信号边沿计数初始化 */
  129. #define TMR3_CountOverflowCfg( cyc ) (R32_TMR3_CNT_END=(cyc+2)) /* 计数统计溢出大小,最大67108862 */
  130. #define TMR3_GetCurrentCount() R32_TMR3_COUNT /* 获取当前计数值,最大67108862 */
  131. // PWM功能
  132. #define TMR3_PWMCycleCfg( cyc ) (R32_TMR3_CNT_END=cyc) /* PWM3 通道输出波形周期配置, 最大67108864 */
  133. void TMR3_PWMInit( PWMX_PolarTypeDef pr, PWM_RepeatTsTypeDef ts ); /* PWM3 输出初始化 */
  134. #define TMR3_PWMActDataWidth( d ) (R32_TMR3_FIFO = d) /* PWM3 有效数据脉宽, 最大67108864 */
  135. // 捕捉脉宽
  136. #define TMR3_CAPTimeoutCfg( cyc ) (R32_TMR3_CNT_END=cyc) /* CAP3 捕捉电平超时配置, 最大33554432 */
  137. void TMR3_CapInit( CapModeTypeDef cap ); /* 外部信号捕捉功能初始化 */
  138. #define TMR3_CAPGetData() R32_TMR3_FIFO /* 获取脉冲数据 */
  139. #define TMR3_CAPDataCounter() R8_TMR3_FIFO_COUNT /* 获取当前已捕获数据个数 */
  140. #define TMR3_Disable() (R8_TMR3_CTRL_MOD &= ~RB_TMR_COUNT_EN) /* 关闭 TMR3 */
  141. #define TMR3_Enable() (R8_TMR3_CTRL_MOD |= RB_TMR_COUNT_EN) /* 开启 TMR3 */
  142. // refer to TMR3 interrupt bit define
  143. #define TMR3_ITCfg(s,f) ((s)?(R8_TMR3_INTER_EN|=f):(R8_TMR3_INTER_EN&=~f)) /* TMR3 相应中断位开启与关闭 */
  144. // refer to TMR3 interrupt bit define
  145. #define TMR3_ClearITFlag(f) (R8_TMR3_INT_FLAG = f) /* 清除中断标志 */
  146. #define TMR3_GetITFlag(f) (R8_TMR3_INT_FLAG&f) /* 查询中断标志状态 */
  147. #ifdef __cplusplus
  148. }
  149. #endif
  150. #endif // __CH57x_TIMER_H__