timer3.h 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748
  1. /******************************************************************************
  2. * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved.
  3. *
  4. * This software component is licensed by XHSC under BSD 3-Clause license
  5. * (the "License"); You may not use this file except in compliance with the
  6. * License. You may obtain a copy of the License at:
  7. * opensource.org/licenses/BSD-3-Clause
  8. *
  9. ******************************************************************************/
  10. /******************************************************************************
  11. * @file timer3.h
  12. *
  13. * @brief Header file for TIMER3 functions
  14. *
  15. * @author MADS Team
  16. *
  17. ******************************************************************************/
  18. #ifndef __TIMER3_H__
  19. #define __TIMER3_H__
  20. /*****************************************************************************
  21. * Include files
  22. *****************************************************************************/
  23. #include "ddl.h"
  24. #ifdef __cplusplus
  25. extern "C"
  26. {
  27. #endif
  28. /**
  29. ******************************************************************************
  30. ** \defgroup Tim3Group Timer3 (TIM3)
  31. **
  32. ******************************************************************************/
  33. //@{
  34. /******************************************************************************/
  35. /* Global pre-processor symbols/macros ('#define') */
  36. /******************************************************************************/
  37. /******************************************************************************
  38. * Global type definitions
  39. ******************************************************************************/
  40. /**
  41. ******************************************************************************
  42. ** \brief Timer3 通道定义
  43. *****************************************************************************/
  44. typedef enum en_tim3_channel
  45. {
  46. Tim3CH0 = 0u, ///< Timer3通道0
  47. Tim3CH1 = 1u, ///< Timer3通道1
  48. Tim3CH2 = 2u, ///< Timer3通道2
  49. }en_tim3_channel_t;
  50. /**
  51. ******************************************************************************
  52. ** \brief 工作模式选择数据类型重定义 (MODE)(模式0/1/23)
  53. *****************************************************************************/
  54. typedef enum en_tim3_work_mode
  55. {
  56. Tim3WorkMode0 = 0u, ///< 定时器模式
  57. Tim3WorkMode1 = 1u, ///< PWC模式
  58. Tim3WorkMode2 = 2u, ///< 锯齿波模式
  59. Tim3WorkMode3 = 3u, ///< 三角波模式
  60. }en_tim3_work_mode_t;
  61. /**
  62. ******************************************************************************
  63. ** \brief 极性控制数据类型重定义 (GATE_P)(模式0)
  64. *****************************************************************************/
  65. typedef enum en_tim3_m0cr_gatep
  66. {
  67. Tim3GatePositive = 0u, ///< 高电平有效
  68. Tim3GateOpposite = 1u, ///< 低电平有效
  69. }en_tim3_m0cr_gatep_t;
  70. /**
  71. ******************************************************************************
  72. ** \brief TIM3 预除频选择 (PRS)(模式0/1/23)
  73. *****************************************************************************/
  74. typedef enum en_tim3_cr_timclkdiv
  75. {
  76. Tim3PCLKDiv1 = 0u, ///< Div 1
  77. Tim3PCLKDiv2 = 1u, ///< Div 2
  78. Tim3PCLKDiv4 = 2u, ///< Div 4
  79. Tim3PCLKDiv8 = 3u, ///< Div 8
  80. Tim3PCLKDiv16 = 4u, ///< Div 16
  81. Tim3PCLKDiv32 = 5u, ///< Div 32
  82. Tim3PCLKDiv64 = 6u, ///< Div 64
  83. Tim3PCLKDiv256 = 7u, ///< Div 256
  84. }en_tim3_cr_timclkdiv_t;
  85. /**
  86. ******************************************************************************
  87. ** \brief 计数/定时器功能选择数据类型重定义 (CT)(模式0/1/23)
  88. *****************************************************************************/
  89. typedef enum en_tim3_cr_ct
  90. {
  91. Tim3Timer = 0u, ///< 定时器功能,计数时钟为内部PCLK
  92. Tim3Counter = 1u, ///< 计数器功能,计数时钟为外部ETR
  93. }en_tim3_cr_ct_t;
  94. /**
  95. ******************************************************************************
  96. ** \brief 定时器工作模式数据类型重定义 (MD)(模式0)
  97. *****************************************************************************/
  98. typedef enum en_tim3_m0cr_md
  99. {
  100. Tim332bitFreeMode = 0u, ///< 32位计数器/定时器
  101. Tim316bitArrMode = 1u, ///< 自动重装载16位计数器/定时器
  102. }en_tim3_m0cr_md_t;
  103. /**
  104. ******************************************************************************
  105. ** \brief TIM3中断类型数据类型重定义(模式0/1/23)
  106. *****************************************************************************/
  107. typedef enum en_tim3_irq_type
  108. {
  109. Tim3UevIrq = 0u, ///< 溢出/事件更新中断
  110. Tim3CA0Irq = 2u, ///< CH0A捕获/比较中断(仅模式1/23存在)
  111. Tim3CA1Irq = 3u, ///< CH1A捕获/比较中断(仅模式23存在)
  112. Tim3CA2Irq = 4u, ///< CH2A捕获/比较中断(仅模式23存在)
  113. Tim3CB0Irq = 5u, ///< CH0B捕获/比较中断(仅模式23存在)
  114. Tim3CB1Irq = 6u, ///< CH1B捕获/比较中断(仅模式23存在)
  115. Tim3CB2Irq = 7u, ///< CH2B捕获/比较中断(仅模式23存在)
  116. Tim3CA0E = 8u, ///< CH0A捕获数据丢失标志(仅模式23存在)(不是中断)
  117. Tim3CA1E = 9u, ///< CH1A捕获数据丢失标志(仅模式23存在)(不是中断)
  118. Tim3CA2E = 10u, ///< CH2A捕获数据丢失标志(仅模式23存在)(不是中断)
  119. Tim3CB0E = 11u, ///< CH0B捕获数据丢失标志(仅模式23存在)(不是中断)
  120. Tim3CB1E = 12u, ///< CH1B捕获数据丢失标志(仅模式23存在)(不是中断)
  121. Tim3CB2E = 13u, ///< CH2B捕获数据丢失标志(仅模式23存在)(不是中断)
  122. Tim3BkIrq = 14u, ///< 刹车中断(仅模式23存在)
  123. Tim3TrigIrq = 15u, ///< 触发中断(仅模式23存在)
  124. }en_tim3_irq_type_t;
  125. /**
  126. ******************************************************************************
  127. ** \brief 测量开始结束数据类型重定义 (Edg1stEdg2nd)(模式1)
  128. *****************************************************************************/
  129. typedef enum en_tim3_m1cr_Edge
  130. {
  131. Tim3PwcRiseToRise = 0u, ///< 上升沿到上升沿(周期)
  132. Tim3PwcFallToRise = 1u, ///< 下降沿到上升沿(低电平)
  133. Tim3PwcRiseToFall = 2u, ///< 上升沿到下降沿(高电平)
  134. Tim3PwcFallToFall = 3u, ///< 下降沿到下降沿(周期)
  135. }en_tim3_m1cr_Edge_t;
  136. /**
  137. ******************************************************************************
  138. ** \brief PWC测量测试模式选择数据类型重定义 (Oneshot)(模式1)
  139. *****************************************************************************/
  140. typedef enum en_tim3_m1cr_oneshot
  141. {
  142. Tim3PwcCycleDetect = 0u, ///< PWC循环测量
  143. Tim3PwcOneShotDetect = 1u, ///< PWC单次测量
  144. }en_tim3_m1cr_oneshot_t;
  145. /**
  146. ******************************************************************************
  147. ** \brief PWC IA0选择数据类型重定义 (IA0S)(模式1)
  148. *****************************************************************************/
  149. typedef enum en_tim3_m1_mscr_ia0s
  150. {
  151. Tim3IA0Input = 0u, ///< IAO输入
  152. Tim3XORInput = 1u, ///< IA0 ETR GATE XOR(TIM0/1/2)/IA0 IA1 IA2 XOR(TIM3)
  153. }en_tim3_m1_mscr_ia0s_t;
  154. /**
  155. ******************************************************************************
  156. ** \brief PWC IB0选择数据类型重定义 (IA0S)(模式1)
  157. *****************************************************************************/
  158. typedef enum en_tim3_m1_mscr_ib0s
  159. {
  160. Tim3IB0Input = 0u, ///< IBO输入
  161. Tim3TsInput = 1u, ///< 内部触发TS选择信号
  162. }en_tim3_m1_mscr_ib0s_t;
  163. /**
  164. ******************************************************************************
  165. ** \brief 输出极性、输入相位 数据类型重定义 (CCPA0/CCPB0/ETP/BKP)(模式1/23)
  166. *****************************************************************************/
  167. typedef enum en_tim3_port_polarity
  168. {
  169. Tim3PortPositive = 0u, ///< 正常输入输出
  170. Tim3PortOpposite = 1u, ///< 反向输入输出
  171. }en_tim3_port_polarity_t;
  172. /**
  173. ******************************************************************************
  174. ** \brief 滤波选择数据类型重定义 (FLTET/FLTA0/FLAB0)(模式1/23)
  175. *****************************************************************************/
  176. typedef enum en_tim3_flt
  177. {
  178. Tim3FltNone = 0u, ///< 无滤波
  179. Tim3FltPCLKCnt3 = 4u, ///< PCLK 3个连续有效
  180. Tim3FltPCLKDiv4Cnt3 = 5u, ///< PCLK/4 3个连续有效
  181. Tim3FltPCLKDiv16Cnt3 = 6u, ///< PCLK/16 3个连续有效
  182. Tim3FltPCLKDiv64Cnt3 = 7u, ///< PCLK/64 3个连续有效
  183. }en_tim3_flt_t;
  184. /**
  185. ******************************************************************************
  186. ** \brief 通道比较控制 数据类型重定义 (OCMA/OCMB)(模式23)
  187. *****************************************************************************/
  188. typedef enum en_tim3_m23_fltr_ocm
  189. {
  190. Tim3ForceLow = 0u, ///< 强制为0
  191. Tim3ForceHigh = 1u, ///< 强制为1
  192. Tim3CMPForceLow = 2u, ///< 比较匹配时强制为0
  193. Tim3CMPForceHigh = 3u, ///< 比较匹配时强制为1
  194. Tim3CMPInverse = 4u, ///< 比较匹配时翻转电平
  195. Tim3CMPOnePrdHigh = 5u, ///< 比较匹配时输出一个计数周期的高电平
  196. Tim3PWMMode1 = 6u, ///< 通道控制为PWM mode 1
  197. Tim3PWMMode2 = 7u, ///< 通道控制为PWM mode 2
  198. }en_tim3_m23_fltr_ocm_t;
  199. /**
  200. ******************************************************************************
  201. ** \brief 主从模式TS数据类型重定义 (TS)(模式1/23)
  202. *****************************************************************************/
  203. typedef enum en_tim3_mscr_ts
  204. {
  205. Tim3Ts0ETR = 0u, ///< ETR外部输入滤波后的相位选择信号
  206. Tim3Ts1TIM0TRGO = 1u, ///< Timer0的TRGO输出信号
  207. Tim3Ts2TIM1TRGO = 2u, ///< Timer1的TRGO输出信号
  208. Tim3Ts3TIM2TRGO = 3u, ///< Timer2的TRGO输出信号
  209. Tim3Ts4TIM3TRGO = 4u, ///< Timer3的TRGO输出信号
  210. //Tim3Ts5IA0ED = 5u, ///< 无效
  211. Tim3Ts6IAFP = 6u, ///< CH0A 外部输输入滤波后的相位选择信号
  212. Tim3Ts7IBFP = 7u, ///< CH0B 外部输输入滤波后的相位选择信
  213. }en_tim3_mscr_ts_t;
  214. /**
  215. ******************************************************************************
  216. ** \brief PWM输出模式选择数据类型重定义 (COMP)(模式23)
  217. *****************************************************************************/
  218. typedef enum en_tim3_m23cr_comp
  219. {
  220. Tim3IndependentPWM = 0u, ///< 独立PWM输出
  221. Tim3ComplementaryPWM = 1u, ///< 互补PWM输出
  222. }en_tim3_m23cr_comp_t;
  223. /**
  224. ******************************************************************************
  225. ** \brief 计数方向选择数据类型重定义 (DIR)(模式23)
  226. *****************************************************************************/
  227. typedef enum en_tim3_m23cr_dir
  228. {
  229. Tim3CntUp = 0u, ///< 向上计数
  230. Tim3CntDown = 1u, ///< 向下计数
  231. }en_tim3_m23cr_dir_t;
  232. /**
  233. ******************************************************************************
  234. ** \brief 计数方向选择数据类型重定义 (PWM2S)(模式23)
  235. *****************************************************************************/
  236. typedef enum en_tim3_m23cr_pwm2s
  237. {
  238. Tim3DoublePointCmp = 0u, ///< 双点比较使能,使用CCRA,CCRB比较控制OCREFA输出
  239. Tim3SinglePointCmp = 1u, ///< 单点比较使能,使用CCRA比较控制OCREFA输出
  240. }en_tim3_m23cr_pwm2s_t;
  241. /**
  242. ******************************************************************************
  243. ** \brief GATE在PWM互补模式下捕获或比较功能 选择数据类型重定义 (CSG)(模式23)
  244. *****************************************************************************/
  245. typedef enum en_tim3_m23cr_csg
  246. {
  247. Tim3PWMCompGateCmpOut = 0u, ///< 在PWM互补模式下,Gate作为比较输出
  248. Tim3PWMCompGateCapIn = 1u, ///< 在PWM互补模式下,Gate作为捕获输入
  249. }en_tim3_m23cr_csg_t;
  250. /**
  251. ******************************************************************************
  252. ** \brief 比较捕获寄存器 数据类型重定义 (CCR0A,CCR0B)(模式23)
  253. *****************************************************************************/
  254. typedef enum en_tim3_m23_ccrx
  255. {
  256. Tim3CCR0A = 0u, ///< CCR0A比较捕获寄存器
  257. Tim3CCR0B = 1u, ///< CCR0B比较捕获寄存器
  258. Tim3CCR1A = 2u, ///< CCR1A比较捕获寄存器
  259. Tim3CCR1B = 3u, ///< CCR1B比较捕获寄存器
  260. Tim3CCR2A = 4u, ///< CCR2A比较捕获寄存器
  261. Tim3CCR2B = 5u, ///< CCR2B比较捕获寄存器
  262. }en_tim3_m23_ccrx_t;
  263. /**
  264. ******************************************************************************
  265. ** \brief OCREF清除源 选择数据类型重定义 (OCCS)(模式23)
  266. *****************************************************************************/
  267. typedef enum en_tim3_m23ce_occs
  268. {
  269. Tim3OC_Ref_Clr = 0u, ///< 来自VC的OC_Ref_Clr
  270. Tim3ETRf = 1u, ///< 外部ETRf
  271. }en_tim3_m23ce_occs_t;
  272. /**
  273. ******************************************************************************
  274. ** \brief 比较匹配中断模式 选择数据类型重定义 (CIS/CISB)(模式23)
  275. *****************************************************************************/
  276. typedef enum en_tim3_m23_cisa_cisb
  277. {
  278. Tim3CmpIntNone = 0u, ///< 无比较匹配中断
  279. Tim3CmpIntRise = 1u, ///< 比较匹配上升沿中断
  280. Tim3CmpIntFall = 2u, ///< 比较匹配下降沿中断
  281. Tim3CmpIntRiseFall = 3u, ///< 比较匹配上升沿下降沿中断
  282. }en_tim3_m23_cisa_cisb_t;
  283. /**
  284. ******************************************************************************
  285. ** \brief TIM3端口控制 - 刹车时CHx输出状态控制(BKSA/BKSB)(模式23)
  286. **
  287. ** \note
  288. ******************************************************************************/
  289. typedef enum en_tim3_m23_crchx_bks
  290. {
  291. Tim3CHxBksHiZ = 0u, ///< 刹车使能时,CHx端口输出高阻态
  292. Tim3CHxBksNorm = 1u, ///< 刹车使能时,CHx端口正常输出
  293. Tim3CHxBksLow = 2u, ///< 刹车使能时,CHx端口输出低电平
  294. Tim3CHxBksHigh = 3u, ///< 刹车使能时,CHx端口输出高电平
  295. }en_tim3_m23_crchx_bks_t;
  296. /**
  297. ******************************************************************************
  298. ** \brief TIM3端口控制 - CHx上升沿下降沿捕获(CRx/CFx)(模式23)
  299. **
  300. ** \note
  301. ******************************************************************************/
  302. typedef enum en_tim3_m23_crch0_cfx_crx
  303. {
  304. Tim3CHxCapNone = 0u, ///< CHx通道捕获禁止
  305. Tim3CHxCapRise = 1u, ///< CHx通道上升沿捕获使能
  306. Tim3CHxCapFall = 2u, ///< CHx通道下降沿捕获使能
  307. Tim3CHxCapFallRise = 3u, ///< CHx通道上升沿下降沿捕获都使能
  308. }en_tim3_m23_crch0_cfx_crx_t;
  309. /**
  310. ******************************************************************************
  311. ** \brief TIM3端口控制 - CHx比较捕获模式(CSA/CSB)(模式23)
  312. **
  313. ** \note
  314. ******************************************************************************/
  315. typedef enum en_tim3_m23_crch0_csa_csb
  316. {
  317. Tim3CHxCmpMode = 0u, ///< CHx通道设置为比较模式
  318. Tim3CHxCapMode = 1u, ///< CHx通道设置为捕获模式
  319. }en_tim3_m23_crch0_csa_csb_t;
  320. /**
  321. ******************************************************************************
  322. ** \brief 比较模式下 DMA比较触发选择 数据类型重定义 (CCDS)(模式23)
  323. *****************************************************************************/
  324. typedef enum en_tim3_m23_mscr_ccds
  325. {
  326. Tim3CmpTrigDMA = 0u, ///< 比较匹配触发DMA
  327. Tim3UEVTrigDMA = 1u, ///< 事件更新代替比较匹配触发DMA
  328. }en_tim3_m23_mscr_ccds_t;
  329. /**
  330. ******************************************************************************
  331. ** \brief 主从模式选择 数据类型重定义 (MSM)(模式23)
  332. *****************************************************************************/
  333. typedef enum en_tim3_m23_mscr_msm
  334. {
  335. Tim3SlaveMode = 0u, ///< 从模式
  336. Tim3MasterMode = 1u, ///< 主模式
  337. }en_tim3_m23_mscr_msm_t;
  338. /**
  339. ******************************************************************************
  340. ** \brief 触发主模式输出源 数据类型重定义 (MMS)(模式23)
  341. *****************************************************************************/
  342. typedef enum en_tim3_m23_mscr_mms
  343. {
  344. Tim3MasterUG = 0u, ///< UG(软件更新)源
  345. Tim3MasterCTEN = 1u, ///< CTEN源
  346. Tim3MasterUEV = 2u, ///< UEV更新源
  347. Tim3MasterCMPSO = 3u, ///< 比较匹配选择输出源
  348. Tim3MasterOCA0Ref = 4u, ///< OCA0_Ref源
  349. Tim3MasterOCB0Ref = 5u, ///< OCB0_Ref源
  350. //Tim3MasterOCB0Ref = 6u,
  351. //Tim3MasterOCB0Ref = 7u,
  352. }en_tim3_m23_mscr_mms_t;
  353. /**
  354. ******************************************************************************
  355. ** \brief 触发从模式选择 数据类型重定义 (SMS)(模式23)
  356. *****************************************************************************/
  357. typedef enum en_tim3_m23_mscr_sms
  358. {
  359. Tim3SlaveIClk = 0u, ///< 使用内部时钟
  360. Tim3SlaveResetTIM = 1u, ///< 复位功能
  361. Tim3SlaveTrigMode = 2u, ///< 触发模式
  362. Tim3SlaveEClk = 3u, ///< 外部时钟模式
  363. Tim3SlaveCodeCnt1 = 4u, ///< 正交编码计数模式1
  364. Tim3SlaveCodeCnt2 = 5u, ///< 正交编码计数模式2
  365. Tim3SlaveCodeCnt3 = 6u, ///< 正交编码计数模式3
  366. Tim3SlaveGateCtrl = 7u, ///< 门控功能
  367. }en_tim3_m23_mscr_sms_t;
  368. /**
  369. ******************************************************************************
  370. ** \brief 定时器运行控制数据类型重定义 (CTEN)
  371. *****************************************************************************/
  372. typedef enum en_tim3_start
  373. {
  374. Tim3CTENDisable = 0u, ///< 停止
  375. Tim3CTENEnable = 1u, ///< 运行
  376. }en_tim3_start_t;
  377. /**
  378. ******************************************************************************
  379. ** \brief TIM3 mode0 配置结构体定义(模式0)
  380. *****************************************************************************/
  381. typedef struct stc_tim3_mode0_cfg
  382. {
  383. en_tim3_work_mode_t enWorkMode; ///< 工作模式设置
  384. en_tim3_m0cr_gatep_t enGateP; ///< 门控极性控制
  385. boolean_t bEnGate; ///< 门控使能
  386. en_tim3_cr_timclkdiv_t enPRS; ///< 预除频配置
  387. boolean_t bEnTog; ///< 翻转输出使能
  388. en_tim3_cr_ct_t enCT; ///< 定时/计数功能选择
  389. en_tim3_m0cr_md_t enCntMode; ///< 计数模式配置
  390. }stc_tim3_mode0_cfg_t;
  391. /**
  392. ******************************************************************************
  393. ** \brief TIM3 mode1 配置结构体定义(模式1)
  394. *****************************************************************************/
  395. typedef struct stc_tim3_mode1_cfg
  396. {
  397. en_tim3_work_mode_t enWorkMode; ///< 工作模式设置
  398. en_tim3_cr_timclkdiv_t enPRS; ///< 预除频配置
  399. en_tim3_cr_ct_t enCT; ///< 定时/计数功能选择
  400. en_tim3_m1cr_oneshot_t enOneShot; ///< 单次测量/循环测量选择
  401. }stc_tim3_mode1_cfg_t;
  402. /**
  403. ******************************************************************************
  404. ** \brief PWC输入配置结构体定义(模式1)
  405. *****************************************************************************/
  406. typedef struct stc_tim3_pwc_input_cfg
  407. {
  408. en_tim3_mscr_ts_t enTsSel; ///< 触发输入源选择
  409. en_tim3_m1_mscr_ia0s_t enIA0Sel; ///< CHA0输入选择
  410. en_tim3_m1_mscr_ib0s_t enIB0Sel; ///< CHB0输入选择
  411. en_tim3_port_polarity_t enETRPhase; ///< ETR相位选择
  412. en_tim3_flt_t enFltETR; ///< ETR滤波设置
  413. en_tim3_flt_t enFltIA0; ///< CHA0滤波设置
  414. en_tim3_flt_t enFltIB0; ///< CHB0滤波设置
  415. }stc_tim3_pwc_input_cfg_t;
  416. /**
  417. ******************************************************************************
  418. ** \brief TIM3 mode23 配置结构体定义(模式23)
  419. *****************************************************************************/
  420. typedef struct stc_tim3_mode23_cfg
  421. {
  422. en_tim3_work_mode_t enWorkMode; ///< 工作模式设置
  423. en_tim3_m23cr_dir_t enCntDir; ///< 计数方向
  424. en_tim3_cr_timclkdiv_t enPRS; ///< 时钟预除频配置
  425. en_tim3_cr_ct_t enCT; ///< 定时/计数功能选择
  426. en_tim3_m23cr_comp_t enPWMTypeSel; ///< PWM模式选择(独立/互补)
  427. en_tim3_m23cr_pwm2s_t enPWM2sSel; ///< OCREFA双点比较功能选择
  428. boolean_t bOneShot; ///< 单次触发模式使能/禁止
  429. boolean_t bURSSel; ///< 更新源选择
  430. }stc_tim3_mode23_cfg_t;
  431. /**
  432. ******************************************************************************
  433. ** \brief GATE在PWM互补模式下捕获或比较功能 配置结构体定义(模式23)
  434. *****************************************************************************/
  435. typedef struct stc_tim3_m23_gate_cfg
  436. {
  437. en_tim3_m23cr_csg_t enGateFuncSel; ///< Gate比较、捕获功能选择
  438. boolean_t bGateRiseCap; ///< GATE作为捕获功能时,上沿捕获有效控制
  439. boolean_t bGateFallCap; ///< GATE作为捕获功能时,下沿捕获有效控制
  440. }stc_tim3_m23_gate_cfg_t;
  441. /**
  442. ******************************************************************************
  443. ** \brief CHA/CHB通道比较控制 配置结构体定义(模式23)
  444. *****************************************************************************/
  445. typedef struct stc_tim3_m23_compare_cfg
  446. {
  447. en_tim3_m23_crch0_csa_csb_t enCHxACmpCap; ///< CH0A比较/捕获功能选择
  448. en_tim3_m23_fltr_ocm_t enCHxACmpCtrl; ///< CH0A通道比较控制
  449. en_tim3_port_polarity_t enCHxAPolarity; ///< CH0A输出极性控制
  450. boolean_t bCHxACmpBufEn; ///< 比较A缓存功能 使能/禁止
  451. en_tim3_m23_cisa_cisb_t enCHxACmpIntSel; ///< CHA比较匹配中断选择
  452. en_tim3_m23_crch0_csa_csb_t enCHxBCmpCap; ///< CH0B比较/捕获功能选择
  453. en_tim3_m23_fltr_ocm_t enCHxBCmpCtrl; ///< CH0B通道比较控制
  454. en_tim3_port_polarity_t enCHxBPolarity; ///< CH0B输出极性控制
  455. boolean_t bCHxBCmpBufEn; ///< 比较B缓存功能 使能/禁止
  456. en_tim3_m23_cisa_cisb_t enCHxBCmpIntSel; ///< CHB0比较匹配中断选择
  457. }stc_tim3_m23_compare_cfg_t;
  458. /**
  459. ******************************************************************************
  460. ** \brief CHA/CHB通道捕获控制 配置结构体定义(模式23)
  461. *****************************************************************************/
  462. typedef struct stc_tim3_m23_input_cfg
  463. {
  464. en_tim3_m23_crch0_csa_csb_t enCHxACmpCap; ///< CH0A比较/捕获功能选择
  465. en_tim3_m23_crch0_cfx_crx_t enCHxACapSel; ///< CH0A捕获边沿选择
  466. en_tim3_flt_t enCHxAInFlt; ///< CH0A通道捕获滤波控制
  467. en_tim3_port_polarity_t enCHxAPolarity; ///< CH0A输入相位
  468. en_tim3_m23_crch0_csa_csb_t enCHxBCmpCap; ///< CH0A比较/捕获功能选择
  469. en_tim3_m23_crch0_cfx_crx_t enCHxBCapSel; ///< CH0B捕获边沿选择
  470. en_tim3_flt_t enCHxBInFlt; ///< CH0B通道捕获滤波控制
  471. en_tim3_port_polarity_t enCHxBPolarity; ///< CH0B输入相位
  472. }stc_tim3_m23_input_cfg_t;
  473. /**
  474. ******************************************************************************
  475. ** \brief ETR输入相位滤波配置结构体定义(模式23)
  476. *****************************************************************************/
  477. typedef struct stc_tim3_m23_etr_input_cfg
  478. {
  479. en_tim3_port_polarity_t enETRPolarity; ///< ETR输入极性设置
  480. en_tim3_flt_t enETRFlt; ///< ETR滤波设置
  481. }stc_tim3_m23_etr_input_cfg_t;
  482. /**
  483. ******************************************************************************
  484. ** \brief 刹车BK输入相位滤波配置结构体定义(模式23)
  485. *****************************************************************************/
  486. typedef struct stc_tim3_m23_bk_input_cfg
  487. {
  488. boolean_t bEnBrake; ///< 刹车使能
  489. boolean_t bEnVCBrake; ///< 使能VC刹车
  490. boolean_t bEnSafetyBk; ///< 使能safety刹车
  491. boolean_t bEnBKSync; ///< TIM0/TIM1/TIM2刹车同步使能
  492. en_tim3_m23_crchx_bks_t enBkCH0AStat; ///< 刹车时CHA端口状态设置
  493. en_tim3_m23_crchx_bks_t enBkCH0BStat; ///< 刹车时CHB端口状态设置
  494. en_tim3_m23_crchx_bks_t enBkCH1AStat; ///< 刹车时CHA端口状态设置
  495. en_tim3_m23_crchx_bks_t enBkCH1BStat; ///< 刹车时CHB端口状态设置
  496. en_tim3_m23_crchx_bks_t enBkCH2AStat; ///< 刹车时CHA端口状态设置
  497. en_tim3_m23_crchx_bks_t enBkCH2BStat; ///< 刹车时CHB端口状态设置
  498. en_tim3_port_polarity_t enBrakePolarity; ///< 刹车BK输入极性设置
  499. en_tim3_flt_t enBrakeFlt; ///< 刹车BK滤波设置
  500. }stc_tim3_m23_bk_input_cfg_t;
  501. /**
  502. ******************************************************************************
  503. ** \brief 死区功能配置结构体定义(模式23)
  504. *****************************************************************************/
  505. typedef struct stc_tim3_m23_dt_cfg
  506. {
  507. boolean_t bEnDeadTime; ///< 刹车时CHA端口状态设置
  508. uint8_t u8DeadTimeValue; ///< 刹车时CHA端口状态设置
  509. }stc_tim3_m23_dt_cfg_t;
  510. /**
  511. ******************************************************************************
  512. ** \brief 触发ADC配置结构体定义(模式23)
  513. *****************************************************************************/
  514. typedef struct stc_tim3_m23_adc_trig_cfg
  515. {
  516. boolean_t bEnTrigADC; ///< 触发ADC全局控制
  517. boolean_t bEnUevTrigADC; ///< 事件更新触发ADC
  518. boolean_t bEnCH0ACmpTrigADC; ///< CH0A比较匹配触发ADC
  519. boolean_t bEnCH0BCmpTrigADC; ///< CH0B比较匹配触发ADC
  520. boolean_t bEnCH1ACmpTrigADC; ///< CH0A比较匹配触发ADC
  521. boolean_t bEnCH1BCmpTrigADC; ///< CH0B比较匹配触发ADC
  522. boolean_t bEnCH2ACmpTrigADC; ///< CH0A比较匹配触发ADC
  523. boolean_t bEnCH2BCmpTrigADC; ///< CH0B比较匹配触发ADC
  524. }stc_tim3_m23_adc_trig_cfg_t;
  525. /**
  526. ******************************************************************************
  527. ** \brief DMA触发 配置结构体定义(模式23)
  528. *****************************************************************************/
  529. typedef struct stc_tim3_m23_trig_dma_cfg
  530. {
  531. boolean_t bUevTrigDMA; ///< 更新 触发DMA使能
  532. boolean_t bTITrigDMA; ///< Trig 触发DMA功能
  533. boolean_t bCmpA0TrigDMA; ///< CH0A捕获比较触发DMA使能
  534. boolean_t bCmpB0TrigDMA; ///< CH0B捕获比较触发DMA使能
  535. boolean_t bCmpA1TrigDMA; ///< CH1A捕获比较触发DMA使能
  536. boolean_t bCmpB1TrigDMA; ///< CH1B捕获比较触发DMA使能
  537. boolean_t bCmpA2TrigDMA; ///< CH2A捕获比较触发DMA使能
  538. boolean_t bCmpB2TrigDMA; ///< CH2B捕获比较触发DMA使能
  539. en_tim3_m23_mscr_ccds_t enCmpUevTrigDMA; ///< 比较模式下DMA比较触发选择
  540. }stc_tim3_m23_trig_dma_cfg_t;
  541. /**
  542. ******************************************************************************
  543. ** \brief 主从模式 配置结构体定义(模式23)
  544. *****************************************************************************/
  545. typedef struct stc_tim3_m23_master_slave_cfg
  546. {
  547. en_tim3_m23_mscr_msm_t enMasterSlaveSel; ///< 主从模式选择
  548. en_tim3_m23_mscr_mms_t enMasterSrc; ///< 主模式触发源选择
  549. en_tim3_m23_mscr_sms_t enSlaveModeSel; ///< 从模式选择
  550. en_tim3_mscr_ts_t enTsSel; ///< 触发输入源选择
  551. }stc_tim3_m23_master_slave_cfg_t;
  552. /**
  553. ******************************************************************************
  554. ** \brief OCREF清除功能 配置结构体定义(模式23)
  555. *****************************************************************************/
  556. typedef struct stc_tim3_m23_OCREF_Clr_cfg
  557. {
  558. en_tim3_m23ce_occs_t enOCRefClrSrcSel; ///< OCREF清除源选择
  559. boolean_t bVCClrEn; ///< 是否使能来自VC的OCREF_Clr
  560. }stc_tim3_m23_OCREF_Clr_cfg_t;
  561. /******************************************************************************
  562. * Global variable declarations ('extern', definition in C source)
  563. *****************************************************************************/
  564. /******************************************************************************
  565. * Global function prototypes (definition in C source)
  566. *****************************************************************************/
  567. //中断相关函数
  568. //中断标志获取
  569. boolean_t Tim3_GetIntFlag(en_tim3_irq_type_t enTim3Irq);
  570. //中断标志清除
  571. en_result_t Tim3_ClearIntFlag(en_tim3_irq_type_t enTim3Irq);
  572. //所有中断标志清除
  573. en_result_t Tim3_ClearAllIntFlag(void);
  574. //模式0中断使能
  575. en_result_t Tim3_Mode0_EnableIrq(void);
  576. //模式1中断使能
  577. en_result_t Tim3_Mode1_EnableIrq (en_tim3_irq_type_t enTim3Irq);
  578. //模式2中断使能
  579. en_result_t Tim3_Mode23_EnableIrq (en_tim3_irq_type_t enTim3Irq);
  580. //模式0中断禁止
  581. en_result_t Tim3_Mode0_DisableIrq(void);
  582. //模式1中断禁止
  583. en_result_t Tim3_Mode1_DisableIrq (en_tim3_irq_type_t enTim3Irq);
  584. //模式2中断禁止
  585. en_result_t Tim3_Mode23_DisableIrq (en_tim3_irq_type_t enTim3Irq);
  586. //模式0初始化及相关功能操作
  587. //timer配置及初始化
  588. en_result_t Tim3_Mode0_Init(stc_tim3_mode0_cfg_t* pstcCfg);
  589. //timer 启动/停止
  590. en_result_t Tim3_M0_Run(void);
  591. en_result_t Tim3_M0_Stop(void);
  592. //重载值设置
  593. en_result_t Tim3_M0_ARRSet(uint16_t u16Data);
  594. //16位计数值设置/获取
  595. en_result_t Tim3_M0_Cnt16Set(uint16_t u16Data);
  596. uint16_t Tim3_M0_Cnt16Get(void);
  597. //32位计数值设置/获取
  598. en_result_t Tim3_M0_Cnt32Set(uint32_t u32Data);
  599. uint32_t Tim3_M0_Cnt32Get(void);
  600. //端口输出使能/禁止设定
  601. en_result_t Tim3_M0_Enable_Output(boolean_t bEnOutput);
  602. //翻转使能/禁止(低电平)设定
  603. en_result_t Tim3_M0_EnTOG(boolean_t bEnTOG);
  604. //模式1初始化及相关功能操作
  605. //timer配置及初始化
  606. en_result_t Tim3_Mode1_Init(stc_tim3_mode1_cfg_t* pstcCfg);
  607. //PWC 输入配置
  608. en_result_t Tim3_M1_Input_Cfg(stc_tim3_pwc_input_cfg_t* pstcCfg);
  609. //PWC测量边沿起始结束选择
  610. en_result_t Tim3_M1_PWC_Edge_Sel(en_tim3_m1cr_Edge_t enEdgeSel);
  611. //timer 启动/停止
  612. en_result_t Tim3_M1_Run(void);
  613. en_result_t Tim3_M1_Stop(void);
  614. //16位计数值设置/获取
  615. en_result_t Tim3_M1_Cnt16Set(uint16_t u16Data);
  616. uint16_t Tim3_M1_Cnt16Get(void);
  617. //脉冲宽度测量结果数值获取
  618. uint16_t Tim3_M1_PWC_CapValueGet(void);
  619. //模式23初始化及相关功能操作
  620. //timer配置及初始化
  621. en_result_t Tim3_Mode23_Init(stc_tim3_mode23_cfg_t* pstcCfg);
  622. //timer 启动/停止
  623. en_result_t Tim3_M23_Run(void);
  624. en_result_t Tim3_M23_Stop(void);
  625. //PWM输出使能
  626. en_result_t Tim3_M23_EnPWM_Output(boolean_t bEnOutput, boolean_t bEnAutoOutput);
  627. //重载值设置
  628. en_result_t Tim3_M23_ARRSet(uint16_t u16Data, boolean_t bArrBufEn);
  629. //16位计数值设置/获取
  630. en_result_t Tim3_M23_Cnt16Set(uint16_t u16Data);
  631. uint16_t Tim3_M23_Cnt16Get(void);
  632. //比较捕获寄存器CCR0A/CCR0B设置/读取
  633. en_result_t Tim3_M23_CCR_Set(en_tim3_m23_ccrx_t enCCRSel, uint16_t u16Data);
  634. uint16_t Tim3_M23_CCR_Get(en_tim3_m23_ccrx_t enCCRSel);
  635. //PWM互补输出模式下,GATE功能选择
  636. en_result_t Tim3_M23_GateFuncSel(stc_tim3_m23_gate_cfg_t* pstcCfg);
  637. //主从模式配置
  638. en_result_t Tim3_M23_MasterSlave_Set(stc_tim3_m23_master_slave_cfg_t* pstcCfg);
  639. //CH0A/CH0B比较通道控制
  640. en_result_t Tim3_M23_PortOutput_Cfg(en_tim3_channel_t enTim3Chx, stc_tim3_m23_compare_cfg_t* pstcCfg);
  641. //CH0A/CH0B输入控制
  642. en_result_t Tim3_M23_PortInput_Cfg(en_tim3_channel_t enTim3Chx, stc_tim3_m23_input_cfg_t* pstcCfg);
  643. //ERT输入控制
  644. en_result_t Tim3_M23_ETRInput_Cfg(stc_tim3_m23_etr_input_cfg_t* pstcCfg);
  645. //刹车BK输入控制
  646. en_result_t Tim3_M23_BrakeInput_Cfg(stc_tim3_m23_bk_input_cfg_t* pstcBkCfg);
  647. //触发ADC控制
  648. en_result_t Tim3_M23_TrigADC_Cfg(stc_tim3_m23_adc_trig_cfg_t* pstcCfg);
  649. //死区功能
  650. en_result_t Tim3_M23_DT_Cfg(stc_tim3_m23_dt_cfg_t* pstcCfg);
  651. //重复周期设置
  652. en_result_t Tim3_M23_SetValidPeriod(uint8_t u8ValidPeriod);
  653. //OCREF清除功能
  654. en_result_t Tim3_M23_OCRefClr(stc_tim3_m23_OCREF_Clr_cfg_t* pstcCfg);
  655. //使能DMA传输
  656. en_result_t Tim3_M23_EnDMA(stc_tim3_m23_trig_dma_cfg_t* pstcCfg);
  657. //捕获比较A软件触发
  658. en_result_t Tim3_M23_EnSwTrigCapCmpA(en_tim3_channel_t enTim3Chx);
  659. //捕获比较B软件触发
  660. en_result_t Tim3_M23_EnSwTrigCapCmpB(en_tim3_channel_t enTim3Chx);
  661. //软件更新使能
  662. en_result_t Tim3_M23_EnSwUev(void);
  663. //软件触发使能
  664. en_result_t Tim3_M23_EnSwTrig(void);
  665. //软件刹车使能
  666. en_result_t Tim3_M23_EnSwBk(void);
  667. //@} // Tim3Group
  668. #ifdef __cplusplus
  669. #endif
  670. #endif /* __BT_H__ */
  671. /******************************************************************************
  672. * EOF (not truncated)
  673. *****************************************************************************/