hc32l196_timer3.h 35 KB

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