timer3.c 41 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345
  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 timer3.c
  12. *
  13. * @brief Source file for TIMER3 functions
  14. *
  15. * @author MADS Team
  16. *
  17. ******************************************************************************/
  18. /** \file timer3.c
  19. **
  20. ** Common API of base timer.
  21. ** @link Tiemr3 Group Some description @endlink
  22. **
  23. ** - 2019-04-18 Husj First Version
  24. **
  25. ******************************************************************************/
  26. /*******************************************************************************
  27. * Include files
  28. ******************************************************************************/
  29. #include "timer3.h"
  30. /**
  31. *******************************************************************************
  32. ** \addtogroup Tim3Group
  33. ******************************************************************************/
  34. //@{
  35. /*******************************************************************************
  36. * Local pre-processor symbols/macros ('#define')
  37. ******************************************************************************/
  38. /*******************************************************************************
  39. * Global variable definitions (declared in header file with 'extern')
  40. ******************************************************************************/
  41. /*******************************************************************************
  42. * Local type definitions ('typedef')
  43. ******************************************************************************/
  44. /*******************************************************************************
  45. * Local variable definitions ('static')
  46. ******************************************************************************/
  47. /*******************************************************************************
  48. * Local function prototypes ('static')
  49. ******************************************************************************/
  50. /*******************************************************************************
  51. * Function implementation - global ('extern') and local ('static')
  52. ******************************************************************************/
  53. /**
  54. *****************************************************************************
  55. ** \brief Timer3 中断标志获取(模式0/1/23)
  56. **
  57. **
  58. ** \param [in] enTim3Irq 中断类型
  59. **
  60. ** \retval TRUE or FALSE
  61. *****************************************************************************/
  62. boolean_t Tim3_GetIntFlag(en_tim3_irq_type_t enTim3Irq)
  63. {
  64. boolean_t bRetVal = FALSE;
  65. uint32_t u32Val;
  66. u32Val = M0P_TIM3_MODE23->IFR;
  67. bRetVal = (u32Val>>enTim3Irq) & 0x1;
  68. return bRetVal;
  69. }
  70. /**
  71. *****************************************************************************
  72. ** \brief Timer3 中断标志清除(模式0/1/23)
  73. **
  74. **
  75. ** \param [in] enTim3Irq 中断类型
  76. **
  77. ** \retval Ok or Error
  78. *****************************************************************************/
  79. en_result_t Tim3_ClearIntFlag(en_tim3_irq_type_t enTim3Irq)
  80. {
  81. en_result_t enResult = Ok;
  82. M0P_TIM3_MODE23->ICLR = ~(1u<<enTim3Irq);
  83. return enResult;
  84. }
  85. /**
  86. *****************************************************************************
  87. ** \brief Timer3 中断所有标志清除(模式23)
  88. **
  89. **
  90. **
  91. **
  92. ** \retval Ok or Error
  93. *****************************************************************************/
  94. en_result_t Tim3_ClearAllIntFlag(void)
  95. {
  96. en_result_t enResult = Ok;
  97. M0P_TIM3_MODE23->ICLR = 0;
  98. return enResult;
  99. }
  100. /**
  101. *****************************************************************************
  102. ** \brief Timer3 中断使能(模式0)
  103. **
  104. **
  105. ** \param [in] none
  106. **
  107. ** \retval Ok or Error
  108. *****************************************************************************/
  109. en_result_t Tim3_Mode0_EnableIrq(void)
  110. {
  111. en_result_t enResult = Ok;
  112. M0P_TIM3_MODE0->M0CR_f.UIE = TRUE;
  113. return enResult;
  114. }
  115. /**
  116. *****************************************************************************
  117. ** \brief Timer3 中断禁止(模式0)
  118. **
  119. **
  120. ** \param [in] none
  121. **
  122. ** \retval Ok or Error
  123. *****************************************************************************/
  124. en_result_t Tim3_Mode0_DisableIrq(void)
  125. {
  126. en_result_t enResult = Ok;
  127. M0P_TIM3_MODE0->M0CR_f.UIE = FALSE;
  128. return enResult;
  129. }
  130. /**
  131. *****************************************************************************
  132. ** \brief Timer3 中断使能(模式1)
  133. **
  134. **
  135. ** \param [in] enTim3Irq 中断类型
  136. **
  137. ** \retval Ok or Error
  138. *****************************************************************************/
  139. en_result_t Tim3_Mode1_EnableIrq (en_tim3_irq_type_t enTim3Irq)
  140. {
  141. en_result_t enResult = Ok;
  142. switch (enTim3Irq)
  143. {
  144. case Tim3UevIrq:
  145. M0P_TIM3_MODE1->M1CR_f.UIE = TRUE;
  146. break;
  147. case Tim3CA0Irq:
  148. M0P_TIM3_MODE1->CR0_f.CIEA = TRUE;
  149. break;
  150. default:
  151. enResult = Error;
  152. break;
  153. }
  154. return enResult;
  155. }
  156. /**
  157. *****************************************************************************
  158. ** \brief Timer3 中断禁止(模式1)
  159. **
  160. **
  161. ** \param [in] enTim3Irq 中断类型
  162. **
  163. ** \retval Ok or Error
  164. *****************************************************************************/
  165. en_result_t Tim3_Mode1_DisableIrq (en_tim3_irq_type_t enTim3Irq)
  166. {
  167. en_result_t enResult = Ok;
  168. switch (enTim3Irq)
  169. {
  170. case Tim3UevIrq:
  171. M0P_TIM3_MODE1->M1CR_f.UIE = FALSE;
  172. break;
  173. case Tim3CA0Irq:
  174. M0P_TIM3_MODE1->CR0_f.CIEA = FALSE;
  175. break;
  176. default:
  177. enResult = Error;
  178. break;
  179. }
  180. return enResult;
  181. }
  182. /**
  183. *****************************************************************************
  184. ** \brief Timer3 中断使能(模式23)
  185. **
  186. **
  187. ** \param [in] enTim3Irq 中断类型
  188. **
  189. ** \retval Ok or Error
  190. *****************************************************************************/
  191. en_result_t Tim3_Mode23_EnableIrq (en_tim3_irq_type_t enTim3Irq)
  192. {
  193. en_result_t enResult = Ok;
  194. switch (enTim3Irq)
  195. {
  196. case Tim3UevIrq:
  197. M0P_TIM3_MODE23->M23CR_f.UIE = TRUE;
  198. break;
  199. case Tim3CA0Irq:
  200. M0P_TIM3_MODE23->CRCH0_f.CIEA = TRUE;
  201. break;
  202. case Tim3CB0Irq:
  203. M0P_TIM3_MODE23->CRCH0_f.CIEB = TRUE;
  204. break;
  205. case Tim3CA1Irq:
  206. M0P_TIM3_MODE23->CRCH1_f.CIEA = TRUE;
  207. break;
  208. case Tim3CB1Irq:
  209. M0P_TIM3_MODE23->CRCH1_f.CIEB = TRUE;
  210. break;
  211. case Tim3CA2Irq:
  212. M0P_TIM3_MODE23->CRCH2_f.CIEA = TRUE;
  213. break;
  214. case Tim3CB2Irq:
  215. M0P_TIM3_MODE23->CRCH2_f.CIEB = TRUE;
  216. break;
  217. case Tim3BkIrq:
  218. M0P_TIM3_MODE23->M23CR_f.BIE = TRUE;
  219. break;
  220. case Tim3TrigIrq:
  221. M0P_TIM3_MODE23->M23CR_f.TIE = TRUE;
  222. break;
  223. default:
  224. enResult = Error;
  225. break;
  226. }
  227. return enResult;
  228. }
  229. /**
  230. *****************************************************************************
  231. ** \brief Timer3 中断禁止(模式23)
  232. **
  233. **
  234. ** \param [in] enTim3Irq 中断类型
  235. **
  236. ** \retval Ok or Error
  237. *****************************************************************************/
  238. en_result_t Tim3_Mode23_DisableIrq (en_tim3_irq_type_t enTim3Irq)
  239. {
  240. en_result_t enResult = Ok;
  241. switch (enTim3Irq)
  242. {
  243. case Tim3UevIrq:
  244. M0P_TIM3_MODE23->M23CR_f.UIE = FALSE;
  245. break;
  246. case Tim3CA0Irq:
  247. M0P_TIM3_MODE23->CRCH0_f.CIEA = FALSE;
  248. break;
  249. case Tim3CB0Irq:
  250. M0P_TIM3_MODE23->CRCH0_f.CIEB = FALSE;
  251. break;
  252. case Tim3CA1Irq:
  253. M0P_TIM3_MODE23->CRCH1_f.CIEA = FALSE;
  254. break;
  255. case Tim3CB1Irq:
  256. M0P_TIM3_MODE23->CRCH1_f.CIEB = FALSE;
  257. break;
  258. case Tim3CA2Irq:
  259. M0P_TIM3_MODE23->CRCH2_f.CIEA = FALSE;
  260. break;
  261. case Tim3CB2Irq:
  262. M0P_TIM3_MODE23->CRCH2_f.CIEB = FALSE;
  263. break;
  264. case Tim3BkIrq:
  265. M0P_TIM3_MODE23->M23CR_f.BIE = FALSE;
  266. break;
  267. case Tim3TrigIrq:
  268. M0P_TIM3_MODE23->M23CR_f.TIE = FALSE;
  269. break;
  270. default:
  271. enResult = Error;
  272. break;
  273. }
  274. return enResult;
  275. }
  276. /**
  277. *****************************************************************************
  278. ** \brief Timer3 初始化配置(模式0)
  279. **
  280. **
  281. ** \param [in] pstcCfg 初始化配置结构体指针
  282. **
  283. ** \retval Ok or Error
  284. *****************************************************************************/
  285. en_result_t Tim3_Mode0_Init(stc_tim3_mode0_cfg_t* pstcCfg)
  286. {
  287. en_result_t enResult = Ok;
  288. M0P_TIM3_MODE0->M0CR_f.MODE = pstcCfg->enWorkMode;
  289. M0P_TIM3_MODE0->M0CR_f.GATEP = pstcCfg->enGateP;
  290. M0P_TIM3_MODE0->M0CR_f.GATE = pstcCfg->bEnGate;
  291. M0P_TIM3_MODE0->M0CR_f.PRS = pstcCfg->enPRS;
  292. M0P_TIM3_MODE0->M0CR_f.TOGEN = pstcCfg->bEnTog;
  293. M0P_TIM3_MODE0->M0CR_f.CT = pstcCfg->enCT;
  294. M0P_TIM3_MODE0->M0CR_f.MD = pstcCfg->enCntMode;
  295. return enResult;
  296. }
  297. /**
  298. *****************************************************************************
  299. ** \brief Timer3 启动运行(模式0)
  300. **
  301. **
  302. ** \param [in] none
  303. **
  304. ** \retval Ok or Error
  305. *****************************************************************************/
  306. en_result_t Tim3_M0_Run(void)
  307. {
  308. en_result_t enResult = Ok;
  309. M0P_TIM3_MODE0->M0CR_f.CTEN = TRUE;
  310. return enResult;
  311. }
  312. /**
  313. *****************************************************************************
  314. ** \brief Timer3 停止运行(模式0)
  315. **
  316. **
  317. ** \param [in] none
  318. **
  319. ** \retval Ok or Error
  320. *****************************************************************************/
  321. en_result_t Tim3_M0_Stop(void)
  322. {
  323. en_result_t enResult = Ok;
  324. M0P_TIM3_MODE0->M0CR_f.CTEN = FALSE;
  325. return enResult;
  326. }
  327. /**
  328. *****************************************************************************
  329. ** \brief Timer3 端口输出使能/禁止设定(模式0)
  330. **
  331. **
  332. ** \param [in] bEnOutput 翻转输出设定 TRUE:使能, FALSE:禁止
  333. **
  334. ** \retval Ok or Error
  335. *****************************************************************************/
  336. en_result_t Tim3_M0_Enable_Output(boolean_t bEnOutput)
  337. {
  338. en_result_t enResult = Ok;
  339. M0P_TIM3_MODE0->DTR_f.MOE = bEnOutput;
  340. return enResult;
  341. }
  342. /**
  343. *****************************************************************************
  344. ** \brief Timer3 翻转使能/禁止(低电平)设定(模式0)
  345. **
  346. **
  347. ** \param [in] bEnTOG 翻转输出设定 TRUE:使能, FALSE:禁止
  348. **
  349. ** \retval Ok or Error
  350. *****************************************************************************/
  351. en_result_t Tim3_M0_EnTOG(boolean_t bEnTOG)
  352. {
  353. en_result_t enResult = Ok;
  354. M0P_TIM3_MODE0->M0CR_f.TOGEN = bEnTOG;
  355. return enResult;
  356. }
  357. /**
  358. *****************************************************************************
  359. ** \brief Timer3 16位计数器初值设置(模式0)
  360. **
  361. **
  362. ** \param [in] u16Data CNT 16位初值
  363. **
  364. ** \retval Ok or Error
  365. *****************************************************************************/
  366. en_result_t Tim3_M0_Cnt16Set(uint16_t u16Data)
  367. {
  368. en_result_t enResult = Ok;
  369. M0P_TIM3_MODE0->CNT_f.CNT = u16Data;
  370. return enResult;
  371. }
  372. /**
  373. *****************************************************************************
  374. ** \brief Timer3 16位计数值获取(模式0)
  375. **
  376. **
  377. ** \param [in] none
  378. **
  379. ** \retval 16bits计数值
  380. *****************************************************************************/
  381. uint16_t Tim3_M0_Cnt16Get(void)
  382. {
  383. uint16_t u16CntData = 0;
  384. u16CntData = M0P_TIM3_MODE0->CNT_f.CNT;
  385. return u16CntData;
  386. }
  387. /**
  388. *****************************************************************************
  389. ** \brief Timer3 重载值设置(模式0)
  390. **
  391. **
  392. ** \param [in] u16Data 16bits重载值
  393. **
  394. ** \retval Ok or Error
  395. *****************************************************************************/
  396. en_result_t Tim3_M0_ARRSet(uint16_t u16Data)
  397. {
  398. en_result_t enResult = Ok;
  399. M0P_TIM3_MODE0->ARR_f.ARR = u16Data;
  400. return enResult;
  401. }
  402. /**
  403. *****************************************************************************
  404. ** \brief Timer3 32位计数器初值设置(模式0)
  405. **
  406. **
  407. ** \param [in] u32Data 32位初值
  408. **
  409. ** \retval Ok or Error
  410. *****************************************************************************/
  411. en_result_t Tim3_M0_Cnt32Set(uint32_t u32Data)
  412. {
  413. en_result_t enResult = Ok;
  414. M0P_TIM3_MODE0->CNT32_f.CNT32 = u32Data;
  415. return enResult;
  416. }
  417. /**
  418. *****************************************************************************
  419. ** \brief Timer3 32位计数值获取(模式0)
  420. **
  421. **
  422. ** \param [in] none
  423. **
  424. ** \retval 32bits计数值
  425. *****************************************************************************/
  426. uint32_t Tim3_M0_Cnt32Get(void)
  427. {
  428. uint32_t u32CntData = 0;
  429. u32CntData = M0P_TIM3_MODE0->CNT32_f.CNT32;
  430. return u32CntData;
  431. }
  432. /**
  433. *****************************************************************************
  434. ** \brief Timer3 初始化配置(模式1)
  435. **
  436. **
  437. ** \param [in] pstcCfg 初始化配置结构体指针
  438. **
  439. ** \retval Ok or Error
  440. *****************************************************************************/
  441. en_result_t Tim3_Mode1_Init(stc_tim3_mode1_cfg_t* pstcCfg)
  442. {
  443. en_result_t enResult = Ok;
  444. M0P_TIM3_MODE1->M1CR_f.MODE = pstcCfg->enWorkMode;
  445. M0P_TIM3_MODE1->M1CR_f.PRS = pstcCfg->enPRS;
  446. M0P_TIM3_MODE1->M1CR_f.CT = pstcCfg->enCT;
  447. M0P_TIM3_MODE1->M1CR_f.ONESHOT = pstcCfg->enOneShot;
  448. return enResult;
  449. }
  450. /**
  451. *****************************************************************************
  452. ** \brief Timer3 PWC 输入配置(模式1)
  453. **
  454. **
  455. ** \param [in] pstcCfg 初始化配置结构体指针
  456. **
  457. ** \retval Ok or Error
  458. *****************************************************************************/
  459. en_result_t Tim3_M1_Input_Cfg(stc_tim3_pwc_input_cfg_t* pstcCfg)
  460. {
  461. en_result_t enResult = Ok;
  462. M0P_TIM3_MODE1->MSCR_f.TS = pstcCfg->enTsSel;
  463. M0P_TIM3_MODE1->MSCR_f.IA0S = pstcCfg->enIA0Sel;
  464. M0P_TIM3_MODE1->MSCR_f.IB0S = pstcCfg->enIB0Sel;
  465. M0P_TIM3_MODE1->FLTR_f.ETP = pstcCfg->enETRPhase;
  466. M0P_TIM3_MODE1->FLTR_f.FLTET = pstcCfg->enFltETR;
  467. M0P_TIM3_MODE1->FLTR_f.FLTA0 = pstcCfg->enFltIA0;
  468. M0P_TIM3_MODE1->FLTR_f.FLTB0 = pstcCfg->enFltIB0;
  469. return enResult;
  470. }
  471. /**
  472. *****************************************************************************
  473. ** \brief Timer3 PWC测量边沿起始结束选择(模式1)
  474. **
  475. **
  476. ** \param [in] enEdgeSel pwc测量起始终止电平
  477. **
  478. ** \retval Ok or Error
  479. *****************************************************************************/
  480. en_result_t Tim3_M1_PWC_Edge_Sel(en_tim3_m1cr_Edge_t enEdgeSel)
  481. {
  482. en_result_t enResult = Ok;
  483. switch (enEdgeSel)
  484. {
  485. case 0: ///< 上升沿到上升沿(周期)
  486. M0P_TIM3_MODE1->M1CR_f.EDG1ST = 0; //上升沿
  487. M0P_TIM3_MODE1->M1CR_f.EDG2ND = 0; //上升沿
  488. break;
  489. case 1: ///< 下降沿到上升沿(低电平)
  490. M0P_TIM3_MODE1->M1CR_f.EDG1ST = 1; //下降沿
  491. M0P_TIM3_MODE1->M1CR_f.EDG2ND = 0; //上升沿
  492. break;
  493. case 2: ///< 上升沿到下降沿(高电平)
  494. M0P_TIM3_MODE1->M1CR_f.EDG1ST = 0; //上升沿
  495. M0P_TIM3_MODE1->M1CR_f.EDG2ND = 1; //下降沿
  496. break;
  497. case 3: ///< 下降沿到下降沿(周期)
  498. M0P_TIM3_MODE1->M1CR_f.EDG1ST = 1; //下降沿
  499. M0P_TIM3_MODE1->M1CR_f.EDG2ND = 1; //下降沿
  500. break;
  501. default:
  502. ;
  503. break;
  504. }
  505. return enResult;
  506. }
  507. /**
  508. *****************************************************************************
  509. ** \brief Timer3 启动运行(模式1)
  510. **
  511. **
  512. ** \param [in] none
  513. **
  514. ** \retval Ok or Error
  515. *****************************************************************************/
  516. en_result_t Tim3_M1_Run(void)
  517. {
  518. en_result_t enResult = Ok;
  519. M0P_TIM3_MODE1->M1CR_f.CTEN = TRUE;
  520. return enResult;
  521. }
  522. /**
  523. *****************************************************************************
  524. ** \brief Timer3 停止运行(模式1)
  525. **
  526. **
  527. ** \param [in] none
  528. **
  529. ** \retval Ok or Error
  530. *****************************************************************************/
  531. en_result_t Tim3_M1_Stop(void)
  532. {
  533. en_result_t enResult = Ok;
  534. M0P_TIM3_MODE1->M1CR_f.CTEN = FALSE;
  535. return enResult;
  536. }
  537. /**
  538. *****************************************************************************
  539. ** \brief Timer3 16位计数器初值设置(模式1)
  540. **
  541. **
  542. ** \param [in] u16Data 16位初值
  543. **
  544. ** \retval Ok or Error
  545. *****************************************************************************/
  546. en_result_t Tim3_M1_Cnt16Set(uint16_t u16Data)
  547. {
  548. en_result_t enResult = Ok;
  549. M0P_TIM3_MODE1->CNT_f.CNT = u16Data;
  550. return enResult;
  551. }
  552. /**
  553. *****************************************************************************
  554. ** \brief Timer3 16位计数值获取(模式1)
  555. **
  556. **
  557. ** \param [in] none
  558. **
  559. ** \retval 16bits计数值
  560. *****************************************************************************/
  561. uint16_t Tim3_M1_Cnt16Get(void)
  562. {
  563. uint16_t u16CntData = 0;
  564. u16CntData = M0P_TIM3_MODE1->CNT_f.CNT;
  565. return u16CntData;
  566. }
  567. /**
  568. *****************************************************************************
  569. ** \brief Timer3 脉冲宽度测量结果数值获取(模式1)
  570. **
  571. **
  572. ** \param [in] none
  573. **
  574. ** \retval 16bits脉冲宽度测量结果
  575. *****************************************************************************/
  576. uint16_t Tim3_M1_PWC_CapValueGet(void)
  577. {
  578. uint16_t u16CapData = 0;
  579. u16CapData = M0P_TIM3_MODE1->CCR0A_f.CCR0A;
  580. return u16CapData;
  581. }
  582. /**
  583. *****************************************************************************
  584. ** \brief Timer3 初始化配置(模式23)
  585. **
  586. **
  587. ** \param [in] pstcCfg 初始化配置结构体指针
  588. **
  589. ** \retval Ok or Error
  590. *****************************************************************************/
  591. en_result_t Tim3_Mode23_Init(stc_tim3_mode23_cfg_t* pstcCfg)
  592. {
  593. en_result_t enResult = Ok;
  594. M0P_TIM3_MODE23->M23CR_f.MODE = pstcCfg->enWorkMode;
  595. M0P_TIM3_MODE23->M23CR_f.PRS = pstcCfg->enPRS;
  596. M0P_TIM3_MODE23->M23CR_f.CT = pstcCfg->enCT;
  597. M0P_TIM3_MODE23->M23CR_f.COMP = pstcCfg->enPWMTypeSel;
  598. M0P_TIM3_MODE23->M23CR_f.PWM2S = pstcCfg->enPWM2sSel;
  599. M0P_TIM3_MODE23->M23CR_f.ONESHOT = pstcCfg->bOneShot;
  600. M0P_TIM3_MODE23->M23CR_f.URS = pstcCfg->bURSSel;
  601. M0P_TIM3_MODE23->M23CR_f.DIR = pstcCfg->enCntDir;
  602. return enResult;
  603. }
  604. /**
  605. *****************************************************************************
  606. ** \brief Timer3 PWM输出使能(模式23)
  607. **
  608. **
  609. ** \param [in] bEnOutput PWM输出使能/禁止设定
  610. ** \param [in] bEnAutoOutput PWM自动输出使能/禁止设定
  611. **
  612. ** \retval Ok or Error
  613. *****************************************************************************/
  614. en_result_t Tim3_M23_EnPWM_Output(boolean_t bEnOutput, boolean_t bEnAutoOutput)
  615. {
  616. en_result_t enResult = Ok;
  617. M0P_TIM3_MODE23->DTR_f.MOE = bEnOutput;
  618. M0P_TIM3_MODE23->DTR_f.AOE = bEnAutoOutput;
  619. return enResult;
  620. }
  621. /**
  622. *****************************************************************************
  623. ** \brief Timer3 启动运行(模式23)
  624. **
  625. **
  626. ** \param [in] none
  627. **
  628. ** \retval Ok or Error
  629. *****************************************************************************/
  630. en_result_t Tim3_M23_Run(void)
  631. {
  632. en_result_t enResult = Ok;
  633. M0P_TIM3_MODE23->M23CR_f.CTEN = TRUE;
  634. return enResult;
  635. }
  636. /**
  637. *****************************************************************************
  638. ** \brief Timer3 停止运行(模式23)
  639. **
  640. **
  641. ** \param [in] none
  642. **
  643. ** \retval Ok or Error
  644. *****************************************************************************/
  645. en_result_t Tim3_M23_Stop(void)
  646. {
  647. en_result_t enResult = Ok;
  648. M0P_TIM3_MODE23->M23CR_f.CTEN = FALSE;
  649. return enResult;
  650. }
  651. /**
  652. *****************************************************************************
  653. ** \brief Timer3 重载值设置(模式23)
  654. **
  655. **
  656. ** \param [in] u16Data 16bits重载值
  657. ** \param [in] bArrBufEn ARR重载缓存使能TRUE/禁止FALSE
  658. **
  659. ** \retval Ok or Error
  660. *****************************************************************************/
  661. en_result_t Tim3_M23_ARRSet(uint16_t u16Data, boolean_t bArrBufEn)
  662. {
  663. en_result_t enResult = Ok;
  664. M0P_TIM3_MODE23->ARR_f.ARR = u16Data;
  665. M0P_TIM3_MODE23->M23CR_f.BUFPEN = bArrBufEn;
  666. return enResult;
  667. }
  668. /**
  669. *****************************************************************************
  670. ** \brief Timer3 16位计数器初值设置(模式23)
  671. **
  672. **
  673. ** \param [in] u16Data 16位初值
  674. **
  675. ** \retval Ok or Error
  676. *****************************************************************************/
  677. en_result_t Tim3_M23_Cnt16Set(uint16_t u16Data)
  678. {
  679. en_result_t enResult = Ok;
  680. M0P_TIM3_MODE23->CNT_f.CNT = u16Data;
  681. return enResult;
  682. }
  683. /**
  684. *****************************************************************************
  685. ** \brief Timer3 16位计数值获取(模式23)
  686. **
  687. **
  688. ** \param [in] none
  689. **
  690. ** \retval 16bits计数值
  691. *****************************************************************************/
  692. uint16_t Tim3_M23_Cnt16Get(void)
  693. {
  694. uint16_t u16CntData = 0;
  695. u16CntData = M0P_TIM3_MODE23->CNT_f.CNT;
  696. return u16CntData;
  697. }
  698. /**
  699. *****************************************************************************
  700. ** \brief Timer3 比较捕获寄存器CCRxA/CCRxB设置(模式23)
  701. **
  702. **
  703. ** \param [in] enCCRSel CCRxA/CCRxB设定
  704. ** \param [in] u16Data CCRxA/CCRxB 16位初始值
  705. **
  706. ** \retval Ok or Error
  707. *****************************************************************************/
  708. en_result_t Tim3_M23_CCR_Set(en_tim3_m23_ccrx_t enCCRSel, uint16_t u16Data)
  709. {
  710. en_result_t enResult = Ok;
  711. if(Tim3CCR0A == enCCRSel)
  712. {
  713. M0P_TIM3_MODE23->CCR0A_f.CCR0A = u16Data;
  714. }
  715. else if(Tim3CCR0B == enCCRSel)
  716. {
  717. M0P_TIM3_MODE23->CCR0B_f.CCR0B = u16Data;
  718. }
  719. else if(Tim3CCR1A == enCCRSel)
  720. {
  721. M0P_TIM3_MODE23->CCR1A_f.CCR1A = u16Data;
  722. }
  723. else if(Tim3CCR1B == enCCRSel)
  724. {
  725. M0P_TIM3_MODE23->CCR1B_f.CCR1B = u16Data;
  726. }
  727. else if(Tim3CCR2A == enCCRSel)
  728. {
  729. M0P_TIM3_MODE23->CCR2A_f.CCR2A = u16Data;
  730. }
  731. else if(Tim3CCR2B == enCCRSel)
  732. {
  733. M0P_TIM3_MODE23->CCR2B_f.CCR2B = u16Data;
  734. }
  735. else
  736. {
  737. enResult = Error;
  738. }
  739. return enResult;
  740. }
  741. /**
  742. *****************************************************************************
  743. ** \brief Timer3 比较捕获寄存器CCRxA/CCRxB读取(模式23)
  744. **
  745. **
  746. ** \param [in] enCCRSel CCRxA/CCRxB设定
  747. **
  748. ** \retval 16bitsCCRxA/CCRxB捕获值
  749. *****************************************************************************/
  750. uint16_t Tim3_M23_CCR_Get(en_tim3_m23_ccrx_t enCCRSel)
  751. {
  752. uint16_t u16Data = 0;
  753. if(Tim3CCR0A == enCCRSel)
  754. {
  755. u16Data = M0P_TIM3_MODE23->CCR0A_f.CCR0A;
  756. }
  757. else if(Tim3CCR0B == enCCRSel)
  758. {
  759. u16Data = M0P_TIM3_MODE23->CCR0B_f.CCR0B;
  760. }
  761. else if(Tim3CCR1A == enCCRSel)
  762. {
  763. u16Data = M0P_TIM3_MODE23->CCR1A_f.CCR1A;
  764. }
  765. else if(Tim3CCR1B == enCCRSel)
  766. {
  767. u16Data = M0P_TIM3_MODE23->CCR1B_f.CCR1B;
  768. }
  769. else if(Tim3CCR2A == enCCRSel)
  770. {
  771. u16Data = M0P_TIM3_MODE23->CCR2A_f.CCR2A;
  772. }
  773. else if(Tim3CCR2B == enCCRSel)
  774. {
  775. u16Data = M0P_TIM3_MODE23->CCR2B_f.CCR2B;
  776. }
  777. else
  778. {
  779. u16Data = 0;
  780. }
  781. return u16Data;
  782. }
  783. /**
  784. *****************************************************************************
  785. ** \brief Timer3 PWM互补输出模式下,GATE功能选择(模式23)
  786. **
  787. **
  788. ** \param [in] pstcCfg 初始化配置结构体指针
  789. **
  790. ** \retval Ok or Error
  791. *****************************************************************************/
  792. en_result_t Tim3_M23_GateFuncSel(stc_tim3_m23_gate_cfg_t* pstcCfg)
  793. {
  794. en_result_t enResult = Ok;
  795. M0P_TIM3_MODE23->M23CR_f.CSG = pstcCfg->enGateFuncSel;
  796. M0P_TIM3_MODE23->M23CR_f.CRG = pstcCfg->bGateRiseCap;
  797. M0P_TIM3_MODE23->M23CR_f.CFG = pstcCfg->bGateFallCap;
  798. return enResult;
  799. }
  800. /**
  801. *****************************************************************************
  802. ** \brief Timer3 主从模式配置(模式23)
  803. **
  804. **
  805. ** \param [in] pstcCfg 初始化配置结构体指针
  806. **
  807. ** \retval Ok or Error
  808. *****************************************************************************/
  809. en_result_t Tim3_M23_MasterSlave_Set(stc_tim3_m23_master_slave_cfg_t* pstcCfg)
  810. {
  811. en_result_t enResult = Ok;
  812. M0P_TIM3_MODE23->MSCR_f.MSM = pstcCfg->enMasterSlaveSel;
  813. M0P_TIM3_MODE23->MSCR_f.MMS = pstcCfg->enMasterSrc;
  814. M0P_TIM3_MODE23->MSCR_f.SMS = pstcCfg->enSlaveModeSel;
  815. M0P_TIM3_MODE23->MSCR_f.TS = pstcCfg->enTsSel;
  816. return enResult;
  817. }
  818. /**
  819. *****************************************************************************
  820. ** \brief Timer3 CHxA/CHxB比较通道控制(模式23)
  821. **
  822. **
  823. ** \param [in] pstcCfg 初始化配置结构体指针
  824. ** \param [in] enTim3Chx Timer3通道(Tim3CH0, Tim3CH1, Tim3CH2)
  825. **
  826. ** \retval Ok or Error
  827. *****************************************************************************/
  828. en_result_t Tim3_M23_PortOutput_Cfg(en_tim3_channel_t enTim3Chx, stc_tim3_m23_compare_cfg_t* pstcCfg)
  829. {
  830. en_result_t enResult = Ok;
  831. switch (enTim3Chx)
  832. {
  833. case Tim3CH0:
  834. M0P_TIM3_MODE23->CRCH0_f.CSA = 0;
  835. M0P_TIM3_MODE23->FLTR_f.OCMA0_FLTA0 = pstcCfg->enCHxACmpCtrl;
  836. M0P_TIM3_MODE23->FLTR_f.CCPA0 = pstcCfg->enCHxAPolarity;
  837. M0P_TIM3_MODE23->CRCH0_f.BUFEA = pstcCfg->bCHxACmpBufEn;
  838. M0P_TIM3_MODE23->M23CR_f.CIS = pstcCfg->enCHxACmpIntSel;
  839. M0P_TIM3_MODE23->CRCH0_f.CSB = 0;
  840. M0P_TIM3_MODE23->FLTR_f.OCMB0_FLTB0 = pstcCfg->enCHxBCmpCtrl;
  841. M0P_TIM3_MODE23->FLTR_f.CCPB0 = pstcCfg->enCHxBPolarity;
  842. M0P_TIM3_MODE23->CRCH0_f.BUFEB = pstcCfg->bCHxBCmpBufEn;
  843. M0P_TIM3_MODE23->CRCH0_f.CISB = pstcCfg->enCHxBCmpIntSel;
  844. break;
  845. case Tim3CH1:
  846. M0P_TIM3_MODE23->CRCH1_f.CSA = 0;
  847. M0P_TIM3_MODE23->FLTR_f.OCMA1_FLTA1 = pstcCfg->enCHxACmpCtrl;
  848. M0P_TIM3_MODE23->FLTR_f.CCPA1 = pstcCfg->enCHxAPolarity;
  849. M0P_TIM3_MODE23->CRCH1_f.BUFEA = pstcCfg->bCHxACmpBufEn;
  850. M0P_TIM3_MODE23->M23CR_f.CIS = pstcCfg->enCHxACmpIntSel;
  851. M0P_TIM3_MODE23->CRCH1_f.CSB = 0;
  852. M0P_TIM3_MODE23->FLTR_f.OCMB1_FLTB1 = pstcCfg->enCHxBCmpCtrl;
  853. M0P_TIM3_MODE23->FLTR_f.CCPB1 = pstcCfg->enCHxBPolarity;
  854. M0P_TIM3_MODE23->CRCH1_f.BUFEB = pstcCfg->bCHxBCmpBufEn;
  855. M0P_TIM3_MODE23->CRCH1_f.CISB = pstcCfg->enCHxBCmpIntSel;
  856. break;
  857. case Tim3CH2:
  858. M0P_TIM3_MODE23->CRCH2_f.CSA = 0;
  859. M0P_TIM3_MODE23->FLTR_f.OCMA2_FLTA2 = pstcCfg->enCHxACmpCtrl;
  860. M0P_TIM3_MODE23->FLTR_f.CCPA2 = pstcCfg->enCHxAPolarity;
  861. M0P_TIM3_MODE23->CRCH2_f.BUFEA = pstcCfg->bCHxACmpBufEn;
  862. M0P_TIM3_MODE23->M23CR_f.CIS = pstcCfg->enCHxACmpIntSel;
  863. M0P_TIM3_MODE23->CRCH2_f.CSB = 0;
  864. M0P_TIM3_MODE23->FLTR_f.OCMB2_FLTB2 = pstcCfg->enCHxBCmpCtrl;
  865. M0P_TIM3_MODE23->FLTR_f.CCPB2 = pstcCfg->enCHxBPolarity;
  866. M0P_TIM3_MODE23->CRCH2_f.BUFEB = pstcCfg->bCHxBCmpBufEn;
  867. M0P_TIM3_MODE23->CRCH2_f.CISB = pstcCfg->enCHxBCmpIntSel;
  868. break;
  869. default:
  870. enResult = Error;
  871. break;
  872. }
  873. return enResult;
  874. }
  875. /**
  876. *****************************************************************************
  877. ** \brief Timer3 CHxA/CHxB输入控制(模式23)
  878. **
  879. **
  880. ** \param [in] pstcCfg 初始化配置结构体指针
  881. ** \param [in] enTim3Chx Timer3通道(Tim3CH0, Tim3CH1, Tim3CH2)
  882. **
  883. ** \retval Ok or Error
  884. *****************************************************************************/
  885. en_result_t Tim3_M23_PortInput_Cfg(en_tim3_channel_t enTim3Chx, stc_tim3_m23_input_cfg_t* pstcCfg)
  886. {
  887. en_result_t enResult = Ok;
  888. switch (enTim3Chx)
  889. {
  890. case Tim3CH0:
  891. M0P_TIM3_MODE23->CRCH0_f.CSA = 1;
  892. M0P_TIM3_MODE23->CRCH0_f.CFA_CRA_BKSA = pstcCfg->enCHxACapSel;
  893. M0P_TIM3_MODE23->FLTR_f.OCMA0_FLTA0 = pstcCfg->enCHxAInFlt;
  894. M0P_TIM3_MODE23->FLTR_f.CCPA0 = pstcCfg->enCHxAPolarity;
  895. M0P_TIM3_MODE23->CRCH0_f.CSB = 1;
  896. M0P_TIM3_MODE23->CRCH0_f.CFB_CRB_BKSB = pstcCfg->enCHxBCapSel;
  897. M0P_TIM3_MODE23->FLTR_f.OCMB0_FLTB0 = pstcCfg->enCHxBInFlt;
  898. M0P_TIM3_MODE23->FLTR_f.CCPB0 = pstcCfg->enCHxBPolarity;
  899. break;
  900. case Tim3CH1:
  901. M0P_TIM3_MODE23->CRCH1_f.CSA = 1;
  902. M0P_TIM3_MODE23->CRCH1_f.CFA_CRA_BKSA = pstcCfg->enCHxACapSel;
  903. M0P_TIM3_MODE23->FLTR_f.OCMA1_FLTA1 = pstcCfg->enCHxAInFlt;
  904. M0P_TIM3_MODE23->FLTR_f.CCPA1 = pstcCfg->enCHxAPolarity;
  905. M0P_TIM3_MODE23->CRCH1_f.CSB = 1;
  906. M0P_TIM3_MODE23->CRCH1_f.CFB_CRB_BKSB = pstcCfg->enCHxBCapSel;
  907. M0P_TIM3_MODE23->FLTR_f.OCMB1_FLTB1 = pstcCfg->enCHxBInFlt;
  908. M0P_TIM3_MODE23->FLTR_f.CCPB1 = pstcCfg->enCHxBPolarity;
  909. break;
  910. case Tim3CH2:
  911. M0P_TIM3_MODE23->CRCH2_f.CSA = 1;
  912. M0P_TIM3_MODE23->CRCH2_f.CFA_CRA_BKSA = pstcCfg->enCHxACapSel;
  913. M0P_TIM3_MODE23->FLTR_f.OCMA2_FLTA2 = pstcCfg->enCHxAInFlt;
  914. M0P_TIM3_MODE23->FLTR_f.CCPA2 = pstcCfg->enCHxAPolarity;
  915. M0P_TIM3_MODE23->CRCH2_f.CSB = 1;
  916. M0P_TIM3_MODE23->CRCH2_f.CFB_CRB_BKSB = pstcCfg->enCHxBCapSel;
  917. M0P_TIM3_MODE23->FLTR_f.OCMB2_FLTB2 = pstcCfg->enCHxBInFlt;
  918. M0P_TIM3_MODE23->FLTR_f.CCPB2 = pstcCfg->enCHxBPolarity;
  919. break;
  920. default:
  921. enResult = Error;
  922. break;
  923. }
  924. return enResult;
  925. }
  926. /**
  927. *****************************************************************************
  928. ** \brief Timer3 ERT输入控制(模式23)
  929. **
  930. **
  931. ** \param [in] pstcCfg 初始化配置结构体指针
  932. **
  933. ** \retval Ok or Error
  934. *****************************************************************************/
  935. en_result_t Tim3_M23_ETRInput_Cfg(stc_tim3_m23_etr_input_cfg_t* pstcCfg)
  936. {
  937. en_result_t enResult = Ok;
  938. M0P_TIM3_MODE23->FLTR_f.ETP = pstcCfg->enETRPolarity;
  939. M0P_TIM3_MODE23->FLTR_f.FLTET = pstcCfg->enETRFlt;
  940. return enResult;
  941. }
  942. /**
  943. *****************************************************************************
  944. ** \brief Timer3 刹车BK输入控制(模式23)
  945. **
  946. **
  947. ** \param [in] pstcBkCfg 初始化配置结构体指针
  948. **
  949. ** \retval Ok or Error
  950. *****************************************************************************/
  951. en_result_t Tim3_M23_BrakeInput_Cfg(stc_tim3_m23_bk_input_cfg_t* pstcBkCfg)
  952. {
  953. en_result_t enResult = Ok;
  954. M0P_TIM3_MODE23->DTR_f.BKE = pstcBkCfg->bEnBrake;
  955. M0P_TIM3_MODE23->DTR_f.VCE = pstcBkCfg->bEnVCBrake;
  956. M0P_TIM3_MODE23->DTR_f.SAFEEN = pstcBkCfg->bEnSafetyBk;
  957. M0P_TIM3_MODE23->DTR_f.BKSEL = pstcBkCfg->bEnBKSync;
  958. M0P_TIM3_MODE23->CRCH0_f.CFA_CRA_BKSA = pstcBkCfg->enBkCH0AStat;
  959. M0P_TIM3_MODE23->CRCH0_f.CFB_CRB_BKSB = pstcBkCfg->enBkCH0BStat;
  960. M0P_TIM3_MODE23->CRCH1_f.CFA_CRA_BKSA = pstcBkCfg->enBkCH1AStat;
  961. M0P_TIM3_MODE23->CRCH1_f.CFB_CRB_BKSB = pstcBkCfg->enBkCH1BStat;
  962. M0P_TIM3_MODE23->CRCH2_f.CFA_CRA_BKSA = pstcBkCfg->enBkCH2AStat;
  963. M0P_TIM3_MODE23->CRCH2_f.CFB_CRB_BKSB = pstcBkCfg->enBkCH2BStat;
  964. M0P_TIM3_MODE23->FLTR_f.BKP = pstcBkCfg->enBrakePolarity;
  965. M0P_TIM3_MODE23->FLTR_f.FLTBK = pstcBkCfg->enBrakeFlt;
  966. return enResult;
  967. }
  968. /**
  969. *****************************************************************************
  970. ** \brief Base Timer3 触发ADC控制(模式23)
  971. **
  972. **
  973. ** \param [in] pstcCfg 初始化配置结构体指针
  974. **
  975. ** \retval Ok or Error
  976. *****************************************************************************/
  977. en_result_t Tim3_M23_TrigADC_Cfg(stc_tim3_m23_adc_trig_cfg_t* pstcCfg)
  978. {
  979. en_result_t enResult = Ok;
  980. M0P_TIM3_MODE23->ADTR_f.ADTE = pstcCfg->bEnTrigADC;
  981. M0P_TIM3_MODE23->ADTR_f.UEVE = pstcCfg->bEnUevTrigADC;
  982. M0P_TIM3_MODE23->ADTR_f.CMA0E = pstcCfg->bEnCH0ACmpTrigADC;
  983. M0P_TIM3_MODE23->ADTR_f.CMB0E = pstcCfg->bEnCH0BCmpTrigADC;
  984. M0P_TIM3_MODE23->ADTR_f.CMA1E = pstcCfg->bEnCH1ACmpTrigADC;
  985. M0P_TIM3_MODE23->ADTR_f.CMB1E = pstcCfg->bEnCH1BCmpTrigADC;
  986. M0P_TIM3_MODE23->ADTR_f.CMA2E = pstcCfg->bEnCH2ACmpTrigADC;
  987. M0P_TIM3_MODE23->ADTR_f.CMB2E = pstcCfg->bEnCH2BCmpTrigADC;
  988. return enResult;
  989. }
  990. /**
  991. *****************************************************************************
  992. ** \brief Timer3 死区功能(模式23)
  993. **
  994. **
  995. ** \param [in] pstcCfg 初始化配置结构体指针
  996. **
  997. ** \retval Ok or Error
  998. *****************************************************************************/
  999. en_result_t Tim3_M23_DT_Cfg(stc_tim3_m23_dt_cfg_t* pstcCfg)
  1000. {
  1001. en_result_t enResult = Ok;
  1002. M0P_TIM3_MODE23->DTR_f.DTEN = pstcCfg->bEnDeadTime;
  1003. M0P_TIM3_MODE23->DTR_f.DTR = pstcCfg->u8DeadTimeValue;
  1004. return enResult;
  1005. }
  1006. /**
  1007. *****************************************************************************
  1008. ** \brief Timer3 重复周期设置(模式23)
  1009. **
  1010. **
  1011. ** \param [in] u8ValidPeriod 重复周期值
  1012. **
  1013. ** \retval Ok or Error
  1014. *****************************************************************************/
  1015. en_result_t Tim3_M23_SetValidPeriod(uint8_t u8ValidPeriod)
  1016. {
  1017. en_result_t enResult = Ok;
  1018. M0P_TIM3_MODE23->RCR_f.RCR = u8ValidPeriod;
  1019. return enResult;
  1020. }
  1021. /**
  1022. *****************************************************************************
  1023. ** \brief Timer3 OCREF清除功能(模式23)
  1024. **
  1025. **
  1026. ** \param [in] pstcCfg 初始化配置结构体指针
  1027. **
  1028. ** \retval Ok or Error
  1029. *****************************************************************************/
  1030. en_result_t Tim3_M23_OCRefClr(stc_tim3_m23_OCREF_Clr_cfg_t* pstcCfg)
  1031. {
  1032. en_result_t enResult = Ok;
  1033. M0P_TIM3_MODE23->M23CR_f.OCCS = pstcCfg->enOCRefClrSrcSel;
  1034. M0P_TIM3_MODE23->M23CR_f.OCCE = pstcCfg->bVCClrEn;
  1035. return enResult;
  1036. }
  1037. /**
  1038. *****************************************************************************
  1039. ** \brief Timer3 使能DMA传输(模式23)
  1040. **
  1041. **
  1042. ** \param [in] pstcCfg 初始化配置结构体指针
  1043. **
  1044. ** \retval Ok or Error
  1045. *****************************************************************************/
  1046. en_result_t Tim3_M23_EnDMA(stc_tim3_m23_trig_dma_cfg_t* pstcCfg)
  1047. {
  1048. en_result_t enResult = Ok;
  1049. M0P_TIM3_MODE23->M23CR_f.UDE = pstcCfg->bUevTrigDMA;
  1050. M0P_TIM3_MODE23->M23CR_f.TDE = pstcCfg->bTITrigDMA;
  1051. M0P_TIM3_MODE23->CRCH0_f.CDEA = pstcCfg->bCmpA0TrigDMA;
  1052. M0P_TIM3_MODE23->CRCH0_f.CDEB = pstcCfg->bCmpB0TrigDMA;
  1053. M0P_TIM3_MODE23->CRCH1_f.CDEA = pstcCfg->bCmpA1TrigDMA;
  1054. M0P_TIM3_MODE23->CRCH1_f.CDEB = pstcCfg->bCmpB1TrigDMA;
  1055. M0P_TIM3_MODE23->CRCH2_f.CDEA = pstcCfg->bCmpA2TrigDMA;
  1056. M0P_TIM3_MODE23->CRCH2_f.CDEB = pstcCfg->bCmpB2TrigDMA;
  1057. M0P_TIM3_MODE23->MSCR_f.CCDS = pstcCfg->enCmpUevTrigDMA;
  1058. return enResult;
  1059. }
  1060. /**
  1061. *****************************************************************************
  1062. ** \brief Timer3 捕获比较A软件触发(模式23)
  1063. **
  1064. **
  1065. ** \param [in] enTim3Chx Timer3通道(Tim3CH0, Tim3CH1, Tim3CH2)
  1066. **
  1067. ** \retval Ok or Error
  1068. *****************************************************************************/
  1069. en_result_t Tim3_M23_EnSwTrigCapCmpA(en_tim3_channel_t enTim3Chx)
  1070. {
  1071. en_result_t enResult = Ok;
  1072. if(Tim3CH0 == enTim3Chx)
  1073. {
  1074. M0P_TIM3_MODE23->CRCH0_f.CCGA = TRUE;
  1075. }
  1076. else if(Tim3CH1 == enTim3Chx)
  1077. {
  1078. M0P_TIM3_MODE23->CRCH1_f.CCGA = TRUE;
  1079. }
  1080. else if(Tim3CH2 == enTim3Chx)
  1081. {
  1082. M0P_TIM3_MODE23->CRCH2_f.CCGA = TRUE;
  1083. }
  1084. else
  1085. {
  1086. enResult = Error;
  1087. }
  1088. return enResult;
  1089. }
  1090. /**
  1091. *****************************************************************************
  1092. ** \brief Timer3 捕获比较B软件触发(模式23)
  1093. **
  1094. **
  1095. ** \param [in] enTim3Chx Timer3通道(Tim3CH0, Tim3CH1, Tim3CH2)
  1096. **
  1097. ** \retval Ok or Error
  1098. *****************************************************************************/
  1099. en_result_t Tim3_M23_EnSwTrigCapCmpB(en_tim3_channel_t enTim3Chx)
  1100. {
  1101. en_result_t enResult = Ok;
  1102. if(Tim3CH0 == enTim3Chx)
  1103. {
  1104. M0P_TIM3_MODE23->CRCH0_f.CCGB = TRUE;
  1105. }
  1106. else if(Tim3CH1 == enTim3Chx)
  1107. {
  1108. M0P_TIM3_MODE23->CRCH1_f.CCGB = TRUE;
  1109. }
  1110. else if(Tim3CH2 == enTim3Chx)
  1111. {
  1112. M0P_TIM3_MODE23->CRCH2_f.CCGB = TRUE;
  1113. }
  1114. else
  1115. {
  1116. enResult = Error;
  1117. }
  1118. return enResult;
  1119. }
  1120. /**
  1121. *****************************************************************************
  1122. ** \brief Timer3 软件更新使能(模式23)
  1123. **
  1124. **
  1125. ** \param [in] none
  1126. **
  1127. ** \retval Ok or Error
  1128. *****************************************************************************/
  1129. en_result_t Tim3_M23_EnSwUev(void)
  1130. {
  1131. en_result_t enResult = Ok;
  1132. M0P_TIM3_MODE23->M23CR_f.UG = TRUE;
  1133. return enResult;
  1134. }
  1135. /**
  1136. *****************************************************************************
  1137. ** \brief Timer3 软件触发使能(模式23)
  1138. **
  1139. **
  1140. ** \param [in] none
  1141. **
  1142. ** \retval Ok or Error
  1143. *****************************************************************************/
  1144. en_result_t Tim3_M23_EnSwTrig(void)
  1145. {
  1146. en_result_t enResult = Ok;
  1147. M0P_TIM3_MODE23->M23CR_f.TG = TRUE;
  1148. return enResult;
  1149. }
  1150. /**
  1151. *****************************************************************************
  1152. ** \brief Timer3 软件刹车使能(模式23)
  1153. **
  1154. **
  1155. ** \param [in] none
  1156. **
  1157. ** \retval Ok or Error
  1158. *****************************************************************************/
  1159. en_result_t Tim3_M23_EnSwBk(void)
  1160. {
  1161. en_result_t enResult = Ok;
  1162. M0P_TIM3_MODE23->M23CR_f.BG = TRUE;
  1163. return enResult;
  1164. }
  1165. //@} // Tim3Group
  1166. /*******************************************************************************
  1167. * EOF (not truncated)
  1168. ******************************************************************************/