adt.h 36 KB

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