lib_timer.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. /******************************************************************************************
  2. * Copyright (C), 2017, Shanghai Eastsoft Microelectronics Co., Ltd.
  3. * 文件名: lib_timer.h
  4. * 作 者: Liut
  5. * 版 本: V1.00
  6. * 日 期: 2017/07/14
  7. * 描 述: 16位定时器/计数器、32位定时器/计数器库函数头文件
  8. * 备 注: 适用于ES8P508x系列芯片
  9. * 本软件仅供学习和演示使用,对用户直接引用代码所带来的风险或后果不承担任何法律责任。
  10. *******************************************************************************************/
  11. #ifndef __LIBTIMER_H__
  12. #define __LIBTIMER_H__
  13. #include "ES8P508x.h"
  14. #include "type.h"
  15. /* 时钟源选择 */
  16. typedef enum
  17. {
  18. TIM_ClkS_PCLK = 0x0 , //时钟源选择:内部PCLK
  19. TIM_ClkS_CK0 = 0x1 , //时钟源选择:外部CK0时钟输入
  20. TIM_ClkS_CK1 = 0x2 , //时钟源选择:外部CK1时钟输入
  21. }TIM_TYPE_CLKS;
  22. /* 外部时钟计数边沿选择 */
  23. typedef enum
  24. {
  25. TIM_EDGE_Rise = 0x0 , //外部时钟计数边沿选择:上升沿
  26. TIM_EDGE_Fall = 0x1 , //外部时钟计数边沿选择:下降沿
  27. TIM_EDGE_All = 0x2 , //外部时钟计数边沿选择:所有
  28. }TIM_TYPE_EDGE;
  29. /* 工作模式选择 */
  30. typedef enum
  31. {
  32. TIM_Mode_TC0 = 0x0 , //工作模式:定时、计数模式
  33. TIM_Mode_TC1 = 0x1 , //工作模式:定时、计数模式
  34. TIM_Mode_CAP = 0x2 , //工作模式:捕捉模式
  35. TIM_Mode_PWM = 0x3 , //工作模式:调制模式
  36. }TIM_TYPE_MODE;
  37. /* TIM初始化配置结构体定义 */
  38. typedef struct
  39. {
  40. TIM_TYPE_CLKS TIM_ClkS; //时钟源选择
  41. TYPE_FUNCEN TIM_SYNC; //外部时钟同步
  42. TIM_TYPE_EDGE TIM_EDGE; //外部时钟计数边沿选择
  43. TIM_TYPE_MODE TIM_Mode; //工作模式选择
  44. }TIM_BaseInitStruType;
  45. /* 匹配寄存器值匹配后的工作模式 */
  46. typedef enum
  47. {
  48. TIM_Go_No = 0x0 , //匹配寄存器值匹配后的工作模式:继续计数,不产生中断
  49. TIM_Hold_Int = 0x1 , //匹配寄存器值匹配后的工作模式:保持计数,产生中断
  50. TIM_Clr_Int = 0x2 , //匹配寄存器值匹配后的工作模式:清零并重新计数,产生中断
  51. TIM_Go_Int = 0x3 , //匹配寄存器值匹配后的工作模式:继续计数,产生中断
  52. }TIM_TYPE_MATCON;
  53. /* 匹配寄存器值匹配后输出端口的工作模式 */
  54. typedef enum
  55. {
  56. TIM_Out_Hold = 0x0 , //匹配寄存器值匹配后输出端口的工作模式:保持
  57. TIM_Out_Low = 0x1 , //匹配寄存器值匹配后输出端口的工作模式:清0
  58. TIM_Out_High = 0x2 , //匹配寄存器值匹配后输出端口的工作模式:置1
  59. TIM_Out_Switch = 0x3 , //匹配寄存器值匹配后输出端口的工作模式:取反
  60. }TIM_TYPE_MATOUT;
  61. /* 捕捉次数控制 */
  62. typedef enum
  63. {
  64. TIM_CapTime_1 = 0x0 , //捕捉次数控制:1
  65. TIM_CapTime_2 = 0x1 , //捕捉次数控制:2
  66. TIM_CapTime_3 = 0x2 , //捕捉次数控制:3
  67. TIM_CapTime_4 = 0x3 , //捕捉次数控制:4
  68. TIM_CapTime_5 = 0x4 , //捕捉次数控制:5
  69. TIM_CapTime_6 = 0x5 , //捕捉次数控制:6
  70. TIM_CapTime_7 = 0x6 , //捕捉次数控制:7
  71. TIM_CapTime_8 = 0x7 , //捕捉次数控制:8
  72. TIM_CapTime_9 = 0x8 , //捕捉次数控制:9
  73. TIM_CapTime_10 = 0x9 , //捕捉次数控制:10
  74. TIM_CapTime_11 = 0xA , //捕捉次数控制:11
  75. TIM_CapTime_12 = 0xB , //捕捉次数控制:12
  76. TIM_CapTime_13 = 0xC , //捕捉次数控制:13
  77. TIM_CapTime_14 = 0xD , //捕捉次数控制:14
  78. TIM_CapTime_15 = 0xE , //捕捉次数控制:15
  79. TIM_CapTime_16 = 0xF , //捕捉次数控制:16
  80. }TIM_TYPE_CAPT;
  81. /* PWM输出极性类型 */
  82. typedef enum
  83. {
  84. POSITIVE = 0X00, //正极性
  85. NEGATIVE = 0X01, //负极性
  86. }T16Nx_PWMOUT_POLAR_Type;
  87. /* 调制功能初始化结构体定义 */
  88. typedef struct
  89. {
  90. TYPE_FUNCEN T16Nx_MOE0; //输出端口0使能
  91. TYPE_FUNCEN T16Nx_MOE1; //输出端口1使能
  92. T16Nx_PWMOUT_POLAR_Type T16Nx_POL0; //T16NxOUT0输出极性选择位
  93. T16Nx_PWMOUT_POLAR_Type T16Nx_POL1; //T16NxOUT1输出极性选择位
  94. }T16Nx_PWMInitStruType;
  95. /* 捕捉功能初始化结构体定义 */
  96. typedef struct
  97. {
  98. TYPE_FUNCEN TIM_CapRise; //上升沿捕捉使能
  99. TYPE_FUNCEN TIM_CapFall; //下降沿捕捉使能
  100. TYPE_FUNCEN TIM_CapIS0; //输入端口0使能
  101. TYPE_FUNCEN TIM_CapIS1; //输入端口1使能
  102. TIM_TYPE_CAPT TIM_CapTime; //捕捉次数控制
  103. }TIM_CapInitStruType;
  104. /* PWM刹车输出电平 */
  105. typedef enum
  106. {
  107. PWMBKOUT_Low = 0,
  108. PWMBKOUT_High = 1,
  109. }T16Nx_PWMBKOUT_LEVEl;
  110. /* PWM刹车信号极性选择 */
  111. typedef enum
  112. {
  113. PWMBKP_High = 0,
  114. PWMBKP_Low = 1,
  115. }T16Nx_PWMBKP_LEVEl;
  116. /*PWM刹车信号源选择*/
  117. typedef enum
  118. {
  119. PWMBKPS_PINT0 = 0,
  120. PWMBKPS_PINT1 = 1,
  121. PWMBKPS_PINT2 = 2,
  122. PWMBKPS_PINT3 = 3,
  123. PWMBKPS_PINT4 = 4,
  124. PWMBKPS_PINT5 = 5,
  125. PWMBKPS_PINT6 = 6,
  126. PWMBKPS_PINT7 = 7,
  127. }T16Nx_PWMBKP_S;
  128. /*PWM输出刹车控制*/
  129. typedef struct
  130. {
  131. T16Nx_PWMBKOUT_LEVEl T16Nx_PWMBKL0; //PWM通道0刹车输出电平选择
  132. T16Nx_PWMBKOUT_LEVEl T16Nx_PWMBKL1; //PWM通道1刹车输出电平选择
  133. T16Nx_PWMBKP_S T16Nx_PWMBKS; //PWM通道信号源选择
  134. T16Nx_PWMBKP_LEVEl T16Nx_PWMBKPS; //PWM通道刹车信号极性选择
  135. TYPE_FUNCEN T16Nx_PWMBKEN; //PWM刹车使能
  136. }T16Nx_PWMBK_Type;
  137. /* 中断配置 */
  138. typedef enum
  139. {
  140. TIM_IT_MAT0 = 0x01 ,
  141. TIM_IT_MAT1 = 0x02 ,
  142. TIM_IT_MAT2 = 0x04 ,
  143. TIM_IT_MAT3 = 0x08 ,
  144. TIM_IT_N = 0x10 ,
  145. TIM_IT_CAP0 = 0x20 ,
  146. TIM_IT_CAP1 = 0x40 ,
  147. TIM_IT_PBK = 0x80 ,
  148. }TIM_TYPE_IT;
  149. typedef enum
  150. {
  151. TIM_IF_MAT0 = 0x01 ,
  152. TIM_IF_MAT1 = 0x02 ,
  153. TIM_IF_MAT2 = 0x04 ,
  154. TIM_IF_MAT3 = 0x08 ,
  155. TIM_IF_N = 0x10 ,
  156. TIM_IF_CAP0 = 0x20 ,
  157. TIM_IF_CAP1 = 0x40 ,
  158. TIM_IF_PBK = 0x80 ,
  159. }TIM_TYPE_IF;
  160. /* 匹配寄存器 */
  161. typedef enum
  162. {
  163. TIM_MAT0 = 0x00 ,
  164. TIM_MAT1 = 0x01 ,
  165. TIM_MAT2 = 0x02 ,
  166. TIM_MAT3 = 0x03 ,
  167. }TIM_TYPE_MATX;
  168. /*T16N ADC触发使能控制*/
  169. typedef enum
  170. {
  171. T16Nx_MAT0 = 0x02, //PWM通道0匹配0触发使能
  172. T16Nx_MAT1 = 0x04, //PWM通道0匹配1触发使能
  173. T16Nx_MAT2 = 0x20, //PWM通道1匹配2触发使能
  174. T16Nx_MAT3 = 0x40, //PWM通道1匹配3触发使能
  175. }T16Nx_PWMTRG_type;
  176. /*************TIM模块宏定义************/
  177. /* TIM模块使能控制 */
  178. #define T16N0_Enable() (T16N0->CON0.EN = 1)
  179. #define T16N1_Enable() (T16N1->CON0.EN = 1)
  180. #define T16N2_Enable() (T16N2->CON0.EN = 1)
  181. #define T16N3_Enable() (T16N3->CON0.EN = 1)
  182. #define T32N0_Enable() (T32N0->CON0.EN = 1)
  183. #define T16N0_Disable() (T16N0->CON0.EN = 0)
  184. #define T16N1_Disable() (T16N1->CON0.EN = 0)
  185. #define T16N2_Disable() (T16N2->CON0.EN = 0)
  186. #define T16N3_Disable() (T16N3->CON0.EN = 0)
  187. #define T32N0_Disable() (T32N0->CON0.EN = 0)
  188. /* 异步写使能控制 */
  189. #define T16N0_ASYNCWR_Enable() (T16N0->CON0.ASYWEN = 1)
  190. #define T16N1_ASYNCWR_Enable() (T16N1->CON0.ASYWEN = 1)
  191. #define T16N2_ASYNCWR_Enable() (T16N2->CON0.ASYWEN = 1)
  192. #define T16N3_ASYNCWR_Enable() (T16N3->CON0.ASYWEN = 1)
  193. #define T32N0_ASYNCWR_Enable() (T32N0->CON0.ASYNCWREN = 1)
  194. #define T16N0_ASYNCWR_Disable() (T16N0->CON0.ASYWEN= 0)
  195. #define T16N1_ASYNCWR_Disable() (T16N1->CON0.ASYWEN = 0)
  196. #define T16N2_ASYNCWR_Disable() (T16N2->CON0.ASYWEN = 0)
  197. #define T16N3_ASYNCWR_Disable() (T16N3->CON0.ASYWEN = 0)
  198. #define T32N0_ASYNCWR_Disable() (T32N0->CON0.ASYNCWREN = 0)
  199. /* PWM输出使能控制 */
  200. #define T16N0_PwmOut0_Enable() (T16N0->CON2.MOE0 = 1)
  201. #define T16N1_PwmOut0_Enable() (T16N1->CON2.MOE0 = 1)
  202. #define T16N2_PwmOut0_Enable() (T16N2->CON2.MOE0 = 1)
  203. #define T16N3_PwmOut0_Enable() (T16N3->CON2.MOE0 = 1)
  204. #define T32N0_PwmOut0_Enable() (T32N0->CON2.MOE0 = 1)
  205. #define T16N0_PwmOut1_Enable() (T16N0->CON2.MOE1 = 1)
  206. #define T16N1_PwmOut1_Enable() (T16N1->CON2.MOE1 = 1)
  207. #define T16N2_PwmOut1_Enable() (T16N2->CON2.MOE1 = 1)
  208. #define T16N3_PwmOut1_Enable() (T16N3->CON2.MOE1 = 1)
  209. #define T32N0_PwmOut1_Enable() (T32N0->CON2.MOE1 = 1)
  210. #define T16N0_PwmOut0_Disable() (T16N0->CON2.MOE0 = 0)
  211. #define T16N1_PwmOut0_Disable() (T16N1->CON2.MOE0 = 0)
  212. #define T16N2_PwmOut0_Disable() (T16N2->CON2.MOE0 = 0)
  213. #define T16N3_PwmOut0_Disable() (T16N3->CON2.MOE0 = 0)
  214. #define T32N0_PwmOut0_Disable() (T32N0->CON2.MOE0 = 0)
  215. #define T16N0_PwmOut1_Disable() (T16N0->CON2.MOE1 = 0)
  216. #define T16N1_PwmOut1_Disable() (T16N1->CON2.MOE1 = 0)
  217. #define T16N2_PwmOut1_Disable() (T16N2->CON2.MOE1 = 0)
  218. #define T16N3_PwmOut1_Disable() (T16N3->CON2.MOE1 = 0)
  219. #define T32N0_PwmOut1_Disable() (T32N0->CON2.MOE1 = 0)
  220. /************T16模块函数声明***********/
  221. void T16Nx_BaseInit(T16N_TypeDef* T16Nx,TIM_BaseInitStruType* TIM_BaseInitStruct);
  222. void T16Nx_CapInit(T16N_TypeDef* T16Nx,TIM_CapInitStruType* TIM_CapInitStruct);
  223. void T16Nx_MAT0ITConfig(T16N_TypeDef* T16Nx,TIM_TYPE_MATCON Type);
  224. void T16Nx_MAT1ITConfig(T16N_TypeDef* T16Nx,TIM_TYPE_MATCON Type);
  225. void T16Nx_MAT2ITConfig(T16N_TypeDef* T16Nx,TIM_TYPE_MATCON Type);
  226. void T16Nx_MAT3ITConfig(T16N_TypeDef* T16Nx,TIM_TYPE_MATCON Type);
  227. void T16Nx_MAT0Out0Config(T16N_TypeDef* T16Nx,TIM_TYPE_MATOUT Type);
  228. void T16Nx_MAT1Out0Config(T16N_TypeDef* T16Nx,TIM_TYPE_MATOUT Type);
  229. void T16Nx_MAT2Out1Config(T16N_TypeDef* T16Nx,TIM_TYPE_MATOUT Type);
  230. void T16Nx_MAT3Out1Config(T16N_TypeDef* T16Nx,TIM_TYPE_MATOUT Type);
  231. void T16Nx_ITConfig(T16N_TypeDef* T16Nx,TIM_TYPE_IT Type,TYPE_FUNCEN NewState);
  232. void T16Nx_PWMOutConfig(T16N_TypeDef* T16Nx,T16Nx_PWMInitStruType* T16Nx_PWMInitStruct);
  233. void T16Nx_PWMBK_Config(T16N_TypeDef* T16Nx,T16Nx_PWMBK_Type* type);
  234. void T16Nx_TRG_Config(T16N_TypeDef* T16Nx,T16Nx_PWMTRG_type Type,TYPE_FUNCEN NewState);
  235. FlagStatus T16Nx_GetPWMBKF(T16N_TypeDef* T16Nx);
  236. void T16Nx_ResetPWMBKF(T16N_TypeDef* T16Nx);
  237. void T16Nx_SetCNT(T16N_TypeDef* T16Nx,uint16_t Value);
  238. void T16Nx_SetPRECNT(T16N_TypeDef* T16Nx,uint8_t Value);
  239. void T16Nx_SetPREMAT(T16N_TypeDef* T16Nx,uint8_t Value);
  240. void T16Nx_SetMAT0(T16N_TypeDef* T16Nx,uint16_t Value);
  241. void T16Nx_SetMAT1(T16N_TypeDef* T16Nx,uint16_t Value);
  242. void T16Nx_SetMAT2(T16N_TypeDef* T16Nx,uint16_t Value);
  243. void T16Nx_SetMAT3(T16N_TypeDef* T16Nx,uint16_t Value);
  244. uint16_t T16Nx_GetMAT0(T16N_TypeDef* T16Nx);
  245. uint16_t T16Nx_GetMAT1(T16N_TypeDef* T16Nx);
  246. uint16_t T16Nx_GetMAT2(T16N_TypeDef* T16Nx);
  247. uint16_t T16Nx_GetMAT3(T16N_TypeDef* T16Nx);
  248. uint16_t T16Nx_GetCNT(T16N_TypeDef* T16Nx);
  249. uint8_t T16Nx_GetPRECNT(T16N_TypeDef* T16Nx);
  250. FlagStatus T16Nx_GetFlagStatus(T16N_TypeDef* T16Nx,TIM_TYPE_IF TIM_Flag);
  251. ITStatus T16Nx_GetITStatus(T16N_TypeDef* T16Nx,TIM_TYPE_IT TIM_Flag);
  252. void T16Nx_ClearIFPendingBit(T16N_TypeDef* T16Nx,TIM_TYPE_IF TIM_Flag);
  253. /************************************T32模块函数声明********************************************************/
  254. void T32Nx_BaseInit(T32N_TypeDef* T32Nx,TIM_BaseInitStruType* TIM_BaseInitStruct);
  255. void T32Nx_CapInit(T32N_TypeDef* T32Nx,TIM_CapInitStruType* TIM_CapInitStruct);
  256. void T32Nx_MAT0ITConfig(T32N_TypeDef* T32Nx,TIM_TYPE_MATCON Type);
  257. void T32Nx_MAT1ITConfig(T32N_TypeDef* T32Nx,TIM_TYPE_MATCON Type);
  258. void T32Nx_MAT2ITConfig(T32N_TypeDef* T32Nx,TIM_TYPE_MATCON Type);
  259. void T32Nx_MAT3ITConfig(T32N_TypeDef* T32Nx,TIM_TYPE_MATCON Type);
  260. void T32Nx_MAT0Out0Config(T32N_TypeDef* T32Nx,TIM_TYPE_MATOUT Type);
  261. void T32Nx_MAT1Out0Config(T32N_TypeDef* T32Nx,TIM_TYPE_MATOUT Type);
  262. void T32Nx_MAT2Out1Config(T32N_TypeDef* T32Nx,TIM_TYPE_MATOUT Type);
  263. void T32Nx_MAT3Out1Config(T32N_TypeDef* T32Nx,TIM_TYPE_MATOUT Type);
  264. void T32Nx_ITConfig(T32N_TypeDef* T32Nx,TIM_TYPE_IT Type,TYPE_FUNCEN NewState);
  265. void T32Nx_SetCNT(T32N_TypeDef* T16Nx,uint32_t Value);
  266. void T32Nx_SetPRECNT(T32N_TypeDef* T32Nx,uint8_t Value);
  267. void T32Nx_SetPREMAT(T32N_TypeDef* T32Nx,uint8_t Value);
  268. void T32Nx_SetMAT0(T32N_TypeDef* T32Nx,uint32_t Value);
  269. void T32Nx_SetMAT1(T32N_TypeDef* T32Nx,uint32_t Value);
  270. void T32Nx_SetMAT2(T32N_TypeDef* T32Nx,uint32_t Value);
  271. void T32Nx_SetMAT3(T32N_TypeDef* T32Nx,uint32_t Value);
  272. uint32_t T32Nx_GetMAT0(T32N_TypeDef* T32Nx);
  273. uint32_t T32Nx_GetMAT1(T32N_TypeDef* T32Nx);
  274. uint32_t T32Nx_GetMAT2(T32N_TypeDef* T32Nx);
  275. uint32_t T32Nx_GetMAT3(T32N_TypeDef* T32Nx);
  276. uint32_t T32Nx_GetCNT(T32N_TypeDef* T32Nx);
  277. uint8_t T32Nx_GetPRECNT(T32N_TypeDef* T32Nx);
  278. FlagStatus T32Nx_GetFlagStatus(T32N_TypeDef* T32Nx,TIM_TYPE_IF TIM_Flag);
  279. ITStatus T32Nx_GetITStatus(T32N_TypeDef* T32Nx,TIM_TYPE_IT TIM_Flag);
  280. void T32Nx_ClearIFPendingBit(T32N_TypeDef* T32Nx,TIM_TYPE_IF TIM_Flag);
  281. #endif
  282. /*************************END OF FILE**********************/