bt.h 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738
  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 bt.h
  12. *
  13. * @brief Header file for General Timer(Base Timer) functions
  14. *
  15. * @author MADS Team
  16. *
  17. ******************************************************************************/
  18. #ifndef __BT_H__
  19. #define __BT_H__
  20. /*****************************************************************************
  21. * Include files
  22. *****************************************************************************/
  23. #include "ddl.h"
  24. #ifdef __cplusplus
  25. extern "C"
  26. {
  27. #endif
  28. /**
  29. ******************************************************************************
  30. ** \defgroup BtGroup Base Timer (BT)
  31. **
  32. ******************************************************************************/
  33. //@{
  34. /******************************************************************************/
  35. /* Global pre-processor symbols/macros ('#define') */
  36. /******************************************************************************/
  37. /******************************************************************************
  38. * Global type definitions
  39. ******************************************************************************/
  40. /**
  41. ******************************************************************************
  42. ** \brief 定时器选择数据类型重定义
  43. *****************************************************************************/
  44. typedef enum en_bt_unit
  45. {
  46. TIM0 = 0u, ///< Timer 0
  47. TIM1 = 1u, ///< Timer 1
  48. TIM2 = 2u, ///< Timer 2
  49. }en_bt_unit_t;
  50. /**
  51. ******************************************************************************
  52. ** \brief 工作模式选择数据类型重定义 (MODE)(模式0/1/23)
  53. *****************************************************************************/
  54. typedef enum en_bt_work_mode
  55. {
  56. BtWorkMode0 = 0u, ///< 定时器模式
  57. BtWorkMode1 = 1u, ///< PWC模式
  58. BtWorkMode2 = 2u, ///< 锯齿波模式
  59. BtWorkMode3 = 3u, ///< 三角波模式
  60. }en_bt_work_mode_t;
  61. /**
  62. ******************************************************************************
  63. ** \brief 极性控制数据类型重定义 (GATE_P)(模式0)
  64. *****************************************************************************/
  65. typedef enum en_bt_m0_gatep
  66. {
  67. BtGatePositive = 0u, ///< 高电平有效
  68. BtGateOpposite = 1u, ///< 低电平有效
  69. }en_bt_m0_gatep_t;
  70. /**
  71. ******************************************************************************
  72. ** \brief TIM 预除频选择 (PRS)(模式0/1/23)
  73. *****************************************************************************/
  74. typedef enum en_bt_cr_timclkdiv
  75. {
  76. BtPCLKDiv1 = 0u, ///< Div 1
  77. BtPCLKDiv2 = 1u, ///< Div 2
  78. BtPCLKDiv4 = 2u, ///< Div 4
  79. BtPCLKDiv8 = 3u, ///< Div 8
  80. BtPCLKDiv16 = 4u, ///< Div 16
  81. BtPCLKDiv32 = 5u, ///< Div 32
  82. BtPCLKDiv64 = 6u, ///< Div 64
  83. BtPCLKDiv256 = 7u, ///< Div 256
  84. }en_bt_cr_timclkdiv_t;
  85. /**
  86. ******************************************************************************
  87. ** \brief 计数/定时器功能选择数据类型重定义 (CT)(模式0/1/23)
  88. *****************************************************************************/
  89. typedef enum en_bt_cr_ct
  90. {
  91. BtTimer = 0u, ///< 定时器功能,计数时钟为内部PCLK
  92. BtCounter = 1u, ///< 计数器功能,计数时钟为外部ETR
  93. }en_bt_cr_ct_t;
  94. /**
  95. ******************************************************************************
  96. ** \brief 定时器工作模式数据类型重定义 (MD)(模式0)
  97. *****************************************************************************/
  98. typedef enum en_bt_m0cr_md
  99. {
  100. Bt32bitFreeMode = 0u, ///< 32位计数器/定时器
  101. Bt16bitArrMode = 1u, ///< 自动重载16位计数器/定时器
  102. }en_bt_m0cr_md_t;
  103. /**
  104. ******************************************************************************
  105. ** \brief BT0/BT1/BT2中断类型数据类型重定义(模式0/1/23)
  106. *****************************************************************************/
  107. typedef enum en_bt_irq_type
  108. {
  109. BtUevIrq = 0u, ///< 溢出/事件更新中断
  110. BtCA0Irq = 2u, ///< 捕获/比较中断A(仅模式1/23存在)
  111. BtCB0Irq = 5u, ///< 捕获/比较中断B(仅模式23存在)
  112. BtCA0E = 8u, ///< CH0A捕获数据丢失标志(仅模式23存在),不是中断
  113. BtCB0E = 11u, ///< CH0B捕获数据丢失标志(仅模式23存在),不是中断
  114. BtBkIrq = 14u, ///< 刹车中断(仅模式23存在)
  115. BtTrigIrq = 15u, ///< 触发中断(仅模式23存在)
  116. }en_bt_irq_type_t;
  117. /**
  118. ******************************************************************************
  119. ** \brief 测量开始结束数据类型重定义 (Edg1stEdg2nd)(模式1)
  120. *****************************************************************************/
  121. typedef enum en_bt_m1cr_Edge
  122. {
  123. BtPwcRiseToRise = 0u, ///< 上升沿到上升沿(周期)
  124. BtPwcFallToRise = 1u, ///< 下降沿到上升沿(低电平)
  125. BtPwcRiseToFall = 2u, ///< 上升沿到下降沿(高电平)
  126. BtPwcFallToFall = 3u, ///< 下降沿到下降沿(周期)
  127. }en_bt_m1cr_Edge_t;
  128. /**
  129. ******************************************************************************
  130. ** \brief PWC测量测试模式选择数据类型重定义 (Oneshot)(模式1)
  131. *****************************************************************************/
  132. typedef enum en_bt_m1cr_oneshot
  133. {
  134. BtPwcCycleDetect = 0u, ///< PWC循环测量
  135. BtPwcOneShotDetect = 1u, ///< PWC单次测量
  136. }en_bt_m1cr_oneshot_t;
  137. /**
  138. ******************************************************************************
  139. ** \brief PWC IA0选择数据类型重定义 (IA0S)(模式1)
  140. *****************************************************************************/
  141. typedef enum en_bt_m1_mscr_ia0s
  142. {
  143. BtIA0Input = 0u, ///< IAO输入
  144. BtXORInput = 1u, ///< IA0 ETR GATE XOR(TIM0/1/2)/IA0 IA1 IA2 XOR(TIM3)
  145. }en_bt_m1_mscr_ia0s_t;
  146. /**
  147. ******************************************************************************
  148. ** \brief PWC IB0选择数据类型重定义 (IA0S)(模式1)
  149. *****************************************************************************/
  150. typedef enum en_bt_m1_mscr_ib0s
  151. {
  152. BtIB0Input = 0u, ///< IBO输入
  153. BtTsInput = 1u, ///< 内部触发TS选择信号
  154. }en_bt_m1_mscr_ib0s_t;
  155. /**
  156. ******************************************************************************
  157. ** \brief 输出极性、输入相位 数据类型重定义 (CCPA0/CCPB0/ETP/BKP)(模式1/23)
  158. *****************************************************************************/
  159. typedef enum en_bt_port_polarity
  160. {
  161. BtPortPositive = 0u, ///< 正常输入输出
  162. BtPortOpposite = 1u, ///< 反向输入输出
  163. }en_bt_port_polarity_t;
  164. /**
  165. ******************************************************************************
  166. ** \brief 滤波选择数据类型重定义 (FLTET/FLTA0/FLAB0)(模式1/23)
  167. *****************************************************************************/
  168. typedef enum en_bt_flt
  169. {
  170. BtFltNone = 0u, ///< 无滤波
  171. BtFltPCLKCnt3 = 4u, ///< PCLK 3个连续有效
  172. BtFltPCLKDiv4Cnt3 = 5u, ///< PCLK/4 3个连续有效
  173. BtFltPCLKDiv16Cnt3 = 6u, ///< PCLK/16 3个连续有效
  174. BtFltPCLKDiv64Cnt3 = 7u, ///< PCLK/64 3个连续有效
  175. }en_bt_flt_t;
  176. /**
  177. ******************************************************************************
  178. ** \brief 通道比较控制 数据类型重定义 (OCMA/OCMB)(模式23)
  179. *****************************************************************************/
  180. typedef enum en_bt_m23_fltr_ocm
  181. {
  182. BtForceLow = 0u, ///< 强制为0
  183. BtForceHigh = 1u, ///< 强制为1
  184. BtCMPForceLow = 2u, ///< 比较匹配时强制为0
  185. BtCMPForceHigh = 3u, ///< 比较匹配时强制为1
  186. BtCMPInverse = 4u, ///< 比较匹配时翻转电平
  187. BtCMPOnePrdHigh = 5u, ///< 比较匹配时输出一个计数周期的高电平
  188. BtPWMMode1 = 6u, ///< 通道控制为PWM mode 1
  189. BtPWMMode2 = 7u, ///< 通道控制为PWM mode 2
  190. }en_bt_m23_fltr_ocm_t;
  191. /**
  192. ******************************************************************************
  193. ** \brief 主从模式TS数据类型重定义 (TS)(模式1/23)
  194. *****************************************************************************/
  195. typedef enum en_bt_mscr_ts
  196. {
  197. BtTs0ETR = 0u, ///< ETR外部输入滤波后的相位选择信号
  198. BtTs1TIM0TRGO = 1u, ///< Timer0的TRGO输出信号
  199. BtTs2TIM1TRGO = 2u, ///< Timer1的TRGO输出信号
  200. BtTs3TIM2TRGO = 3u, ///< Timer2的TRGO输出信号
  201. BtTs4TIM3TRGO = 4u, ///< Timer3的TRGO输出信号
  202. //BtTs5IA0ED = 5u, ///< 无效
  203. BtTs6IAFP = 6u, ///< CH0A 外部输输入滤波后的相位选择信号
  204. BtTs7IBFP = 7u, ///< CH0B 外部输输入滤波后的相位选择信
  205. }en_bt_mscr_ts_t;
  206. /**
  207. ******************************************************************************
  208. ** \brief PWM输出模式选择数据类型重定义 (COMP)(模式23)
  209. *****************************************************************************/
  210. typedef enum en_bt_m23cr_comp
  211. {
  212. BtIndependentPWM = 0u, ///< 独立PWM输出
  213. BtComplementaryPWM = 1u, ///< 互补PWM输出
  214. }en_bt_m23cr_comp_t;
  215. /**
  216. ******************************************************************************
  217. ** \brief 计数方向选择数据类型重定义 (DIR)(模式23)
  218. *****************************************************************************/
  219. typedef enum en_bt_m23cr_dir
  220. {
  221. BtCntUp = 0u, ///< 向上计数
  222. BtCntDown = 1u, ///< 向下计数
  223. }en_bt_m23cr_dir_t;
  224. /**
  225. ******************************************************************************
  226. ** \brief 计数方向选择数据类型重定义 (PWM2S)(模式23)
  227. *****************************************************************************/
  228. typedef enum en_bt_m23cr_pwm2s
  229. {
  230. BtDoublePointCmp = 0u, ///< 双点比较使能,使用CCRA,CCRB比较控制OCREFA输出
  231. BtSinglePointCmp = 1u, ///< 单点比较使能,使用CCRA比较控制OCREFA输出
  232. }en_bt_m23cr_pwm2s_t;
  233. /**
  234. ******************************************************************************
  235. ** \brief GATE在PWM互补模式下捕获或比较功能 选择数据类型重定义 (CSG)(模式23)
  236. *****************************************************************************/
  237. typedef enum en_bt_m23cr_csg
  238. {
  239. BtPWMCompGateCmpOut = 0u, ///< 在PWM互补模式下,Gate作为比较输出
  240. BtPWMCompGateCapIn = 1u, ///< 在PWM互补模式下,Gate作为捕获输入
  241. }en_bt_m23cr_csg_t;
  242. /**
  243. ******************************************************************************
  244. ** \brief 比较捕获寄存器 数据类型重定义 (CCR0A,CCR0B)(模式23)
  245. *****************************************************************************/
  246. typedef enum en_bt_m23_ccrx
  247. {
  248. BtCCR0A = 0u, ///< CCR0A比较捕获寄存器
  249. BtCCR0B = 1u, ///< CCR0B比较捕获寄存器
  250. }en_bt_m23_ccrx_t;
  251. /**
  252. ******************************************************************************
  253. ** \brief OCREF清除源 选择数据类型重定义 (OCCS)(模式23)
  254. *****************************************************************************/
  255. typedef enum en_bt_m23ce_occs
  256. {
  257. BtOC_Ref_Clr = 0u, ///< 来自VC的OC_Ref_Clr
  258. BtETRf = 1u, ///< 外部ETRf
  259. }en_bt_m23ce_occs_t;
  260. /**
  261. ******************************************************************************
  262. ** \brief 比较匹配中断模式 选择数据类型重定义 (CIS/CISB)(模式23)
  263. *****************************************************************************/
  264. typedef enum en_bt_m23_cisa_cisb
  265. {
  266. BtCmpIntNone = 0u, ///< 无比较匹配中断
  267. BtCmpIntRise = 1u, ///< 比较匹配上升沿中断
  268. BtCmpIntFall = 2u, ///< 比较匹配下降沿中断
  269. BtCmpIntRiseFall = 3u, ///< 比较匹配上升沿下降沿中断
  270. }en_bt_m23_cisa_cisb_t;
  271. /**
  272. ******************************************************************************
  273. ** \brief BT端口控制 - 刹车时CHx输出状态控制(BKSA/BKSB)(模式23)
  274. **
  275. ** \note
  276. ******************************************************************************/
  277. typedef enum en_bt_m23_crch0_bks
  278. {
  279. BtCHxBksHiZ = 0u, ///< 刹车使能时,CHx端口输出高阻态
  280. BtCHxBksNorm = 1u, ///< 刹车使能时,CHx端口正常输出
  281. BtCHxBksLow = 2u, ///< 刹车使能时,CHx端口输出低电平
  282. BtCHxBksHigh = 3u, ///< 刹车使能时,CHx端口输出高电平
  283. }en_bt_m23_crch0_bks_t;
  284. /**
  285. ******************************************************************************
  286. ** \brief BT端口控制 - CHx上升沿下降沿捕获(CRx/CFx)(模式23)
  287. **
  288. ** \note
  289. ******************************************************************************/
  290. typedef enum en_bt_m23_crch0_cfx_crx
  291. {
  292. BtCHxCapNone = 0u, ///< CHx通道捕获禁止
  293. BtCHxCapRise = 1u, ///< CHx通道上升沿捕获使能
  294. BtCHxCapFall = 2u, ///< CHx通道下降沿捕获使能
  295. BtCHxCapFallRise = 3u, ///< CHx通道上升沿下降沿捕获都使能
  296. }en_bt_m23_crch0_cfx_crx_t;
  297. /**
  298. ******************************************************************************
  299. ** \brief BT端口控制 - CHx比较捕获模式(CSA/CSB)(模式23)
  300. **
  301. ** \note
  302. ******************************************************************************/
  303. typedef enum en_bt_m23_crch0_csa_csb
  304. {
  305. BtCHxCmpMode = 0u, ///< CHx通道设置为比较模式
  306. BtCHxCapMode = 1u, ///< CHx通道设置为捕获模式
  307. }en_bt_m23_crch0_csa_csb_t;
  308. /**
  309. ******************************************************************************
  310. ** \brief 比较模式下 DMA比较触发选择 数据类型重定义 (CCDS)(模式23)
  311. *****************************************************************************/
  312. typedef enum en_bt_m23_mscr_ccds
  313. {
  314. BtCmpTrigDMA = 0u, ///< 比较匹配触发DMA
  315. BtUEVTrigDMA = 1u, ///< 事件更新代替比较匹配触发DMA
  316. }en_bt_m23_mscr_ccds_t;
  317. /**
  318. ******************************************************************************
  319. ** \brief 主从模式选择 数据类型重定义 (MSM)(模式23)
  320. *****************************************************************************/
  321. typedef enum en_bt_m23_mscr_msm
  322. {
  323. BtSlaveMode = 0u, ///< 从模式
  324. BtMasterMode = 1u, ///< 主模式
  325. }en_bt_m23_mscr_msm_t;
  326. /**
  327. ******************************************************************************
  328. ** \brief 触发主模式输出源 数据类型重定义 (MMS)(模式23)
  329. *****************************************************************************/
  330. typedef enum en_bt_m23_mscr_mms
  331. {
  332. BtMasterUG = 0u, ///< UG(软件更新)源
  333. BtMasterCTEN = 1u, ///< CTEN源
  334. BtMasterUEV = 2u, ///< UEV更新源
  335. BtMasterCMPSO = 3u, ///< 比较匹配选择输出源
  336. BtMasterOCA0Ref = 4u, ///< OCA0_Ref源
  337. BtMasterOCB0Ref = 5u, ///< OCB0_Ref源
  338. //BtMasterOCB0Ref = 6u,
  339. //BtMasterOCB0Ref = 7u,
  340. }en_bt_m23_mscr_mms_t;
  341. /**
  342. ******************************************************************************
  343. ** \brief 触发从模式选择 数据类型重定义 (SMS)(模式23)
  344. *****************************************************************************/
  345. typedef enum en_bt_m23_mscr_sms
  346. {
  347. BtSlaveIClk = 0u, ///< 使用内部时钟
  348. BtSlaveResetTIM = 1u, ///< 复位功能
  349. BtSlaveTrigMode = 2u, ///< 触发模式
  350. BtSlaveEClk = 3u, ///< 外部时钟模式
  351. BtSlaveCodeCnt1 = 4u, ///< 正交编码计数模式1
  352. BtSlaveCodeCnt2 = 5u, ///< 正交编码计数模式2
  353. BtSlaveCodeCnt3 = 6u, ///< 正交编码计数模式3
  354. BtSlaveGateCtrl = 7u, ///< 门控功能
  355. }en_bt_m23_mscr_sms_t;
  356. /**
  357. ******************************************************************************
  358. ** \brief 定时器运行控制数据类型重定义 (CTEN)
  359. *****************************************************************************/
  360. typedef enum en_bt_start
  361. {
  362. BtCTENDisable = 0u, ///< 停止
  363. BtCTENEnable = 1u, ///< 运行
  364. }en_bt_start_t;
  365. /**
  366. ******************************************************************************
  367. ** \brief BaseTimer mode0 配置结构体定义(模式0)
  368. *****************************************************************************/
  369. typedef struct stc_bt_mode0_cfg
  370. {
  371. en_bt_work_mode_t enWorkMode; ///< 工作模式设置
  372. en_bt_m0_gatep_t enGateP; ///< 门控极性控制
  373. boolean_t bEnGate; ///< 门控使能
  374. en_bt_cr_timclkdiv_t enPRS; ///< 预除频配置
  375. boolean_t bEnTog; ///< 翻转输出使能
  376. en_bt_cr_ct_t enCT; ///< 定时/计数功能选择
  377. en_bt_m0cr_md_t enCntMode; ///< 计数模式配置
  378. func_ptr_t pfnTim0Cb; ///< Timer0中断服务回调函数[void function(void)]
  379. func_ptr_t pfnTim1Cb; ///< Timer1中断服务回调函数[void function(void)]
  380. func_ptr_t pfnTim2Cb; ///< Timer2中断服务回调函数[void function(void)]
  381. }stc_bt_mode0_cfg_t;
  382. /**
  383. ******************************************************************************
  384. ** \brief BaseTimer mode1 配置结构体定义(模式1)
  385. *****************************************************************************/
  386. typedef struct stc_bt_mode1_cfg
  387. {
  388. en_bt_work_mode_t enWorkMode; ///< 工作模式设置
  389. en_bt_cr_timclkdiv_t enPRS; ///< 预除频配置
  390. en_bt_cr_ct_t enCT; ///< 定时/计数功能选择
  391. en_bt_m1cr_oneshot_t enOneShot; ///< 单次测量/循环测量选择
  392. func_ptr_t pfnTim0Cb; ///< Timer0中断服务回调函数[void function(void)]
  393. func_ptr_t pfnTim1Cb; ///< Timer1中断服务回调函数[void function(void)]
  394. func_ptr_t pfnTim2Cb; ///< Timer2中断服务回调函数[void function(void)]
  395. }stc_bt_mode1_cfg_t;
  396. /**
  397. ******************************************************************************
  398. ** \brief PWC输入配置结构体定义(模式1)
  399. *****************************************************************************/
  400. typedef struct stc_bt_pwc_input_cfg
  401. {
  402. en_bt_mscr_ts_t enTsSel; ///< 触发输入源选择
  403. en_bt_m1_mscr_ia0s_t enIA0Sel; ///< CHA0输入选择
  404. en_bt_m1_mscr_ib0s_t enIB0Sel; ///< CHB0输入选择
  405. en_bt_port_polarity_t enETRPhase; ///< ETR相位选择
  406. en_bt_flt_t enFltETR; ///< ETR滤波设置
  407. en_bt_flt_t enFltIA0; ///< CHA0滤波设置
  408. en_bt_flt_t enFltIB0; ///< CHB0滤波设置
  409. }stc_bt_pwc_input_cfg_t;
  410. /**
  411. ******************************************************************************
  412. ** \brief BaseTimer mode23 配置结构体定义(模式23)
  413. *****************************************************************************/
  414. typedef struct stc_bt_mode23_cfg
  415. {
  416. en_bt_work_mode_t enWorkMode; ///< 工作模式设置
  417. en_bt_m23cr_dir_t enCntDir; ///< 计数方向
  418. en_bt_cr_timclkdiv_t enPRS; ///< 时钟预除频配置
  419. en_bt_cr_ct_t enCT; ///< 定时/计数功能选择
  420. en_bt_m23cr_comp_t enPWMTypeSel; ///< PWM模式选择(独立/互补)
  421. en_bt_m23cr_pwm2s_t enPWM2sSel; ///< OCREFA双点比较功能选择
  422. boolean_t bOneShot; ///< 单次触发模式使能/禁止
  423. boolean_t bURSSel; ///< 更新源选择
  424. func_ptr_t pfnTim0Cb; ///< Timer0中断服务回调函数[void function(void)]
  425. func_ptr_t pfnTim1Cb; ///< Timer1中断服务回调函数[void function(void)]
  426. func_ptr_t pfnTim2Cb; ///< Timer2中断服务回调函数[void function(void)]
  427. }stc_bt_mode23_cfg_t;
  428. /**
  429. ******************************************************************************
  430. ** \brief GATE在PWM互补模式下捕获或比较功能 配置结构体定义(模式23)
  431. *****************************************************************************/
  432. typedef struct stc_bt_m23_gate_cfg
  433. {
  434. en_bt_m23cr_csg_t enGateFuncSel; ///< Gate比较、捕获功能选择
  435. boolean_t bGateRiseCap; ///< GATE作为捕获功能时,上沿捕获有效控制
  436. boolean_t bGateFallCap; ///< GATE作为捕获功能时,下沿捕获有效控制
  437. }stc_bt_m23_gate_cfg_t;
  438. /**
  439. ******************************************************************************
  440. ** \brief CHA/CHB通道比较控制 配置结构体定义(模式23)
  441. *****************************************************************************/
  442. typedef struct stc_bt_m23_compare_cfg
  443. {
  444. en_bt_m23_crch0_csa_csb_t enCh0ACmpCap; ///< CH0A比较/捕获功能选择
  445. en_bt_m23_fltr_ocm_t enCH0ACmpCtrl; ///< CH0A通道比较控制
  446. en_bt_port_polarity_t enCH0APolarity; ///< CH0A输出极性控制
  447. boolean_t bCh0ACmpBufEn; ///< 比较A缓存功能 使能/禁止
  448. en_bt_m23_cisa_cisb_t enCh0ACmpIntSel; ///< CHA比较匹配中断选择
  449. en_bt_m23_crch0_csa_csb_t enCh0BCmpCap; ///< CH0B比较/捕获功能选择
  450. en_bt_m23_fltr_ocm_t enCH0BCmpCtrl; ///< CH0B通道比较控制
  451. en_bt_port_polarity_t enCH0BPolarity; ///< CH0B输出极性控制
  452. boolean_t bCH0BCmpBufEn; ///< 比较B缓存功能 使能/禁止
  453. en_bt_m23_cisa_cisb_t enCH0BCmpIntSel; ///< CHB0比较匹配中断选择
  454. }stc_bt_m23_compare_cfg_t;
  455. /**
  456. ******************************************************************************
  457. ** \brief CHA/CHB通道捕获控制 配置结构体定义(模式23)
  458. *****************************************************************************/
  459. typedef struct stc_bt_m23_input_cfg
  460. {
  461. en_bt_m23_crch0_csa_csb_t enCh0ACmpCap; ///< CH0A比较/捕获功能选择
  462. en_bt_m23_crch0_cfx_crx_t enCH0ACapSel; ///< CH0A捕获边沿选择
  463. en_bt_flt_t enCH0AInFlt; ///< CH0A通道捕获滤波控制
  464. en_bt_port_polarity_t enCH0APolarity; ///< CH0A输入相位
  465. en_bt_m23_crch0_csa_csb_t enCh0BCmpCap; ///< CH0B比较/捕获功能选择
  466. en_bt_m23_crch0_cfx_crx_t enCH0BCapSel; ///< HC0B捕获边沿选择
  467. en_bt_flt_t enCH0BInFlt; ///< CH0B通道捕获滤波控制
  468. en_bt_port_polarity_t enCH0BPolarity; ///< CH0B输入相位
  469. }stc_bt_m23_input_cfg_t;
  470. /**
  471. ******************************************************************************
  472. ** \brief ETR输入相位滤波配置结构体定义(模式23)
  473. *****************************************************************************/
  474. typedef struct stc_bt_m23_etr_input_cfg
  475. {
  476. en_bt_port_polarity_t enETRPolarity; ///< ETR输入极性设置
  477. en_bt_flt_t enETRFlt; ///< ETR滤波设置
  478. }stc_bt_m23_etr_input_cfg_t;
  479. /**
  480. ******************************************************************************
  481. ** \brief 刹车BK输入相位滤波配置结构体定义(模式23)
  482. *****************************************************************************/
  483. typedef struct stc_bt_m23_bk_input_cfg
  484. {
  485. boolean_t bEnBrake; ///< 刹车使能
  486. boolean_t bEnVCBrake; ///< 使能VC0刹车
  487. boolean_t bEnSafetyBk; ///< 使能safety刹车
  488. boolean_t bEnBKSync; ///< TIM0/TIM1/TIM2刹车同步使能
  489. en_bt_m23_crch0_bks_t enBkCH0AStat; ///< 刹车时CHA端口状态设置
  490. en_bt_m23_crch0_bks_t enBkCH0BStat; ///< 刹车时CHB端口状态设置
  491. en_bt_port_polarity_t enBrakePolarity; ///< 刹车BK输入极性设置
  492. en_bt_flt_t enBrakeFlt; ///< 刹车BK滤波设置
  493. }stc_bt_m23_bk_input_cfg_t;
  494. /**
  495. ******************************************************************************
  496. ** \brief 死区功能配置结构体定义(模式23)
  497. *****************************************************************************/
  498. typedef struct stc_bt_m23_dt_cfg
  499. {
  500. boolean_t bEnDeadTime; ///< 刹车时CHA端口状态设置
  501. uint8_t u8DeadTimeValue; ///< 刹车时CHA端口状态设置
  502. }stc_bt_m23_dt_cfg_t;
  503. /**
  504. ******************************************************************************
  505. ** \brief 触发ADC配置结构体定义(模式23)
  506. *****************************************************************************/
  507. typedef struct stc_bt_m23_adc_trig_cfg
  508. {
  509. boolean_t bEnTrigADC; ///< 触发ADC全局控制
  510. boolean_t bEnUevTrigADC; ///< 事件更新触发ADC
  511. boolean_t bEnCH0ACmpTrigADC; ///< CH0A比较匹配触发ADC
  512. boolean_t bEnCH0BCmpTrigADC; ///< CH0B比较匹配触发ADC
  513. }stc_bt_m23_adc_trig_cfg_t;
  514. /**
  515. ******************************************************************************
  516. ** \brief DMA触发 配置结构体定义(模式23)
  517. *****************************************************************************/
  518. typedef struct stc_bt_m23_trig_dma_cfg
  519. {
  520. boolean_t bUevTrigDMA; ///< 更新 触发DMA使能
  521. boolean_t bTITrigDMA; ///< Trig 触发DMA功能
  522. boolean_t bCmpATrigDMA; ///< A捕获比较触发DMA使能
  523. boolean_t bCmpBTrigDMA; ///< B捕获比较触发DMA使能
  524. en_bt_m23_mscr_ccds_t enCmpUevTrigDMA; ///< 比较模式下DMA比较触发选择
  525. }stc_bt_m23_trig_dma_cfg_t;
  526. /**
  527. ******************************************************************************
  528. ** \brief 主从模式 配置结构体定义(模式23)
  529. *****************************************************************************/
  530. typedef struct stc_bt_m23_master_slave_cfg
  531. {
  532. en_bt_m23_mscr_msm_t enMasterSlaveSel; ///< 主从模式选择
  533. en_bt_m23_mscr_mms_t enMasterSrc; ///< 主模式触发源选择
  534. en_bt_m23_mscr_sms_t enSlaveModeSel; ///< 从模式选择
  535. en_bt_mscr_ts_t enTsSel; ///< 触发输入源选择
  536. }stc_bt_m23_master_slave_cfg_t;
  537. /**
  538. ******************************************************************************
  539. ** \brief OCREF清除功能 配置结构体定义(模式23)
  540. *****************************************************************************/
  541. typedef struct stc_bt_m23_OCREF_Clr_cfg
  542. {
  543. en_bt_m23ce_occs_t enOCRefClrSrcSel; ///< OCREF清除源选择
  544. boolean_t bVCClrEn; ///< 是否使能来自VC的OCREF_Clr
  545. }stc_bt_m23_OCREF_Clr_cfg_t;
  546. /******************************************************************************
  547. * Global variable declarations ('extern', definition in C source)
  548. *****************************************************************************/
  549. /******************************************************************************
  550. * Global function prototypes (definition in C source)
  551. *****************************************************************************/
  552. //中断相关函数
  553. //中断标志获取
  554. boolean_t Bt_GetIntFlag(en_bt_unit_t enUnit, en_bt_irq_type_t enBtIrq);
  555. //中断标志清除
  556. en_result_t Bt_ClearIntFlag(en_bt_unit_t enUnit, en_bt_irq_type_t enBtIrq);
  557. //所有中断标志清除
  558. en_result_t Bt_ClearAllIntFlag(en_bt_unit_t enUnit);
  559. //模式0中断使能
  560. en_result_t Bt_Mode0_EnableIrq(en_bt_unit_t enUnit);
  561. //模式1中断使能
  562. en_result_t Bt_Mode1_EnableIrq (en_bt_unit_t enUnit, en_bt_irq_type_t enBtIrq);
  563. //模式2中断使能
  564. en_result_t Bt_Mode23_EnableIrq (en_bt_unit_t enUnit, en_bt_irq_type_t enBtIrq);
  565. //模式0中断禁止
  566. en_result_t Bt_Mode0_DisableIrq(en_bt_unit_t enUnit);
  567. //模式1中断禁止
  568. en_result_t Bt_Mode1_DisableIrq (en_bt_unit_t enUnit, en_bt_irq_type_t enBtIrq);
  569. //模式2中断禁止
  570. en_result_t Bt_Mode23_DisableIrq (en_bt_unit_t enUnit, en_bt_irq_type_t enBtIrq);
  571. //模式0初始化及相关功能操作
  572. //timer配置及初始化
  573. en_result_t Bt_Mode0_Init(en_bt_unit_t enUnit, stc_bt_mode0_cfg_t* pstcCfg);
  574. //timer 启动/停止
  575. en_result_t Bt_M0_Run(en_bt_unit_t enUnit);
  576. en_result_t Bt_M0_Stop(en_bt_unit_t enUnit);
  577. //重载值设置
  578. en_result_t Bt_M0_ARRSet(en_bt_unit_t enUnit, uint16_t u16Data);
  579. //16位计数值设置/获取
  580. en_result_t Bt_M0_Cnt16Set(en_bt_unit_t enUnit, uint16_t u16Data);
  581. uint16_t Bt_M0_Cnt16Get(en_bt_unit_t enUnit);
  582. //32位计数值设置/获取
  583. en_result_t Bt_M0_Cnt32Set(en_bt_unit_t enUnit, uint32_t u32Data);
  584. uint32_t Bt_M0_Cnt32Get(en_bt_unit_t enUnit);
  585. //翻转输出使能/禁止(低电平)设定
  586. en_result_t Bt_M0_EnTOG_Output(en_bt_unit_t enUnit, boolean_t bEnTOG);
  587. //端口输出使能/禁止设定
  588. en_result_t Bt_M0_Enable_Output(en_bt_unit_t enUnit, boolean_t bEnOutput);
  589. //模式1初始化及相关功能操作
  590. //timer配置及初始化
  591. en_result_t Bt_Mode1_Init(en_bt_unit_t enUnit, stc_bt_mode1_cfg_t* pstcCfg);
  592. //PWC 输入配置
  593. en_result_t Bt_M1_Input_Cfg(en_bt_unit_t enUnit, stc_bt_pwc_input_cfg_t* pstcCfg);
  594. //PWC测量边沿起始结束选择
  595. en_result_t Bt_M1_PWC_Edge_Sel(en_bt_unit_t enUnit,en_bt_m1cr_Edge_t enEdgeSel);
  596. //timer 启动/停止
  597. en_result_t Bt_M1_Run(en_bt_unit_t enUnit);
  598. en_result_t Bt_M1_Stop(en_bt_unit_t enUnit);
  599. //16位计数值设置/获取
  600. en_result_t Bt_M1_Cnt16Set(en_bt_unit_t enUnit, uint16_t u16Data);
  601. uint16_t Bt_M1_Cnt16Get(en_bt_unit_t enUnit);
  602. //脉冲宽度测量结果数值获取
  603. uint16_t Bt_M1_PWC_CapValueGet(en_bt_unit_t enUnit);
  604. //模式23初始化及相关功能操作
  605. //timer配置及初始化
  606. en_result_t Bt_Mode23_Init(en_bt_unit_t enUnit, stc_bt_mode23_cfg_t* pstcCfg);
  607. //timer 启动/停止
  608. en_result_t Bt_M23_Run(en_bt_unit_t enUnit);
  609. en_result_t Bt_M23_Stop(en_bt_unit_t enUnit);
  610. //PWM输出使能
  611. en_result_t Bt_M23_EnPWM_Output(en_bt_unit_t enUnit, boolean_t bEnOutput, boolean_t bEnAutoOutput);
  612. //重载值设置
  613. en_result_t Bt_M23_ARRSet(en_bt_unit_t enUnit, uint16_t u16Data, boolean_t bArrBufEn);
  614. //16位计数值设置/获取
  615. en_result_t Bt_M23_Cnt16Set(en_bt_unit_t enUnit, uint16_t u16Data);
  616. uint16_t Bt_M23_Cnt16Get(en_bt_unit_t enUnit);
  617. //比较捕获寄存器CCR0A/CCR0B设置/读取
  618. en_result_t Bt_M23_CCR_Set(en_bt_unit_t enUnit, en_bt_m23_ccrx_t enCCRSel, uint16_t u16Data);
  619. uint16_t Bt_M23_CCR_Get(en_bt_unit_t enUnit, en_bt_m23_ccrx_t enCCRSel);
  620. //PWM互补输出模式下,GATE功能选择
  621. en_result_t Bt_M23_GateFuncSel(en_bt_unit_t enUnit,stc_bt_m23_gate_cfg_t* pstcCfg);
  622. //主从模式配置
  623. en_result_t Bt_M23_MasterSlave_Set(en_bt_unit_t enUnit, stc_bt_m23_master_slave_cfg_t* pstcCfg);
  624. //CH0A/CH0B比较通道控制
  625. en_result_t Bt_M23_PortOutput_Cfg(en_bt_unit_t enUnit, stc_bt_m23_compare_cfg_t* pstcCfg);
  626. //CH0A/CH0B输入控制
  627. en_result_t Bt_M23_PortInput_Cfg(en_bt_unit_t enUnit, stc_bt_m23_input_cfg_t* pstcCfg);
  628. //ERT输入控制
  629. en_result_t Bt_M23_ETRInput_Cfg(en_bt_unit_t enUnit, stc_bt_m23_etr_input_cfg_t* pstcCfg);
  630. //刹车BK输入控制
  631. en_result_t Bt_M23_BrakeInput_Cfg(en_bt_unit_t enUnit, stc_bt_m23_bk_input_cfg_t* pstcCfg);
  632. //触发ADC控制
  633. en_result_t Bt_M23_TrigADC_Cfg(en_bt_unit_t enUnit, stc_bt_m23_adc_trig_cfg_t* pstcCfg);
  634. //死区功能
  635. en_result_t Bt_M23_DT_Cfg(en_bt_unit_t enUnit, stc_bt_m23_dt_cfg_t* pstcCfg);
  636. //重复周期设置
  637. en_result_t Bt_M23_SetValidPeriod(en_bt_unit_t enUnit, uint8_t u8ValidPeriod);
  638. //OCREF清除功能
  639. en_result_t Bt_M23_OCRefClr(en_bt_unit_t enUnit, stc_bt_m23_OCREF_Clr_cfg_t* pstcCfg);
  640. //使能DMA传输
  641. en_result_t Bt_M23_EnDMA(en_bt_unit_t enUnit, stc_bt_m23_trig_dma_cfg_t* pstcCfg);
  642. //捕获比较A软件触发
  643. en_result_t Bt_M23_EnSwTrigCapCmpA(en_bt_unit_t enUnit);
  644. //捕获比较B软件触发
  645. en_result_t Bt_M23_EnSwTrigCapCmpB(en_bt_unit_t enUnit);
  646. //软件更新使能
  647. en_result_t Bt_M23_EnSwUev(en_bt_unit_t enUnit);
  648. //软件触发使能
  649. en_result_t Bt_M23_EnSwTrig(en_bt_unit_t enUnit);
  650. //软件刹车使能
  651. en_result_t Bt_M23_EnSwBk(en_bt_unit_t enUnit);
  652. //@} // BtGroup
  653. #ifdef __cplusplus
  654. #endif
  655. #endif /* __BT_H__ */
  656. /******************************************************************************
  657. * EOF (not truncated)
  658. *****************************************************************************/