adt.h 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846
  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 adt.h
  12. *
  13. * @brief Header file for Advance Timer functions
  14. *
  15. * @author MADS Team
  16. *
  17. ******************************************************************************/
  18. #ifndef __ADT_H__
  19. #define __ADT_H__
  20. /******************************************************************************
  21. * Include files
  22. ******************************************************************************/
  23. #include "ddl.h"
  24. /* C binding of definitions if building with C++ compiler */
  25. #ifdef __cplusplus
  26. extern "C"
  27. {
  28. #endif
  29. /**
  30. ******************************************************************************
  31. ** \defgroup AdtGroup Advance Timer (ADT)
  32. **
  33. ******************************************************************************/
  34. //@{
  35. /******************************************************************************
  36. * Global type definitions
  37. ******************************************************************************/
  38. /**
  39. ******************************************************************************
  40. ** \brief ADT CHx通道定义
  41. *****************************************************************************/
  42. typedef enum en_adt_CHxX_port
  43. {
  44. AdtCHxA = 0u, ///< CHx A通道
  45. AdtCHxB = 1u, ///< CHx B通道
  46. }en_adt_CHxX_port_t;
  47. /**
  48. ******************************************************************************
  49. ** \brief ADT TRIG端口定义
  50. *****************************************************************************/
  51. typedef enum en_adt_trig_port
  52. {
  53. AdtTrigA = 0u, ///< TIMx 触发A端口
  54. AdtTrigB = 1u, ///< TIMx 触发B端口
  55. AdtTrigC = 2u, ///< TIMx 触发C端口
  56. AdtTrigD = 3u, ///< TIMx 触发D端口
  57. }en_adt_trig_port_t;
  58. /**
  59. ******************************************************************************
  60. ** \brief ADT通用控制 - Z相输入屏蔽周期数
  61. **
  62. ** \note
  63. ******************************************************************************/
  64. typedef enum en_adt_gconr_zmsk
  65. {
  66. AdtZMaskDis = 0u, ///< Z相输入屏蔽功能无效
  67. AdtZMask4Cyl = 1u, ///< 位置计数上溢后或下溢后的4个计数周期内的Z相输入被屏蔽
  68. AdtZMask8Cyl = 2u, ///< 位置计数上溢后或下溢后的8个计数周期内的Z相输入被屏蔽
  69. AdtZMask16Cyl = 3u, ///< 位置计数上溢后或下溢后的16个计数周期内的Z相输入被屏蔽
  70. }en_adt_gconr_zmsk_t;
  71. /**
  72. ******************************************************************************
  73. ** \brief ADT通用控制 - 计数时钟选择
  74. **
  75. ** \note
  76. ******************************************************************************/
  77. typedef enum en_adt_cnt_ckdiv
  78. {
  79. AdtClkPClk0 = 0u, ///< PCLK0
  80. AdtClkPClk0Div2 = 1u, ///< PCLK0/2
  81. AdtClkPClk0Div4 = 2u, ///< PCLK0/4
  82. AdtClkPClk0Div8 = 3u, ///< PCLK0/8
  83. AdtClkPClk0Div16 = 4u, ///< PCLK0/16
  84. AdtClkPClk0Div64 = 5u, ///< PCLK0/64
  85. AdtClkPClk0Div256 = 6u, ///< PCLK0/256
  86. AdtClkPClk0Div1024 = 7u, ///< PCLK0/1024
  87. }en_adt_cnt_ckdiv_t;
  88. /**
  89. ******************************************************************************
  90. ** \brief ADT计数模式
  91. **
  92. ** \note
  93. ******************************************************************************/
  94. typedef enum en_adt_cnt_mode
  95. {
  96. AdtSawtoothMode = 0u, ///< 锯齿波模式
  97. AdtTriangleModeA = 4u, ///< 三角波A模式
  98. AdtTriangleModeB = 5u, ///< 三角波B模式
  99. }en_adt_cnt_mode_t;
  100. /**
  101. ******************************************************************************
  102. ** \brief ADT计数方向
  103. **
  104. ** \note
  105. ******************************************************************************/
  106. typedef enum en_adt_cnt_dir
  107. {
  108. AdtCntDown = 0u, ///< 递减计数
  109. AdtCntUp = 1u, ///< 递加计数
  110. }en_adt_cnt_dir_t;
  111. /**
  112. ******************************************************************************
  113. ** \brief ADT通用比较基准
  114. **
  115. ** \note
  116. ******************************************************************************/
  117. typedef enum en_adt_compare
  118. {
  119. AdtCompareA = 0u, ///< 通用比较基准A
  120. AdtCompareB = 1u, ///< 通用比较基准B
  121. AdtCompareC = 2u, ///< 通用比较基准C
  122. AdtCompareD = 3u, ///< 通用比较基准D
  123. }en_adt_compare_t;
  124. /**
  125. ******************************************************************************
  126. ** \brief ADT专用比较基准
  127. **
  128. ** \note
  129. ******************************************************************************/
  130. typedef enum en_adt_special_compare
  131. {
  132. AdtSpclCompA = 0u, ///< 专用比较基准A
  133. AdtSpclCompB = 1u, ///< 专用比较基准B
  134. }en_adt_special_compare_t;
  135. /**
  136. ******************************************************************************
  137. ** \brief ADT端口控制 - TIMx输出状态控制
  138. **
  139. ** \note
  140. ******************************************************************************/
  141. typedef enum en_adt_pconr_disval
  142. {
  143. AdtTIMxDisValNorm = 0u, ///< 强制输出无效条件0~3中被选择的条件成立时,CHx端口正常输出
  144. AdtTIMxDisValHiZ = 1u, ///< 强制输出无效条件0~3中被选择的条件成立时,CHx端口输出高阻态
  145. AdtTIMxDisValLow = 2u, ///< 强制输出无效条件0~3中被选择的条件成立时,CHx端口输出低电平
  146. AdtTIMxDisValHigh = 3u, ///< 强制输出无效条件0~3中被选择的条件成立时,CHx端口输出高电平
  147. }en_adt_pconr_disval_t;
  148. /**
  149. ******************************************************************************
  150. ** \brief ADT端口控制 - CHx强制输出无效条件选择
  151. **
  152. ** \note
  153. ******************************************************************************/
  154. typedef enum en_adt_pconr_dissel
  155. {
  156. AdtCHxDisSel0 = 0u, ///< 选择强制输出无效条件0
  157. AdtCHxDisSel1 = 1u, ///< 选择强制输出无效条件1
  158. AdtCHxDisSel2 = 2u, ///< 选择强制输出无效条件2
  159. AdtCHxDisSel3 = 3u, ///< 选择强制输出无效条件3
  160. }en_adt_pconr_dissel_t;
  161. /**
  162. ******************************************************************************
  163. ** \brief ADT端口控制 - CHx周期值匹配时端口状态设定
  164. **
  165. ** \note
  166. ******************************************************************************/
  167. typedef enum en_adt_pconr_perc
  168. {
  169. AdtCHxPeriodLow = 0u, ///< 计数器计数值与周期值相等时,CHx端口输出保持为低电平
  170. AdtCHxPeriodHigh = 1u, ///< 计数器计数值与周期值相等时,CHx端口输出设定为高电平
  171. AdtCHxPeriodKeep = 2u, ///< 计数器计数值与周期值相等时,CHx端口输出设定为先前状态
  172. AdtCHxPeriodInv = 3u, ///< 计数器计数值与周期值相等时,CHx端口输出设定为反转电平
  173. }en_adt_pconr_perc_t;
  174. /**
  175. ******************************************************************************
  176. ** \brief ADT端口控制 - CHx比较值匹配时端口状态设定
  177. **
  178. ** \note
  179. ******************************************************************************/
  180. typedef enum en_adt_pconr_cmpc
  181. {
  182. AdtCHxCompareLow = 0u, ///< 计数器计数值与GCMxR相等时,CHx端口输出保持为低电平
  183. AdtCHxCompareHigh = 1u, ///< 计数器计数值与GCMxR相等时,CHx端口输出设定为高电平
  184. AdtCHxCompareKeep = 2u, ///< 计数器计数值与GCMxR相等时,CHx端口输出设定为先前状态
  185. AdtCHxCompareInv = 3u, ///< 计数器计数值与GCMxR相等时,CHx端口输出设定为反转电平
  186. }en_adt_pconr_cmpc_t;
  187. /**
  188. ******************************************************************************
  189. ** \brief ADT端口控制 - CHx端口输出
  190. **
  191. ** \note
  192. ******************************************************************************/
  193. typedef enum en_adt_pconr_port_out
  194. {
  195. AdtCHxPortOutLow = 0u, ///< CHx端口输出设定为低电平
  196. AdtCHxPortOutHigh = 1u, ///< CHx端口输出设定为高电平
  197. }en_adt_pconr_port_out_t;
  198. /**
  199. ******************************************************************************
  200. ** \brief ADT端口控制 - CHx端口功能模式选择
  201. **
  202. ** \note
  203. ******************************************************************************/
  204. typedef enum en_adt_pconr_capc
  205. {
  206. AdtCHxCompareOutput = 0u, ///< CHx端口设定为比较输出功能
  207. AdtCHxCompareInput = 1u, ///< CHx端口设定为捕获输入功能
  208. }en_adt_pconr_capc_t;
  209. /**
  210. ******************************************************************************
  211. ** \brief ADT端口控制 - CHx计数开始停止端口状态选择
  212. **
  213. ** \note
  214. ******************************************************************************/
  215. typedef enum en_adt_pconr_stastps
  216. {
  217. AdtCHxStateSelSS = 0u, ///< 计数开始或停止时,CHx端口输出由STACB、STPCB决定
  218. AdtCHxStateSelKeep = 1u, ///< 计数开始或停止时,CHx端口输出设定为先前状态
  219. }en_adt_pconr_stastps_t;
  220. /**
  221. ******************************************************************************
  222. ** \brief ADT死区控制 - CHx死区分离设定
  223. **
  224. ** \note
  225. ******************************************************************************/
  226. typedef enum en_adt_dconr_sepa
  227. {
  228. AdtCHxDtSeperate = 0u, ///< DTUAR和DTDAR分别设定
  229. AdtCHxDtEqual = 1u, ///< DTDAR的值和DTUAR的值自动相等
  230. }en_adt_dconr_sepa_t;
  231. /**
  232. ******************************************************************************
  233. ** \brief ADT滤波控制 - TRIx/TIMxIx端口滤波采样基准时钟选择
  234. **
  235. ** \note
  236. ******************************************************************************/
  237. typedef enum en_adt_fconr_nofick
  238. {
  239. AdtFltClkPclk0 = 0u, ///< PCLK0
  240. AdtFltClkPclk0Div4 = 1u, ///< PCLK0/4
  241. AdtFltClkPclk0Div16 = 2u, ///< PCLK0/16
  242. AdtFltClkPclk0Div64 = 3u, ///< PCLK0/64
  243. }en_adt_fconr_nofick_t;
  244. /**
  245. ******************************************************************************
  246. ** \brief ADT有效周期 - TIMx有效周期选择
  247. **
  248. ** \note
  249. ******************************************************************************/
  250. typedef enum en_adt_vperr_pcnts
  251. {
  252. AdtPeriodCnts0 = 0u, ///< 有效周期选择功能无效
  253. AdtPeriodCnts1 = 1u, ///< 每隔1个周期有效一次
  254. AdtPeriodCnts2 = 2u, ///< 每隔2个周期有效一次
  255. AdtPeriodCnts3 = 3u, ///< 每隔3个周期有效一次
  256. AdtPeriodCnts4 = 4u, ///< 每隔4个周期有效一次
  257. AdtPeriodCnts5 = 5u, ///< 每隔5个周期有效一次
  258. AdtPeriodCnts6 = 6u, ///< 每隔6个周期有效一次
  259. AdtPeriodCnts7 = 7u, ///< 每隔7个周期有效一次
  260. }en_adt_vperr_pcnts_t;
  261. /**
  262. ******************************************************************************
  263. ** \brief ADT有效周期 - 计数条件选择
  264. **
  265. ** \note
  266. ******************************************************************************/
  267. typedef enum en_adt_vperr_pcnte
  268. {
  269. AdtPeriodCnteDisable = 0u, ///< 有效周期选择功能无效
  270. AdtPeriodCnteMin = 1u, ///< 锯齿波计数上、下溢点或三角波波谷做为计数条件
  271. AdtPeriodCnteMax = 2u, ///< 锯齿波计数上、下溢点或三角波波峰做为计数条件
  272. AdtPeriodCnteBoth = 3u, ///< 锯齿波计数上、下溢点或三角波波峰,波谷做为计数条件
  273. }en_adt_vperr_pcnte_t;
  274. /**
  275. ******************************************************************************
  276. ** \brief ADT端口触发控制 - 触发源选择
  277. **
  278. ** \note
  279. ******************************************************************************/
  280. typedef enum en_adt_ttrig_trigxs
  281. {
  282. AdtTrigxSelPA3 = 0u, ///< PA3
  283. AdtTrigxSelPB3 = 1u, ///< PB3
  284. AdtTrigxSelPC3 = 2u, ///< PC3
  285. AdtTrigxSelPD3 = 3u, ///< PD3
  286. AdtTrigxSelPA7 = 4u, ///< PA7
  287. AdtTrigxSelPB7 = 5u, ///< PB7
  288. AdtTrigxSelPC7 = 6u, ///< PC7
  289. AdtTrigxSelPD7 = 7u, ///< PD7
  290. AdtTrigxSelPA11 = 8u, ///< PA11
  291. AdtTrigxSelPB11 = 9u, ///< PB11
  292. AdtTrigxSelPC11 = 10u, ///< PC11
  293. AdtTrigxSelPD1 = 11u, ///< PD1
  294. AdtTrigxSelPA15 = 12u, ///< PA15
  295. AdtTrigxSelPB15 = 13u, ///< PB15
  296. AdtTrigxSelPC15 = 14u, ///< PC15
  297. AdtTrigxSelPD5 = 15u, ///< PD5
  298. }en_adt_ttrig_trigxs_t;
  299. /**
  300. ******************************************************************************
  301. ** \brief ADT AOS触发控制 - AOSx触发源选择
  302. **
  303. ** \note
  304. ******************************************************************************/
  305. typedef enum en_adt_itrig_iaosxs
  306. {
  307. AdtAosxTrigSelTim0Int = 0u, ///< TIM0_INT
  308. AdtAosxTrigSelTim1Int = 1u, ///< TIM1_INT
  309. AdtAosxTrigSelTim2Int = 2u, ///< TIM2_INT
  310. AdtAosxTrigSelLpTimInt = 3u, ///< LPTIMER_INT
  311. AdtAosxTrigSelTim4Int = 4u, ///< TIM4_INT
  312. AdtAosxTrigSelTim5Int = 5u, ///< TIM5_INT
  313. AdtAosxTrigSelTim6Int = 6u, ///< TIM6_INT
  314. AdtAosxTrigSelUart0Int = 7u, ///< UART0_INT
  315. AdtAosxTrigSelUart1Int = 8u, ///< UART1_INT
  316. AdtAosxTrigSelLpUartInt = 9u, ///< LPUART_INT
  317. AdtAosxTrigSelVc0Int = 10u, ///< VC0_INT
  318. AdtAosxTrigSelVc1Int = 11u, ///< VC1_INT
  319. AdtAosxTrigSelRtcInt = 12u, ///< RTC_INT
  320. AdtAosxTrigSelPcaInt = 13u, ///< PCA_INT
  321. AdtAosxTrigSelSpiInt = 14u, ///< SPI_INT
  322. AdtAosxTrigSelAdcInt = 15u, ///< ADC_INT
  323. }en_adt_itrig_iaosxs_t;
  324. /**
  325. ******************************************************************************
  326. ** \brief ADT硬件(启动/停止/清零/捕获)事件触发选择
  327. **
  328. ** \note
  329. ******************************************************************************/
  330. typedef enum en_adt_hw_trig
  331. {
  332. AdtHwTrigAos0 = 0u, ///< 从AOS来的事件触发0有效
  333. AdtHwTrigAos1 = 1u, ///< 从AOS来的事件触发1有效
  334. AdtHwTrigAos2 = 2u, ///< 从AOS来的事件触发2有效
  335. AdtHwTrigAos3 = 3u, ///< 从AOS来的事件触发3有效
  336. AdtHwTrigCHxARise = 4u, ///< CHxA端口上采样到上升沿
  337. AdtHwTrigCHxAFall = 5u, ///< CHxA端口上采样到下降沿
  338. AdtHwTrigCHxBRise = 6u, ///< CHxB端口上采样到上升沿
  339. AdtHwTrigCHxBFall = 7u, ///< CHxB端口上采样到下降沿
  340. AdtHwTrigTimTriARise = 8u, ///< TIMTRIA端口上采样到上升沿
  341. AdtHwTrigTimTriAFall = 9u, ///< TIMTRIA端口上采样到下降沿
  342. AdtHwTrigTimTriBRise = 10u, ///< TIMTRIB端口上采样到上升沿
  343. AdtHwTrigTimTriBFall = 11u, ///< TIMTRIB端口上采样到下降沿
  344. AdtHwTrigTimTriCRise = 12u, ///< TIMTRIC端口上采样到上升沿
  345. AdtHwTrigTimTriCFall = 13u, ///< TIMTRIC端口上采样到下降沿
  346. AdtHwTrigTimTriDRise = 14u, ///< TIMTRID端口上采样到上升沿
  347. AdtHwTrigTimTriDFall = 15u, ///< TIMTRID端口上采样到下降沿
  348. AdtHwTrigEnd = 16u,
  349. }en_adt_hw_trig_t;
  350. /**
  351. ******************************************************************************
  352. ** \brief ADT硬件(递加/递减)事件触发选择
  353. **
  354. ** \note
  355. ******************************************************************************/
  356. typedef enum en_adt_hw_cnt
  357. {
  358. AdtHwCntCHxALowCHxBRise = 0u, ///< CHxA端口为低电平时,CHxB端口上采样到上升沿
  359. AdtHwCntCHxALowCHxBFall = 1u, ///< CHxA端口为低电平时,CHxB端口上采样到下降沿
  360. AdtHwCntCHxAHighCHxBRise = 2u, ///< CHxA端口为高电平时,CHxB端口上采样到上升沿
  361. AdtHwCntCHxAHighCHxBFall = 3u, ///< CHxA端口为高电平时,CHxB端口上采样到下降沿
  362. AdtHwCntCHxBLowCHxARise = 4u, ///< CHxB端口为低电平时,CHxA端口上采样到上升沿
  363. AdtHwCntCHxBLowCHxAFall = 5u, ///< CHxB端口为低电平时,CHxA端口上采样到下降沿
  364. AdtHwCntCHxBHighChxARise = 6u, ///< CHxB端口为高电平时,CHxA端口上采样到上升沿
  365. AdtHwCntCHxBHighCHxAFall = 7u, ///< CHxB端口为高电平时,CHxA端口上采样到下降沿
  366. AdtHwCntTimTriARise = 8u, ///< TIMTRIA端口上采样到上升沿
  367. AdtHwCntTimTriAFall = 9u, ///< TIMTRIA端口上采样到下降沿
  368. AdtHwCntTimTriBRise = 10u, ///< TIMTRIB端口上采样到上升沿
  369. AdtHwCntTimTriBFall = 11u, ///< TIMTRIB端口上采样到下降沿
  370. AdtHwCntTimTriCRise = 12u, ///< TIMTRIC端口上采样到上升沿
  371. AdtHwCntTimTriCFall = 13u, ///< TIMTRIC端口上采样到下降沿
  372. AdtHwCntTimTriDRise = 14u, ///< TIMTRID端口上采样到上升沿
  373. AdtHwCntTimTriDFall = 15u, ///< TIMTRID端口上采样到下降沿
  374. AdtHwCntAos0 = 16u, ///< 从AOS来的事件触发0有效
  375. AdtHwCntAos1 = 17u, ///< 从AOS来的事件触发1有效
  376. AdtHwCntAos2 = 18u, ///< 从AOS来的事件触发2有效
  377. AdtHwCntAos3 = 19u, ///< 从AOS来的事件触发3有效
  378. AdtHwCntMax = 20u,
  379. }en_adt_hw_cnt_t;
  380. /**
  381. ******************************************************************************
  382. ** \brief ADT端口刹车极性控制
  383. **
  384. ** \note
  385. ******************************************************************************/
  386. typedef enum en_adt_ptbrk_polarity
  387. {
  388. AdtPtBrkHigh = 0u, ///< 端口刹车极性高电平有效
  389. AdtPtBrkLow = 1u, ///< 端口刹车极性低电平有效
  390. }en_adt_ptbrk_polarity_t;
  391. /**
  392. ******************************************************************************
  393. ** \brief ADT PWM展频计数选择
  394. **
  395. ** \note
  396. ******************************************************************************/
  397. typedef enum en_adt_pwm_dither_type
  398. {
  399. AdtPwmDitherUnderFlow = 0u, ///< PWM展频计数下溢出
  400. AdtPwmDitherOverFlow = 1u, ///< PWM展频计数上溢出
  401. }en_adt_pwm_dither_type_t;
  402. /**
  403. ******************************************************************************
  404. ** \brief ADT中断类型
  405. **
  406. ** \note
  407. ******************************************************************************/
  408. typedef enum en_adt_irq_type
  409. {
  410. AdtCMAIrq = 0u, ///< 计数匹配A(或捕获输入)中断
  411. AdtCMBIrq = 1u, ///< 计数匹配B(或捕获输入)中断
  412. AdtCMCIrq = 2u, ///< 计数匹配C中断
  413. AdtCMDIrq = 3u, ///< 计数匹配D中断
  414. AdtOVFIrq = 6u, ///< 上溢匹配中断
  415. AdtUDFIrq = 7u, ///< 下溢匹配中断
  416. AdtDTEIrq = 8u, ///< 死区时间错误中断
  417. AdtSAMLIrq = 14u, ///< 同低中断
  418. AdtSAMHIrq = 15u, ///< 同高中断
  419. }en_adt_irq_type_t;
  420. typedef enum en_adt_state_type
  421. {
  422. AdtCMAF = 0, ///< 计数匹配A标志
  423. AdtCMBF = 1, ///< 计数匹配B标志
  424. AdtCMCF = 2, ///< 计数匹配C标志
  425. AdtCMDF = 3, ///< 计数匹配D标志
  426. AdtOVFF = 6, ///< 上溢匹配标志
  427. AdtUDFF = 7, ///< 下溢匹配标志
  428. AdtDTEF = 8, ///< 死区时间错误标志
  429. AdtCMSAUF = 9, ///< 向上计数专用比较基准值匹配A标志
  430. AdtCMSADF = 10, ///< 向下计数专用比较基准值匹配B标志
  431. AdtCMSBUF = 11, ///< 向上计数专用比较基准值匹配A标志
  432. AdtCMSBDF = 12, ///< 向下计数专用比较基准值匹配B标志
  433. AdtCntDir = 31, ///< 计数方向
  434. }en_adt_state_type_t;
  435. /**
  436. ******************************************************************************
  437. ** \brief ADT软件同步配置
  438. ** \note
  439. ******************************************************************************/
  440. typedef struct stc_adt_sw_sync
  441. {
  442. boolean_t bAdTim4; ///< Timer 4
  443. boolean_t bAdTim5; ///< Timer 5
  444. boolean_t bAdTim6; ///< Timer 6
  445. }stc_adt_sw_sync_t;
  446. /**
  447. ******************************************************************************
  448. ** \brief ADT AOS触发配置
  449. ** \note
  450. ******************************************************************************/
  451. typedef struct stc_adt_aos_trig_cfg
  452. {
  453. en_adt_itrig_iaosxs_t enAos0TrigSrc; ///< AOS0触发源选择
  454. en_adt_itrig_iaosxs_t enAos1TrigSrc; ///< AOS1触发源选择
  455. en_adt_itrig_iaosxs_t enAos2TrigSrc; ///< AOS2触发源选择
  456. en_adt_itrig_iaosxs_t enAos3TrigSrc; ///< AOS3触发源选择
  457. }stc_adt_aos_trig_cfg_t;
  458. /**
  459. ******************************************************************************
  460. ** \brief ADT 中断触发配置
  461. ** \note
  462. ******************************************************************************/
  463. typedef struct stc_adt_irq_trig_cfg
  464. {
  465. boolean_t bAdtSpecilMatchBTrigDmaEn; ///< 专用比较基准值匹配B使能触发DMA
  466. boolean_t bAdtSpecilMatchATrigDmaEn; ///< 专用比较基准值匹配A使能触发DMA
  467. boolean_t bAdtUnderFlowTrigDmaEn; ///< 下溢匹配使能触发DMA
  468. boolean_t bAdtOverFlowTrigDmaEn; ///< 上溢匹配使能触发DMA
  469. boolean_t bAdtCntMatchDTrigDmaEn; ///< 计数匹配D使能触发DMA
  470. boolean_t bAdtCntMatchCTrigDmaEn; ///< 计数匹配C使能触发DMA
  471. boolean_t bAdtCntMatchBTrigDmaEn; ///< 计数匹配B使能触发DMA
  472. boolean_t bAdtCntMatchATrigDmaEn; ///< 计数匹配A使能触发DMA
  473. boolean_t bAdtSpecilMatchBTrigEn; ///< 专用比较基准值匹配B使能触发ADC
  474. boolean_t bAdtSpecilMatchATrigEn; ///< 专用比较基准值匹配A使能触发ADC
  475. boolean_t bAdtUnderFlowTrigEn; ///< 下溢匹配使能触发ADC
  476. boolean_t bAdtOverFlowTrigEn; ///< 上溢匹配使能触发ADC
  477. boolean_t bAdtCntMatchDTrigEn; ///< 计数匹配D使能触发ADC
  478. boolean_t bAdtCntMatchCTrigEn; ///< 计数匹配C使能触发ADC
  479. boolean_t bAdtCntMatchBTrigEn; ///< 计数匹配B使能触发ADC
  480. boolean_t bAdtCntMatchATrigEn; ///< 计数匹配A使能触发ADC
  481. }stc_adt_irq_trig_cfg_t;
  482. /**
  483. ******************************************************************************
  484. ** \brief ADT Trig端口配置
  485. ** \note
  486. ******************************************************************************/
  487. typedef struct stc_adt_port_trig_cfg
  488. {
  489. en_adt_ttrig_trigxs_t enTrigSrc; ///< 触发源选择
  490. boolean_t bFltEn; ///< 触发源捕获输入滤波使能
  491. en_adt_fconr_nofick_t enFltClk; ///< 滤波采样基准时钟
  492. }stc_adt_port_trig_cfg_t;
  493. /**
  494. ******************************************************************************
  495. ** \brief ADT Z相输入屏蔽功能配置
  496. ** \note
  497. ******************************************************************************/
  498. typedef struct stc_adt_zmask_cfg
  499. {
  500. en_adt_gconr_zmsk_t enZMaskCycle; ///< Z相输入屏蔽计数周期选择
  501. boolean_t bFltPosCntMaksEn; ///< Z相输入时的屏蔽周期内,位置计数器的清零功能不屏蔽(FALSE)或屏蔽(TRUE)
  502. boolean_t bFltRevCntMaksEn; ///< Z相输入时的屏蔽周期内,公转计数器的计数功能不屏蔽(FALSE)或屏蔽(TRUE)
  503. }stc_adt_zmask_cfg_t;
  504. /**
  505. ******************************************************************************
  506. ** \brief ADT TIMxX端口配置
  507. ** \note
  508. ******************************************************************************/
  509. typedef struct stc_adt_TIMxX_port_cfg
  510. {
  511. en_adt_pconr_capc_t enCap; ///< 端口功能模式
  512. boolean_t bOutEn; ///< 输出使能
  513. en_adt_pconr_perc_t enPerc; ///< 周期值匹配时端口状态
  514. en_adt_pconr_cmpc_t enCmpc; ///< 比较值匹配时端口状态
  515. en_adt_pconr_stastps_t enStaStp; ///< 计数开始停止端口状态选择
  516. en_adt_pconr_port_out_t enStaOut; ///< 计数开始端口输出状态
  517. en_adt_pconr_port_out_t enStpOut; ///< 计数停止端口输出状态
  518. en_adt_pconr_disval_t enDisVal; ///< 强制输出无效时输出状态控制
  519. en_adt_pconr_dissel_t enDisSel; ///< 强制输出无效条件选择
  520. boolean_t bFltEn; ///< 端口捕获输入滤波使能
  521. en_adt_fconr_nofick_t enFltClk; ///< 端口滤波采样基准时钟
  522. }stc_adt_CHxX_port_cfg_t;
  523. /**
  524. ******************************************************************************
  525. ** \brief ADT刹车端口配置
  526. ** \note
  527. ******************************************************************************/
  528. typedef struct stc_adt_break_port_cfg
  529. {
  530. boolean_t bPortEn; ///< 端口使能
  531. en_adt_ptbrk_polarity_t enPol; ///< 极性选择
  532. }stc_adt_break_port_cfg_t;
  533. /**
  534. ******************************************************************************
  535. ** \brief ADT无效条件3配置
  536. ** \note
  537. ******************************************************************************/
  538. typedef struct stc_adt_disable_3_cfg
  539. {
  540. stc_adt_break_port_cfg_t stcBrkPtCfg[16]; ///< 刹车端口配置
  541. boolean_t bFltEn; ///< 刹车端口滤波使能
  542. en_adt_fconr_nofick_t enFltClk; ///< 滤波采样基准时钟
  543. }stc_adt_disable_3_cfg_t;
  544. /**
  545. ******************************************************************************
  546. ** \brief ADT无效条件1配置
  547. ** \note
  548. ******************************************************************************/
  549. typedef struct stc_adt_disable_1_cfg
  550. {
  551. boolean_t bTim6OutSH; ///< TIM6输出同高
  552. boolean_t bTim5OutSH; ///< TIM5输出同高
  553. boolean_t bTim4OutSH; ///< TIM4输出同高
  554. boolean_t bTim6OutSL; ///< TIM6输出同低
  555. boolean_t bTim5OutSL; ///< TIM5输出同低
  556. boolean_t bTim4OutSL; ///< TIM4输出同低
  557. }stc_adt_disable_1_cfg_t;
  558. /**
  559. ******************************************************************************
  560. ** \brief ADT PWM展频计数配置
  561. ** \note
  562. ******************************************************************************/
  563. typedef struct stc_adt_pwm_dither_cfg
  564. {
  565. en_adt_pwm_dither_type_t enAdtPDType; ///< PWM展频计数选择
  566. boolean_t bTimxBPDEn; ///< PWM通道B展频使能
  567. boolean_t bTimxAPDEn; ///< PWM通道A展频使能
  568. }stc_adt_pwm_dither_cfg_t;
  569. /**
  570. ******************************************************************************
  571. ** \brief ADT基本计数配置
  572. ** \note
  573. ******************************************************************************/
  574. typedef struct stc_adt_basecnt_cfg
  575. {
  576. en_adt_cnt_mode_t enCntMode; ///< 计数模式
  577. en_adt_cnt_dir_t enCntDir; ///< 计数方向
  578. en_adt_cnt_ckdiv_t enCntClkDiv; ///< 计数时钟选择
  579. }stc_adt_basecnt_cfg_t;
  580. /**
  581. ******************************************************************************
  582. ** \brief ADT计数状态
  583. ** \note
  584. ******************************************************************************/
  585. typedef struct stc_adt_cntstate_cfg
  586. {
  587. uint16_t u16Counter; ///< 当前计数器的计数值
  588. boolean_t enCntDir; ///< 计数方向
  589. uint8_t u8ValidPeriod; ///< 有效周期计数
  590. boolean_t bCMSBDF; ///< 向下计数专用比较基准值匹配B标志
  591. boolean_t bCMSBUF; ///< 向上计数专用比较基准值匹配A标志
  592. boolean_t bCMSADF; ///< 向下计数专用比较基准值匹配B标志
  593. boolean_t bCMSAUF; ///< 向上计数专用比较基准值匹配A标志
  594. boolean_t bDTEF; ///< 死区时间错误标志
  595. boolean_t bUDFF; ///< 下溢匹配标志
  596. boolean_t bOVFF; ///< 上溢匹配标志
  597. boolean_t bCMDF; ///< 计数匹配D标志
  598. boolean_t bCMCF; ///< 计数匹配C标志
  599. boolean_t bCMBF; ///< 计数匹配B标志
  600. boolean_t bCMAF; ///< 计数匹配A标志
  601. }stc_adt_cntstate_cfg_t;
  602. /**
  603. ******************************************************************************
  604. ** \brief ADT有效计数周期
  605. ** \note
  606. ******************************************************************************/
  607. typedef struct stc_adt_validper_cfg
  608. {
  609. en_adt_vperr_pcnts_t enValidCnt; ///< 有效周期选择
  610. en_adt_vperr_pcnte_t enValidCdt; ///< 有效周期计数条件
  611. boolean_t bPeriodD; ///< 通用信号有效周期选择D
  612. boolean_t bPeriodC; ///< 通用信号有效周期选择C
  613. boolean_t bPeriodB; ///< 通用信号有效周期选择B
  614. boolean_t bPeriodA; ///< 通用信号有效周期选择A
  615. }stc_adt_validper_cfg_t;
  616. /******************************************************************************
  617. * Global definitions
  618. ******************************************************************************/
  619. /******************************************************************************
  620. * Local type definitions ('typedef')
  621. ******************************************************************************/
  622. /******************************************************************************
  623. * Global variable definitions ('extern')
  624. ******************************************************************************/
  625. /******************************************************************************
  626. * Global function prototypes (definition in C source)
  627. ******************************************************************************/
  628. //配置硬件递加事件
  629. en_result_t Adt_CfgHwCntUp(M0P_ADTIM_TypeDef *ADTx, en_adt_hw_cnt_t enAdtHwCntUp);
  630. //清除硬件递加事件
  631. en_result_t Adt_ClearHwCntUp(M0P_ADTIM_TypeDef *ADTx);
  632. //配置硬件递减事件
  633. en_result_t Adt_CfgHwCntDwn(M0P_ADTIM_TypeDef *ADTx, en_adt_hw_cnt_t enAdtHwCntDwn);
  634. //清除硬件递减事件
  635. en_result_t Adt_ClearHwCntDwn(M0P_ADTIM_TypeDef *ADTx);
  636. //配置硬件启动事件
  637. en_result_t Adt_CfgHwStart(M0P_ADTIM_TypeDef *ADTx, en_adt_hw_trig_t enAdtHwStart);
  638. //清除硬件启动事件
  639. en_result_t Adt_ClearHwStart(M0P_ADTIM_TypeDef *ADTx);
  640. //使能硬件启动事件
  641. en_result_t Adt_EnableHwStart(M0P_ADTIM_TypeDef *ADTx);
  642. //禁止硬件启动事件
  643. en_result_t Adt_DisableHwStart(M0P_ADTIM_TypeDef *ADTx);
  644. //配置硬件停止事件
  645. en_result_t Adt_CfgHwStop(M0P_ADTIM_TypeDef *ADTx, en_adt_hw_trig_t enAdtHwStop);
  646. //清除硬件停止事件
  647. en_result_t Adt_ClearHwStop(M0P_ADTIM_TypeDef *ADTx);
  648. //使能硬件停止事件
  649. en_result_t Adt_EnableHwStop(M0P_ADTIM_TypeDef *ADTx);
  650. //禁止硬件停止事件
  651. en_result_t Adt_DisableHwStop(M0P_ADTIM_TypeDef *ADTx);
  652. //配置硬件清零事件
  653. en_result_t Adt_CfgHwClear(M0P_ADTIM_TypeDef *ADTx, en_adt_hw_trig_t enAdtHwClear);
  654. //清除硬件清零事件
  655. en_result_t Adt_ClearHwClear(M0P_ADTIM_TypeDef *ADTx);
  656. //使能硬件清零事件
  657. en_result_t Adt_EnableHwClear(M0P_ADTIM_TypeDef *ADTx);
  658. //禁止硬件清零事件
  659. en_result_t Adt_DisableHwClear(M0P_ADTIM_TypeDef *ADTx);
  660. //配置A通道硬件捕获事件
  661. en_result_t Adt_CfgHwCaptureA(M0P_ADTIM_TypeDef *ADTx, en_adt_hw_trig_t enAdtHwCaptureA);
  662. //清除A通道硬件捕获事件
  663. en_result_t Adt_ClearHwCaptureA(M0P_ADTIM_TypeDef *ADTx);
  664. //配置B通道硬件捕获事件
  665. en_result_t Adt_CfgHwCaptureB(M0P_ADTIM_TypeDef *ADTx, en_adt_hw_trig_t enAdtHwCaptureB);
  666. //清除B通道硬件捕获事件
  667. en_result_t Adt_ClearHwCaptureB(M0P_ADTIM_TypeDef *ADTx);
  668. //软件同步启动
  669. en_result_t Adt_SwSyncStart(stc_adt_sw_sync_t* pstcAdtSwSyncStart);
  670. //软件同步停止
  671. en_result_t Adt_SwSyncStop(stc_adt_sw_sync_t* pstcAdtSwSyncStop);
  672. //软件同步清零
  673. en_result_t Adt_SwSyncClear(stc_adt_sw_sync_t* pstcAdtSwSyncClear);
  674. //获取软件同步状态
  675. en_result_t Adt_GetSwSyncState(stc_adt_sw_sync_t* pstcAdtSwSyncState);
  676. //AOS触发配置
  677. en_result_t Adt_AosTrigCfg(stc_adt_aos_trig_cfg_t* pstcAdtAosTrigCfg);
  678. //中断触发配置
  679. en_result_t Adt_IrqTrigCfg(M0P_ADTIM_TypeDef *ADTx,
  680. stc_adt_irq_trig_cfg_t* pstcAdtIrqTrigCfg);
  681. //端口触发配置
  682. en_result_t Adt_PortTrigCfg(en_adt_trig_port_t enAdtTrigPort,
  683. stc_adt_port_trig_cfg_t* pstcAdtPortTrigCfg);
  684. //CHxX端口配置
  685. en_result_t Adt_CHxXPortCfg(M0P_ADTIM_TypeDef *ADTx,
  686. en_adt_CHxX_port_t enAdtCHxXPort,
  687. stc_adt_CHxX_port_cfg_t* pstcAdtCHxXCfg);
  688. //使能端口刹车
  689. en_result_t Adt_EnableBrakePort(uint8_t port, stc_adt_break_port_cfg_t* pstcAdtBrkPtCfg);
  690. //清除端口刹车
  691. void Adt_ClearBrakePort(void);
  692. //无效条件3配置(端口刹车)
  693. en_result_t Adt_Disable3Cfg(stc_adt_disable_3_cfg_t* pstcAdtDisable3);
  694. //软件刹车 Enable/Disable(仅适用于无效条件3使能的情况下)
  695. en_result_t Adt_SwBrake(boolean_t bSwBrk);
  696. //获取端口刹车标志
  697. boolean_t Adt_GetPortBrakeFlag(void);
  698. //清除端口刹车标志
  699. void Adt_ClearPortBrakeFlag(void);
  700. //无效条件1配置(同高同低刹车)
  701. en_result_t Adt_Disable1Cfg(stc_adt_disable_1_cfg_t* pstcAdtDisable1);
  702. //获取同高同低刹车标志
  703. boolean_t Adt_GetSameBrakeFlag(void);
  704. //清除同高同低刹车标志
  705. void Adt_ClearSameBrakeFlag(void);
  706. //PWM展频配置
  707. en_result_t Adt_PwmDitherCfg(M0P_ADTIM_TypeDef *ADTx, stc_adt_pwm_dither_cfg_t* pstcAdtPwmDitherCfg);
  708. //AdvTimer初始化
  709. en_result_t Adt_Init(M0P_ADTIM_TypeDef *ADTx, stc_adt_basecnt_cfg_t* pstcAdtBaseCntCfg);
  710. //AdvTimer去初始化
  711. en_result_t Adt_DeInit(M0P_ADTIM_TypeDef *ADTx);
  712. //AdvTimert启动
  713. en_result_t Adt_StartCount(M0P_ADTIM_TypeDef *ADTx);
  714. //AdvTimert停止
  715. en_result_t Adt_StopCount(M0P_ADTIM_TypeDef *ADTx);
  716. //设置计数值
  717. en_result_t Adt_SetCount(M0P_ADTIM_TypeDef *ADTx, uint16_t u16Value);
  718. //获取计数值
  719. uint16_t Adt_GetCount(M0P_ADTIM_TypeDef *ADTx);
  720. //清除计数值
  721. en_result_t Adt_ClearCount(M0P_ADTIM_TypeDef *ADTx);
  722. //获取有效周期计数值
  723. uint8_t Adt_GetVperNum(M0P_ADTIM_TypeDef *ADTx);
  724. //获取状态标志
  725. boolean_t Adt_GetState(M0P_ADTIM_TypeDef *ADTx, en_adt_state_type_t enstate);
  726. //配置计数周期
  727. en_result_t Adt_SetPeriod(M0P_ADTIM_TypeDef *ADTx, uint16_t u16Period);
  728. //配置计数周期缓冲
  729. en_result_t Adt_SetPeriodBuf(M0P_ADTIM_TypeDef *ADTx, uint16_t u16PeriodBuf);
  730. //清除计数周期缓冲
  731. en_result_t Adt_ClearPeriodBuf(M0P_ADTIM_TypeDef *ADTx);
  732. //配置有效计数周期
  733. en_result_t Adt_SetValidPeriod(M0P_ADTIM_TypeDef *ADTx,
  734. stc_adt_validper_cfg_t* pstcAdtValidPerCfg);
  735. //配置比较输出计数基准值
  736. en_result_t Adt_SetCompareValue(M0P_ADTIM_TypeDef *ADTx,
  737. en_adt_compare_t enAdtCompare,
  738. uint16_t u16Compare);
  739. //配置通用比较值/捕获值的缓存传送
  740. en_result_t Adt_EnableValueBuf(M0P_ADTIM_TypeDef *ADTx,
  741. en_adt_CHxX_port_t enAdtCHxXPort,
  742. boolean_t bCompareBufEn);
  743. //清除比较输出计数值/捕获值缓存
  744. en_result_t Adt_ClearValueBuf(M0P_ADTIM_TypeDef *ADTx,
  745. en_adt_CHxX_port_t enAdtCHxXPort);
  746. //获取捕获值
  747. en_result_t Adt_GetCaptureValue(M0P_ADTIM_TypeDef *ADTx,
  748. en_adt_CHxX_port_t enAdtCHxXPort,
  749. uint16_t* pu16Capture);
  750. //获取捕获缓存值
  751. en_result_t Adt_GetCaptureBuf(M0P_ADTIM_TypeDef *ADTx,
  752. en_adt_CHxX_port_t enAdtCHxXPort,
  753. uint16_t* pu16CaptureBuf);
  754. //设置死区时间上基准值
  755. en_result_t Adt_SetDTUA(M0P_ADTIM_TypeDef *ADTx,
  756. uint16_t u16Value);
  757. //设置死区时间下基准值
  758. en_result_t Adt_SetDTDA(M0P_ADTIM_TypeDef *ADTx,
  759. uint16_t u16Value);
  760. //配置死区时间功能
  761. en_result_t Adt_CfgDT(M0P_ADTIM_TypeDef *ADTx,
  762. boolean_t bDTEn,
  763. boolean_t bEqual);
  764. //配置中断
  765. en_result_t Adt_CfgIrq(M0P_ADTIM_TypeDef *ADTx,
  766. en_adt_irq_type_t enAdtIrq,
  767. boolean_t bEn);
  768. //获取中断标志
  769. boolean_t Adt_GetIrqFlag(M0P_ADTIM_TypeDef *ADTx,
  770. en_adt_irq_type_t enAdtIrq);
  771. //清除中断标志
  772. en_result_t Adt_ClearIrqFlag(M0P_ADTIM_TypeDef *ADTx,
  773. en_adt_irq_type_t enAdtIrq);
  774. //清除所有中断标志
  775. en_result_t Adt_ClearAllIrqFlag(M0P_ADTIM_TypeDef *ADTx);
  776. //Z相输入屏蔽设置
  777. en_result_t Adt_CfgZMask(M0P_ADTIM_TypeDef *ADTx,
  778. stc_adt_zmask_cfg_t* pstcAdtZMaskCfg);
  779. //@} // ADT Group
  780. #ifdef __cplusplus
  781. }
  782. #endif
  783. #endif /* __ADT_H__ */
  784. /******************************************************************************
  785. * EOF (not truncated)
  786. ******************************************************************************/