timer0.h 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788
  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 bt.h
  44. **
  45. ** 基本定时器数据结构及API声明
  46. ** @link BT Timer3 Group Some description @endlink
  47. **
  48. ** History:
  49. ** - 2018-04-29 Husj First Version
  50. **
  51. *****************************************************************************/
  52. #ifndef __TIMER0_H__
  53. #define __TIMER0_H__
  54. /*****************************************************************************
  55. * Include files
  56. *****************************************************************************/
  57. #include "ddl.h"
  58. #include "interrupts_hc32l136.h"
  59. #ifdef __cplusplus
  60. extern "C"
  61. {
  62. #endif
  63. /**
  64. ******************************************************************************
  65. ** \defgroup Tim0Group Base Timer (BT)
  66. **
  67. ******************************************************************************/
  68. //@{
  69. /******************************************************************************/
  70. /* Global pre-processor symbols/macros ('#define') */
  71. /******************************************************************************/
  72. /******************************************************************************
  73. * Global type definitions
  74. ******************************************************************************/
  75. /**
  76. ******************************************************************************
  77. ** \brief Timer3 通道定义
  78. *****************************************************************************/
  79. typedef enum en_tim0_channel
  80. {
  81. Tim0CH0 = 0u, ///< Timer3通道0
  82. Tim0CH1 = 1u, ///< Timer3通道1
  83. Tim0CH2 = 2u, ///< Timer3通道2
  84. }en_tim0_channel_t;
  85. /**
  86. ******************************************************************************
  87. ** \brief 工作模式选择数据类型重定义 (MODE)(模式0/1/23)
  88. *****************************************************************************/
  89. typedef enum en_tim0_work_mode
  90. {
  91. Tim0WorkMode0 = 0u, ///< 定时器模式
  92. Tim0WorkMode1 = 1u, ///< PWC模式
  93. Tim0WorkMode2 = 2u, ///< 锯齿波模式
  94. Tim0WorkMode3 = 3u, ///< 三角波模式
  95. }en_tim0_work_mode_t;
  96. /**
  97. ******************************************************************************
  98. ** \brief 极性控制数据类型重定义 (GATE_P)(模式0)
  99. *****************************************************************************/
  100. typedef enum en_tim0_m0cr_gatep
  101. {
  102. Tim0GatePositive = 0u, ///< 高电平有效
  103. Tim0GateOpposite = 1u, ///< 低电平有效
  104. }en_tim0_m0cr_gatep_t;
  105. /**
  106. ******************************************************************************
  107. ** \brief TIM3 预除频选择 (PRS)(模式0/1/23)
  108. *****************************************************************************/
  109. typedef enum en_tim0_cr_timclkdiv
  110. {
  111. Tim0PCLKDiv1 = 0u, ///< Div 1
  112. Tim0PCLKDiv2 = 1u, ///< Div 2
  113. Tim0PCLKDiv4 = 2u, ///< Div 4
  114. Tim0PCLKDiv8 = 3u, ///< Div 8
  115. Tim0PCLKDiv16 = 4u, ///< Div 16
  116. Tim0PCLKDiv32 = 5u, ///< Div 32
  117. Tim0PCLKDiv64 = 6u, ///< Div 64
  118. Tim0PCLKDiv256 = 7u, ///< Div 256
  119. }en_tim0_cr_timclkdiv_t;
  120. /**
  121. ******************************************************************************
  122. ** \brief 计数/定时器功能选择数据类型重定义 (CT)(模式0/1/23)
  123. *****************************************************************************/
  124. typedef enum en_tim0_cr_ct
  125. {
  126. Tim0Timer = 0u, ///< 定时器功能,计数时钟为内部PCLK
  127. Tim0Counter = 1u, ///< 计数器功能,计数时钟为外部ETR
  128. }en_tim0_cr_ct_t;
  129. /**
  130. ******************************************************************************
  131. ** \brief 定时器工作模式数据类型重定义 (MD)(模式0)
  132. *****************************************************************************/
  133. typedef enum en_tim0_m0cr_md
  134. {
  135. Tim032bitFreeMode = 0u, ///< 32位计数器/定时器
  136. Tim016bitArrMode = 1u, ///< 自动重装载16位计数器/定时器
  137. }en_tim0_m0cr_md_t;
  138. /**
  139. ******************************************************************************
  140. ** \brief TIM3中断类型数据类型重定义(模式0/1/23)
  141. *****************************************************************************/
  142. typedef enum en_tim0_irq_type
  143. {
  144. Tim0UevIrq = 0u, ///< 溢出/事件更新中断
  145. Tim0CA0Irq = 2u, ///< CH0A捕获/比较中断(仅模式1/23存在)
  146. Tim0CA1Irq = 3u, ///< CH1A捕获/比较中断(仅模式23存在)
  147. Tim0CA2Irq = 4u, ///< CH2A捕获/比较中断(仅模式23存在)
  148. Tim0CB0Irq = 5u, ///< CH0B捕获/比较中断(仅模式23存在)
  149. Tim0CB1Irq = 6u, ///< CH1B捕获/比较中断(仅模式23存在)
  150. Tim0CB2Irq = 7u, ///< CH2B捕获/比较中断(仅模式23存在)
  151. Tim0CA0E = 8u, ///< CH0A捕获数据丢失标志(仅模式23存在)(不是中断)
  152. Tim0CA1E = 9u, ///< CH1A捕获数据丢失标志(仅模式23存在)(不是中断)
  153. Tim0CA2E = 10u, ///< CH2A捕获数据丢失标志(仅模式23存在)(不是中断)
  154. Tim0CB0E = 11u, ///< CH0B捕获数据丢失标志(仅模式23存在)(不是中断)
  155. Tim0CB1E = 12u, ///< CH1B捕获数据丢失标志(仅模式23存在)(不是中断)
  156. Tim0CB2E = 13u, ///< CH2B捕获数据丢失标志(仅模式23存在)(不是中断)
  157. Tim0BkIrq = 14u, ///< 刹车中断(仅模式23存在)
  158. Tim0TrigIrq = 15u, ///< 触发中断(仅模式23存在)
  159. }en_tim0_irq_type_t;
  160. /**
  161. ******************************************************************************
  162. ** \brief 测量开始结束数据类型重定义 (Edg1stEdg2nd)(模式1)
  163. *****************************************************************************/
  164. typedef enum en_tim0_m1cr_Edge
  165. {
  166. Tim0PwcRiseToRise = 0u, ///< 上升沿到上升沿(周期)
  167. Tim0PwcFallToRise = 1u, ///< 下降沿到上升沿(低电平)
  168. Tim0PwcRiseToFall = 2u, ///< 上升沿到下降沿(高电平)
  169. Tim0PwcFallToFall = 3u, ///< 下降沿到下降沿(周期)
  170. }en_tim0_m1cr_Edge_t;
  171. /**
  172. ******************************************************************************
  173. ** \brief PWC测量测试模式选择数据类型重定义 (Oneshot)(模式1)
  174. *****************************************************************************/
  175. typedef enum en_tim0_m1cr_oneshot
  176. {
  177. Tim0PwcCycleDetect = 0u, ///< PWC循环测量
  178. Tim0PwcOneShotDetect = 1u, ///< PWC单次测量
  179. }en_tim0_m1cr_oneshot_t;
  180. /**
  181. ******************************************************************************
  182. ** \brief PWC IA0选择数据类型重定义 (IA0S)(模式1)
  183. *****************************************************************************/
  184. typedef enum en_tim0_m1_mscr_ia0s
  185. {
  186. Tim0IA0Input = 0u, ///< IAO输入
  187. Tim0XORInput = 1u, ///< IA0 ETR GATE XOR(TIM0/1/2)/IA0 IA1 IA2 XOR(TIM3)
  188. }en_tim0_m1_mscr_ia0s_t;
  189. /**
  190. ******************************************************************************
  191. ** \brief PWC IB0选择数据类型重定义 (IA0S)(模式1)
  192. *****************************************************************************/
  193. typedef enum en_tim0_m1_mscr_ib0s
  194. {
  195. Tim0IB0Input = 0u, ///< IBO输入
  196. Tim0TsInput = 1u, ///< 内部触发TS选择信号
  197. }en_tim0_m1_mscr_ib0s_t;
  198. /**
  199. ******************************************************************************
  200. ** \brief 输出极性、输入相位 数据类型重定义 (CCPA0/CCPB0/ETP/BKP)(模式1/23)
  201. *****************************************************************************/
  202. typedef enum en_tim0_port_polarity
  203. {
  204. Tim0PortPositive = 0u, ///< 正常输入输出
  205. Tim0PortOpposite = 1u, ///< 反向输入输出
  206. }en_tim0_port_polarity_t;
  207. /**
  208. ******************************************************************************
  209. ** \brief 滤波选择数据类型重定义 (FLTET/FLTA0/FLAB0)(模式1/23)
  210. *****************************************************************************/
  211. typedef enum en_tim0_flt
  212. {
  213. Tim0FltNone = 0u, ///< 无滤波
  214. Tim0FltPCLKCnt3 = 4u, ///< PCLK 3个连续有效
  215. Tim0FltPCLKDiv4Cnt3 = 5u, ///< PCLK/4 3个连续有效
  216. Tim0FltPCLKDiv16Cnt3 = 6u, ///< PCLK/16 3个连续有效
  217. Tim0FltPCLKDiv64Cnt3 = 7u, ///< PCLK/64 3个连续有效
  218. }en_tim0_flt_t;
  219. /**
  220. ******************************************************************************
  221. ** \brief 通道比较控制 数据类型重定义 (OCMA/OCMB)(模式23)
  222. *****************************************************************************/
  223. typedef enum en_tim0_m23_fltr_ocm
  224. {
  225. Tim0ForceLow = 0u, ///< 强制为0
  226. Tim0ForceHigh = 1u, ///< 强制为1
  227. Tim0CMPForceLow = 2u, ///< 比较匹配时强制为0
  228. Tim0CMPForceHigh = 3u, ///< 比较匹配时强制为1
  229. Tim0CMPInverse = 4u, ///< 比较匹配时翻转电平
  230. Tim0CMPOnePrdHigh = 5u, ///< 比较匹配时输出一个计数周期的高电平
  231. Tim0PWMMode1 = 6u, ///< 通道控制为PWM mode 1
  232. Tim0PWMMode2 = 7u, ///< 通道控制为PWM mode 2
  233. }en_tim0_m23_fltr_ocm_t;
  234. /**
  235. ******************************************************************************
  236. ** \brief 主从模式TS数据类型重定义 (TS)(模式1/23)
  237. *****************************************************************************/
  238. typedef enum en_tim0_mscr_ts
  239. {
  240. Tim0Ts0ETR = 0u, ///< ETR外部输入滤波后的相位选择信号
  241. Tim0Ts1TIM0TRGO = 1u, ///< Timer0的TRGO输出信号
  242. Tim0Ts2TIM1TRGO = 2u, ///< Timer1的TRGO输出信号
  243. Tim0Ts3TIM2TRGO = 3u, ///< Timer2的TRGO输出信号
  244. Tim0Ts4TIM3TRGO = 4u, ///< Timer3的TRGO输出信号
  245. //Tim0Ts5IA0ED = 5u, ///< 无效
  246. Tim0Ts6IAFP = 6u, ///< CH0A 外部输输入滤波后的相位选择信号
  247. Tim0Ts7IBFP = 7u, ///< CH0B 外部输输入滤波后的相位选择信
  248. }en_tim0_mscr_ts_t;
  249. /**
  250. ******************************************************************************
  251. ** \brief PWM输出模式选择数据类型重定义 (COMP)(模式23)
  252. *****************************************************************************/
  253. typedef enum en_tim0_m23cr_comp
  254. {
  255. Tim0IndependentPWM = 0u, ///< 独立PWM输出
  256. Tim0ComplementaryPWM = 1u, ///< 互补PWM输出
  257. }en_tim0_m23cr_comp_t;
  258. /**
  259. ******************************************************************************
  260. ** \brief 计数方向选择数据类型重定义 (DIR)(模式23)
  261. *****************************************************************************/
  262. typedef enum en_tim0_m23cr_dir
  263. {
  264. Tim0CntUp = 0u, ///< 向上计数
  265. Tim0CntDown = 1u, ///< 向下计数
  266. }en_tim0_m23cr_dir_t;
  267. /**
  268. ******************************************************************************
  269. ** \brief 计数方向选择数据类型重定义 (PWM2S)(模式23)
  270. *****************************************************************************/
  271. typedef enum en_tim0_m23cr_pwm2s
  272. {
  273. Tim0DoublePointCmp = 0u, ///< 双点比较使能,使用CCRA,CCRB比较控制OCREFA输出
  274. Tim0SinglePointCmp = 1u, ///< 单点比较使能,使用CCRA比较控制OCREFA输出
  275. }en_tim0_m23cr_pwm2s_t;
  276. /**
  277. ******************************************************************************
  278. ** \brief GATE在PWM互补模式下捕获或比较功能 选择数据类型重定义 (CSG)(模式23)
  279. *****************************************************************************/
  280. typedef enum en_tim0_m23cr_csg
  281. {
  282. Tim0PWMCompGateCmpOut = 0u, ///< 在PWM互补模式下,Gate作为比较输出
  283. Tim0PWMCompGateCapIn = 1u, ///< 在PWM互补模式下,Gate作为捕获输入
  284. }en_tim0_m23cr_csg_t;
  285. /**
  286. ******************************************************************************
  287. ** \brief 比较捕获寄存器 数据类型重定义 (CCR0A,CCR0B)(模式23)
  288. *****************************************************************************/
  289. typedef enum en_tim0_m23_ccrx
  290. {
  291. Tim0CCR0A = 0u, ///< CCR0A比较捕获寄存器
  292. Tim0CCR0B = 1u, ///< CCR0B比较捕获寄存器
  293. Tim0CCR1A = 2u, ///< CCR1A比较捕获寄存器
  294. Tim0CCR1B = 3u, ///< CCR1B比较捕获寄存器
  295. Tim0CCR2A = 4u, ///< CCR2A比较捕获寄存器
  296. Tim0CCR2B = 5u, ///< CCR2B比较捕获寄存器
  297. }en_tim0_m23_ccrx_t;
  298. /**
  299. ******************************************************************************
  300. ** \brief OCREF清除源 选择数据类型重定义 (OCCS)(模式23)
  301. *****************************************************************************/
  302. typedef enum en_tim0_m23ce_occs
  303. {
  304. Tim0OC_Ref_Clr = 0u, ///< 来自VC的OC_Ref_Clr
  305. Tim0ETRf = 1u, ///< 外部ETRf
  306. }en_tim0_m23ce_occs_t;
  307. /**
  308. ******************************************************************************
  309. ** \brief 比较匹配中断模式 选择数据类型重定义 (CIS/CISB)(模式23)
  310. *****************************************************************************/
  311. typedef enum en_tim0_m23_cisa_cisb
  312. {
  313. Tim0CmpIntNone = 0u, ///< 无比较匹配中断
  314. Tim0CmpIntRise = 1u, ///< 比较匹配上升沿中断
  315. Tim0CmpIntFall = 2u, ///< 比较匹配下降沿中断
  316. Tim0CmpIntRiseFall = 3u, ///< 比较匹配上升沿下降沿中断
  317. }en_tim0_m23_cisa_cisb_t;
  318. /**
  319. ******************************************************************************
  320. ** \brief TIM3端口控制 - 刹车时CHx输出状态控制(BKSA/BKSB)(模式23)
  321. **
  322. ** \note
  323. ******************************************************************************/
  324. typedef enum en_tim0_m23_crchx_bks
  325. {
  326. Tim0CHxBksHiZ = 0u, ///< 刹车使能时,CHx端口输出高阻态
  327. Tim0CHxBksNorm = 1u, ///< 刹车使能时,CHx端口正常输出
  328. Tim0CHxBksLow = 2u, ///< 刹车使能时,CHx端口输出低电平
  329. Tim0CHxBksHigh = 3u, ///< 刹车使能时,CHx端口输出高电平
  330. }en_tim0_m23_crchx_bks_t;
  331. /**
  332. ******************************************************************************
  333. ** \brief TIM3端口控制 - CHx上升沿下降沿捕获(CRx/CFx)(模式23)
  334. **
  335. ** \note
  336. ******************************************************************************/
  337. typedef enum en_tim0_m23_crch0_cfx_crx
  338. {
  339. Tim0CHxCapNone = 0u, ///< CHx通道捕获禁止
  340. Tim0CHxCapRise = 1u, ///< CHx通道上升沿捕获使能
  341. Tim0CHxCapFall = 2u, ///< CHx通道下降沿捕获使能
  342. Tim0CHxCapFallRise = 3u, ///< CHx通道上升沿下降沿捕获都使能
  343. }en_tim0_m23_crch0_cfx_crx_t;
  344. /**
  345. ******************************************************************************
  346. ** \brief TIM3端口控制 - CHx比较捕获模式(CSA/CSB)(模式23)
  347. **
  348. ** \note
  349. ******************************************************************************/
  350. typedef enum en_tim0_m23_crch0_csa_csb
  351. {
  352. Tim0CHxCmpMode = 0u, ///< CHx通道设置为比较模式
  353. Tim0CHxCapMode = 1u, ///< CHx通道设置为捕获模式
  354. }en_tim0_m23_crch0_csa_csb_t;
  355. /**
  356. ******************************************************************************
  357. ** \brief 比较模式下 DMA比较触发选择 数据类型重定义 (CCDS)(模式23)
  358. *****************************************************************************/
  359. typedef enum en_tim0_m23_mscr_ccds
  360. {
  361. Tim0CmpTrigDMA = 0u, ///< 比较匹配触发DMA
  362. Tim0UEVTrigDMA = 1u, ///< 事件更新代替比较匹配触发DMA
  363. }en_tim0_m23_mscr_ccds_t;
  364. /**
  365. ******************************************************************************
  366. ** \brief 主从模式选择 数据类型重定义 (MSM)(模式23)
  367. *****************************************************************************/
  368. typedef enum en_tim0_m23_mscr_msm
  369. {
  370. Tim0SlaveMode = 0u, ///< 从模式
  371. Tim0MasterMode = 1u, ///< 主模式
  372. }en_tim0_m23_mscr_msm_t;
  373. /**
  374. ******************************************************************************
  375. ** \brief 触发主模式输出源 数据类型重定义 (MMS)(模式23)
  376. *****************************************************************************/
  377. typedef enum en_tim0_m23_mscr_mms
  378. {
  379. Tim0MasterUG = 0u, ///< UG(软件更新)源
  380. Tim0MasterCTEN = 1u, ///< CTEN源
  381. Tim0MasterUEV = 2u, ///< UEV更新源
  382. Tim0MasterCMPSO = 3u, ///< 比较匹配选择输出源
  383. Tim0MasterOCA0Ref = 4u, ///< OCA0_Ref源
  384. Tim0MasterOCB0Ref = 5u, ///< OCB0_Ref源
  385. //Tim0MasterOCB0Ref = 6u,
  386. //Tim0MasterOCB0Ref = 7u,
  387. }en_tim0_m23_mscr_mms_t;
  388. /**
  389. ******************************************************************************
  390. ** \brief 触发从模式选择 数据类型重定义 (SMS)(模式23)
  391. *****************************************************************************/
  392. typedef enum en_tim0_m23_mscr_sms
  393. {
  394. Tim0SlaveIClk = 0u, ///< 使用内部时钟
  395. Tim0SlaveResetTIM = 1u, ///< 复位功能
  396. Tim0SlaveTrigMode = 2u, ///< 触发模式
  397. Tim0SlaveEClk = 3u, ///< 外部时钟模式
  398. Tim0SlaveCodeCnt1 = 4u, ///< 正交编码计数模式1
  399. Tim0SlaveCodeCnt2 = 5u, ///< 正交编码计数模式2
  400. Tim0SlaveCodeCnt3 = 6u, ///< 正交编码计数模式3
  401. Tim0SlaveGateCtrl = 7u, ///< 门控功能
  402. }en_tim0_m23_mscr_sms_t;
  403. /**
  404. ******************************************************************************
  405. ** \brief 定时器运行控制数据类型重定义 (CTEN)
  406. *****************************************************************************/
  407. typedef enum en_tim0_start
  408. {
  409. Tim0CTENDisable = 0u, ///< 停止
  410. Tim0CTENEnable = 1u, ///< 运行
  411. }en_tim0_start_t;
  412. /**
  413. ******************************************************************************
  414. ** \brief TIM3 mode0 配置结构体定义(模式0)
  415. *****************************************************************************/
  416. typedef struct stc_tim0_mode0_config
  417. {
  418. en_tim0_work_mode_t enWorkMode; ///< 工作模式设置
  419. en_tim0_m0cr_gatep_t enGateP; ///< 门控极性控制
  420. boolean_t bEnGate; ///< 门控使能
  421. en_tim0_cr_timclkdiv_t enPRS; ///< 预除频配置
  422. boolean_t bEnTog; ///< 翻转输出使能
  423. en_tim0_cr_ct_t enCT; ///< 定时/计数功能选择
  424. en_tim0_m0cr_md_t enCntMode; ///< 计数模式配置
  425. func_ptr_t pfnTim0Cb; ///< Timer3中断服务回调函数[void function(void)]
  426. }stc_tim0_mode0_config_t;
  427. /**
  428. ******************************************************************************
  429. ** \brief TIM3 mode1 配置结构体定义(模式1)
  430. *****************************************************************************/
  431. typedef struct stc_tim0_mode1_config
  432. {
  433. en_tim0_work_mode_t enWorkMode; ///< 工作模式设置
  434. en_tim0_cr_timclkdiv_t enPRS; ///< 预除频配置
  435. en_tim0_cr_ct_t enCT; ///< 定时/计数功能选择
  436. en_tim0_m1cr_oneshot_t enOneShot; ///< 单次测量/循环测量选择
  437. func_ptr_t pfnTim0Cb; ///< Timer3中断服务回调函数[void function(void)]
  438. }stc_tim0_mode1_config_t;
  439. /**
  440. ******************************************************************************
  441. ** \brief PWC输入配置结构体定义(模式1)
  442. *****************************************************************************/
  443. typedef struct stc_tim0_pwc_input_config
  444. {
  445. en_tim0_mscr_ts_t enTsSel; ///< 触发输入源选择
  446. en_tim0_m1_mscr_ia0s_t enIA0Sel; ///< CHA0输入选择
  447. en_tim0_m1_mscr_ib0s_t enIB0Sel; ///< CHB0输入选择
  448. en_tim0_port_polarity_t enETRPhase; ///< ETR相位选择
  449. en_tim0_flt_t enFltETR; ///< ETR滤波设置
  450. en_tim0_flt_t enFltIA0; ///< CHA0滤波设置
  451. en_tim0_flt_t enFltIB0; ///< CHB0滤波设置
  452. }stc_tim0_pwc_input_config_t;
  453. /**
  454. ******************************************************************************
  455. ** \brief TIM3 mode23 配置结构体定义(模式23)
  456. *****************************************************************************/
  457. typedef struct stc_tim0_mode23_config
  458. {
  459. en_tim0_work_mode_t enWorkMode; ///< 工作模式设置
  460. en_tim0_m23cr_dir_t enCntDir; ///< 计数方向
  461. en_tim0_cr_timclkdiv_t enPRS; ///< 时钟预除频配置
  462. en_tim0_cr_ct_t enCT; ///< 定时/计数功能选择
  463. en_tim0_m23cr_comp_t enPWMTypeSel; ///< PWM模式选择(独立/互补)
  464. en_tim0_m23cr_pwm2s_t enPWM2sSel; ///< OCREFA双点比较功能选择
  465. boolean_t bOneShot; ///< 单次触发模式使能/禁止
  466. boolean_t bURSSel; ///< 更新源选择
  467. func_ptr_t pfnTim0Cb; ///< Timer3中断服务回调函数[void function(void)]
  468. }stc_tim0_mode23_config_t;
  469. /**
  470. ******************************************************************************
  471. ** \brief GATE在PWM互补模式下捕获或比较功能 配置结构体定义(模式23)
  472. *****************************************************************************/
  473. typedef struct stc_tim0_m23_gate_config
  474. {
  475. en_tim0_m23cr_csg_t enGateFuncSel; ///< Gate比较、捕获功能选择
  476. boolean_t bGateRiseCap; ///< GATE作为捕获功能时,上沿捕获有效控制
  477. boolean_t bGateFallCap; ///< GATE作为捕获功能时,下沿捕获有效控制
  478. }stc_tim0_m23_gate_config_t;
  479. /**
  480. ******************************************************************************
  481. ** \brief CHA/CHB通道比较控制 配置结构体定义(模式23)
  482. *****************************************************************************/
  483. typedef struct stc_tim0_m23_compare_config
  484. {
  485. en_tim0_m23_crch0_csa_csb_t enCHxACmpCap; ///< CH0A比较/捕获功能选择
  486. en_tim0_m23_fltr_ocm_t enCHxACmpCtrl; ///< CH0A通道比较控制
  487. en_tim0_port_polarity_t enCHxAPolarity; ///< CH0A输出极性控制
  488. boolean_t bCHxACmpBufEn; ///< 比较A缓存功能 使能/禁止
  489. en_tim0_m23_cisa_cisb_t enCHxACmpIntSel; ///< CHA比较匹配中断选择
  490. en_tim0_m23_crch0_csa_csb_t enCHxBCmpCap; ///< CH0B比较/捕获功能选择
  491. en_tim0_m23_fltr_ocm_t enCHxBCmpCtrl; ///< CH0B通道比较控制
  492. en_tim0_port_polarity_t enCHxBPolarity; ///< CH0B输出极性控制
  493. boolean_t bCHxBCmpBufEn; ///< 比较B缓存功能 使能/禁止
  494. en_tim0_m23_cisa_cisb_t enCHxBCmpIntSel; ///< CHB0比较匹配中断选择
  495. }stc_tim0_m23_compare_config_t;
  496. /**
  497. ******************************************************************************
  498. ** \brief CHA/CHB通道捕获控制 配置结构体定义(模式23)
  499. *****************************************************************************/
  500. typedef struct stc_tim0_m23_input_config
  501. {
  502. en_tim0_m23_crch0_csa_csb_t enCHxACmpCap; ///< CH0A比较/捕获功能选择
  503. en_tim0_m23_crch0_cfx_crx_t enCHxACapSel; ///< CH0A捕获边沿选择
  504. en_tim0_flt_t enCHxAInFlt; ///< CH0A通道捕获滤波控制
  505. en_tim0_port_polarity_t enCHxAPolarity; ///< CH0A输入相位
  506. en_tim0_m23_crch0_csa_csb_t enCHxBCmpCap; ///< CH0A比较/捕获功能选择
  507. en_tim0_m23_crch0_cfx_crx_t enCHxBCapSel; ///< CH0B捕获边沿选择
  508. en_tim0_flt_t enCHxBInFlt; ///< CH0B通道捕获滤波控制
  509. en_tim0_port_polarity_t enCHxBPolarity; ///< CH0B输入相位
  510. }stc_tim0_m23_input_config_t;
  511. /**
  512. ******************************************************************************
  513. ** \brief ETR输入相位滤波配置结构体定义(模式23)
  514. *****************************************************************************/
  515. typedef struct stc_tim0_m23_etr_input_config
  516. {
  517. en_tim0_port_polarity_t enETRPolarity; ///< ETR输入极性设置
  518. en_tim0_flt_t enETRFlt; ///< ETR滤波设置
  519. }stc_tim0_m23_etr_input_config_t;
  520. /**
  521. ******************************************************************************
  522. ** \brief 刹车BK输入相位滤波配置结构体定义(模式23)
  523. *****************************************************************************/
  524. typedef struct stc_tim0_m23_bk_input_config
  525. {
  526. boolean_t bEnBrake; ///< 刹车使能
  527. boolean_t bEnVC0Brake; ///< 使能VC0刹车
  528. boolean_t bEnVC1Brake; ///< 使能VC1刹车
  529. boolean_t bEnSafetyBk; ///< 使能safety刹车
  530. boolean_t bEnBKSync; ///< TIM0/TIM1/TIM2刹车同步使能
  531. en_tim0_m23_crchx_bks_t enBkCH0AStat; ///< 刹车时CHA端口状态设置
  532. en_tim0_m23_crchx_bks_t enBkCH0BStat; ///< 刹车时CHB端口状态设置
  533. en_tim0_m23_crchx_bks_t enBkCH1AStat; ///< 刹车时CHA端口状态设置
  534. en_tim0_m23_crchx_bks_t enBkCH1BStat; ///< 刹车时CHB端口状态设置
  535. en_tim0_m23_crchx_bks_t enBkCH2AStat; ///< 刹车时CHA端口状态设置
  536. en_tim0_m23_crchx_bks_t enBkCH2BStat; ///< 刹车时CHB端口状态设置
  537. en_tim0_port_polarity_t enBrakePolarity; ///< 刹车BK输入极性设置
  538. en_tim0_flt_t enBrakeFlt; ///< 刹车BK滤波设置
  539. }stc_tim0_m23_bk_input_config_t;
  540. /**
  541. ******************************************************************************
  542. ** \brief 死区功能配置结构体定义(模式23)
  543. *****************************************************************************/
  544. typedef struct stc_tim0_m23_dt_config
  545. {
  546. boolean_t bEnDeadTime; ///< 刹车时CHA端口状态设置
  547. uint8_t u8DeadTimeValue; ///< 刹车时CHA端口状态设置
  548. }stc_tim0_m23_dt_config_t;
  549. /**
  550. ******************************************************************************
  551. ** \brief 触发ADC配置结构体定义(模式23)
  552. *****************************************************************************/
  553. typedef struct stc_tim0_m23_adc_trig_config
  554. {
  555. boolean_t bEnTrigADC; ///< 触发ADC全局控制
  556. boolean_t bEnUevTrigADC; ///< 事件更新触发ADC
  557. boolean_t bEnCH0ACmpTrigADC; ///< CH0A比较匹配触发ADC
  558. boolean_t bEnCH0BCmpTrigADC; ///< CH0B比较匹配触发ADC
  559. boolean_t bEnCH1ACmpTrigADC; ///< CH0A比较匹配触发ADC
  560. boolean_t bEnCH1BCmpTrigADC; ///< CH0B比较匹配触发ADC
  561. boolean_t bEnCH2ACmpTrigADC; ///< CH0A比较匹配触发ADC
  562. boolean_t bEnCH2BCmpTrigADC; ///< CH0B比较匹配触发ADC
  563. }stc_tim0_m23_adc_trig_config_t;
  564. /**
  565. ******************************************************************************
  566. ** \brief DMA触发 配置结构体定义(模式23)
  567. *****************************************************************************/
  568. typedef struct stc_tim0_m23_trig_dma_config
  569. {
  570. boolean_t bUevTrigDMA; ///< 更新 触发DMA使能
  571. boolean_t bTITrigDMA; ///< Trig 触发DMA功能
  572. boolean_t bCmpA0TrigDMA; ///< CH0A捕获比较触发DMA使能
  573. boolean_t bCmpB0TrigDMA; ///< CH0B捕获比较触发DMA使能
  574. boolean_t bCmpA1TrigDMA; ///< CH1A捕获比较触发DMA使能
  575. boolean_t bCmpB1TrigDMA; ///< CH1B捕获比较触发DMA使能
  576. boolean_t bCmpA2TrigDMA; ///< CH2A捕获比较触发DMA使能
  577. boolean_t bCmpB2TrigDMA; ///< CH2B捕获比较触发DMA使能
  578. en_tim0_m23_mscr_ccds_t enCmpUevTrigDMA; ///< 比较模式下DMA比较触发选择
  579. }stc_tim0_m23_trig_dma_config_t;
  580. /**
  581. ******************************************************************************
  582. ** \brief 主从模式 配置结构体定义(模式23)
  583. *****************************************************************************/
  584. typedef struct stc_tim0_m23_master_slave_config
  585. {
  586. en_tim0_m23_mscr_msm_t enMasterSlaveSel; ///< 主从模式选择
  587. en_tim0_m23_mscr_mms_t enMasterSrc; ///< 主模式触发源选择
  588. en_tim0_m23_mscr_sms_t enSlaveModeSel; ///< 从模式选择
  589. en_tim0_mscr_ts_t enTsSel; ///< 触发输入源选择
  590. }stc_tim0_m23_master_slave_config_t;
  591. /**
  592. ******************************************************************************
  593. ** \brief OCREF清除功能 配置结构体定义(模式23)
  594. *****************************************************************************/
  595. typedef struct stc_tim0_m23_OCREF_Clr_config
  596. {
  597. en_tim0_m23ce_occs_t enOCRefClrSrcSel; ///< OCREF清除源选择
  598. boolean_t bVCClrEn; ///< 是否使能来自VC的OCREF_Clr
  599. }stc_tim0_m23_OCREF_Clr_config_t;
  600. /******************************************************************************
  601. * Global variable declarations ('extern', definition in C source)
  602. *****************************************************************************/
  603. /******************************************************************************
  604. * Global function prototypes (definition in C source)
  605. *****************************************************************************/
  606. //中断相关函数
  607. //中断标志获取
  608. boolean_t Tim0_GetIntFlag(en_tim0_irq_type_t enTim0Irq);
  609. //中断标志清除
  610. en_result_t Tim0_ClearIntFlag(en_tim0_irq_type_t enTim0Irq);
  611. //所有中断标志清除
  612. en_result_t Tim0_ClearAllIntFlag(void);
  613. //模式0中断使能
  614. en_result_t Tim0_Mode0_EnableIrq(void);
  615. //模式1中断使能
  616. en_result_t Tim0_Mode1_EnableIrq (en_tim0_irq_type_t enTim0Irq);
  617. //模式2中断使能
  618. en_result_t Tim0_Mode23_EnableIrq (en_tim0_irq_type_t enTim0Irq);
  619. //模式0中断禁止
  620. en_result_t Tim0_Mode0_DisableIrq(void);
  621. //模式1中断禁止
  622. en_result_t Tim0_Mode1_DisableIrq (en_tim0_irq_type_t enTim0Irq);
  623. //模式2中断禁止
  624. en_result_t Tim0_Mode23_DisableIrq (en_tim0_irq_type_t enTim0Irq);
  625. //模式0初始化及相关功能操作
  626. //timer配置及初始化
  627. en_result_t Tim0_Mode0_Init(stc_tim0_mode0_config_t* pstcConfig);
  628. //timer 启动/停止
  629. en_result_t Tim0_M0_Run(void);
  630. en_result_t Tim0_M0_Stop(void);
  631. //重载值设置
  632. en_result_t Tim0_M0_ARRSet(uint16_t u16Data);
  633. //16位计数值设置/获取
  634. en_result_t Tim0_M0_Cnt16Set(uint16_t u16Data);
  635. uint16_t Tim0_M0_Cnt16Get(void);
  636. //32位计数值设置/获取
  637. en_result_t Tim0_M0_Cnt32Set(uint32_t u32Data);
  638. uint32_t Tim0_M0_Cnt32Get(void);
  639. //翻转输出使能/禁止设定
  640. en_result_t Tim0_M0_EnTOG_Output(boolean_t bEnOutput);
  641. //模式1初始化及相关功能操作
  642. //timer配置及初始化
  643. en_result_t Tim0_Mode1_Init(stc_tim0_mode1_config_t* pstcConfig);
  644. //PWC 输入配置
  645. en_result_t Tim0_M1_Input_Config(stc_tim0_pwc_input_config_t* pstcConfig);
  646. //PWC测量边沿起始结束选择
  647. en_result_t Tim0_M1_PWC_Edge_Sel(en_tim0_m1cr_Edge_t enEdgeSel);
  648. //timer 启动/停止
  649. en_result_t Tim0_M1_Run(void);
  650. en_result_t Tim0_M1_Stop(void);
  651. //16位计数值设置/获取
  652. en_result_t Tim0_M1_Cnt16Set(uint16_t u16Data);
  653. uint16_t Tim0_M1_Cnt16Get(void);
  654. //脉冲宽度测量结果数值获取
  655. uint16_t Tim0_M1_PWC_CapValueGet(void);
  656. //模式1初始化及相关功能操作
  657. //timer配置及初始化
  658. en_result_t Tim0_Mode23_Init(stc_tim0_mode23_config_t* pstcConfig);
  659. //timer 启动/停止
  660. en_result_t Tim0_M23_Run(void);
  661. en_result_t Tim0_M23_Stop(void);
  662. //PWM输出使能
  663. en_result_t Tim0_M23_EnPWM_Output(boolean_t bEnOutput, boolean_t bEnAutoOutput);
  664. //重载值设置
  665. en_result_t Tim0_M23_ARRSet(uint16_t u16Data, boolean_t bArrBufEn);
  666. //16位计数值设置/获取
  667. en_result_t Tim0_M23_Cnt16Set(uint16_t u16Data);
  668. uint16_t Tim0_M23_Cnt16Get(void);
  669. //比较捕获寄存器CCR0A/CCR0B设置/读取
  670. en_result_t Tim0_M23_CCR_Set(en_tim0_m23_ccrx_t enCCRSel, uint16_t u16Data);
  671. uint16_t Tim0_M23_CCR_Get(en_tim0_m23_ccrx_t enCCRSel);
  672. //PWM互补输出模式下,GATE功能选择
  673. en_result_t Tim0_M23_GateFuncSel(stc_tim0_m23_gate_config_t* pstcConfig);
  674. //主从模式配置
  675. en_result_t Tim0_M23_MasterSlave_Set(stc_tim0_m23_master_slave_config_t* pstcConfig);
  676. //CH0A/CH0B比较通道控制
  677. en_result_t Tim0_M23_PortOutput_Config(en_tim0_channel_t enTim0Chx, stc_tim0_m23_compare_config_t* pstcConfig);
  678. //CH0A/CH0B输入控制
  679. en_result_t Tim0_M23_PortInput_Config(en_tim0_channel_t enTim0Chx, stc_tim0_m23_input_config_t* pstcConfig);
  680. //ERT输入控制
  681. en_result_t Tim0_M23_ETRInput_Config(stc_tim0_m23_etr_input_config_t* pstcConfig);
  682. //刹车BK输入控制
  683. en_result_t Tim0_M23_BrakeInput_Config(stc_tim0_m23_bk_input_config_t* pstcConfig);
  684. //触发ADC控制
  685. en_result_t Tim0_M23_TrigADC_Config(stc_tim0_m23_adc_trig_config_t* pstcConfig);
  686. //死区功能
  687. en_result_t Tim0_M23_DT_Config(stc_tim0_m23_dt_config_t* pstcConfig);
  688. //重复周期设置
  689. en_result_t Tim0_M23_SetValidPeriod(uint8_t u8ValidPeriod);
  690. //OCREF清除功能
  691. en_result_t Tim0_M23_OCRefClr(stc_tim0_m23_OCREF_Clr_config_t* pstcConfig);
  692. //使能DMA传输
  693. en_result_t Tim0_M23_EnDMA(stc_tim0_m23_trig_dma_config_t* pstcConfig);
  694. //捕获比较A软件触发
  695. en_result_t Tim0_M23_EnSwTrigCapCmpA(en_tim0_channel_t enTim0Chx);
  696. //捕获比较B软件触发
  697. en_result_t Tim0_M23_EnSwTrigCapCmpB(en_tim0_channel_t enTim0Chx);
  698. //软件更新使能
  699. en_result_t Tim0_M23_EnSwUev(void);
  700. //软件触发使能
  701. en_result_t Tim0_M23_EnSwTrig(void);
  702. //软件刹车使能
  703. en_result_t Tim0_M23_EnSwBk(void);
  704. //@} // Tim0Group
  705. #ifdef __cplusplus
  706. #endif
  707. #endif /* __BT_H__ */
  708. /******************************************************************************
  709. * EOF (not truncated)
  710. *****************************************************************************/