timer0.c 44 KB

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