hc32l196_bt.h 35 KB

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