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