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