timer3.c 44 KB

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