pca.c 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834
  1. /******************************************************************************
  2. *Copyright(C)2017, 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 pca.c
  43. **
  44. ** Common API of PCA.
  45. ** @link pcaGroup Some description @endlink
  46. **
  47. ** - 2018-04-16 Husj First version
  48. **
  49. ******************************************************************************/
  50. /*******************************************************************************
  51. * Include files
  52. ******************************************************************************/
  53. #include "pca.h"
  54. /**
  55. *******************************************************************************
  56. ** \addtogroup PcaGroup
  57. ******************************************************************************/
  58. //@{
  59. /*******************************************************************************
  60. * Local pre-processor symbols/macros ('#define')
  61. ******************************************************************************/
  62. #define IS_VALID_MODULE(x) (Module0 == (x) ||\
  63. Module1 == (x) ||\
  64. Module2 == (x) ||\
  65. Module3 == (x) ||\
  66. Module4 == (x))
  67. /*******************************************************************************
  68. * Global variable definitions (declared in header file with 'extern')
  69. ******************************************************************************/
  70. /*******************************************************************************
  71. * Local type definitions ('typedef')
  72. ******************************************************************************/
  73. /*******************************************************************************
  74. * Local variable definitions ('static')
  75. ******************************************************************************/
  76. /*******************************************************************************
  77. * Local function prototypes ('static')
  78. ******************************************************************************/
  79. static func_ptr_t pfnPcaCallback = NULL;
  80. /*******************************************************************************
  81. * Function implementation - global ('extern') and local ('static')
  82. ******************************************************************************/
  83. /**
  84. *****************************************************************************
  85. ** \brief PCA中断标志获取
  86. **
  87. **
  88. ** \param [in] enModule PCA模块选择(Module0、Module1、Module2、Module3、Module4)
  89. **
  90. ** \retval TRUE or FALSE
  91. *****************************************************************************/
  92. boolean_t Pca_GetIntFlag(en_pca_module_t enModule)
  93. {
  94. boolean_t bRetVal = FALSE;
  95. ASSERT(IS_VALID_MODULE(enModule));
  96. switch (enModule)
  97. {
  98. case Module0:
  99. bRetVal = M0P_PCA->CCON_f.CCF0 ? TRUE : FALSE;
  100. break;
  101. case Module1:
  102. bRetVal = M0P_PCA->CCON_f.CCF1 ? TRUE : FALSE;
  103. break;
  104. case Module2:
  105. bRetVal = M0P_PCA->CCON_f.CCF2 ? TRUE : FALSE;
  106. break;
  107. case Module3:
  108. bRetVal = M0P_PCA->CCON_f.CCF3 ? TRUE : FALSE;
  109. break;
  110. case Module4:
  111. bRetVal = M0P_PCA->CCON_f.CCF4 ? TRUE : FALSE;
  112. break;
  113. default:
  114. bRetVal = FALSE;
  115. break;
  116. }
  117. return bRetVal;
  118. }
  119. /**
  120. *****************************************************************************
  121. ** \brief PCA计数中断标志获取
  122. **
  123. **
  124. **
  125. ** \retval TRUE or FALSE
  126. *****************************************************************************/
  127. boolean_t Pca_GetCntIntFlag(void)
  128. {
  129. boolean_t bRetVal = FALSE;
  130. bRetVal = M0P_PCA->CCON_f.CF ? TRUE : FALSE;
  131. return bRetVal;
  132. }
  133. /**
  134. *****************************************************************************
  135. ** \brief PCA中断标志清除
  136. **
  137. **
  138. ** \param [in] enModule PCA模块选择(Module0、Module1、Module2、Module3、Module4)
  139. **
  140. ** \retval Ok or Error
  141. *****************************************************************************/
  142. en_result_t Pca_ClearIntFlag(en_pca_module_t enModule)
  143. {
  144. en_result_t enResult = Error;
  145. ASSERT(IS_VALID_MODULE(enModule));
  146. switch (enModule)
  147. {
  148. case Module0:
  149. M0P_PCA->ICLR_f.CCF0 = FALSE;
  150. enResult = Ok;
  151. break;
  152. case Module1:
  153. M0P_PCA->ICLR_f.CCF1 = FALSE;
  154. enResult = Ok;
  155. break;
  156. case Module2:
  157. M0P_PCA->ICLR_f.CCF2 = FALSE;
  158. enResult = Ok;
  159. break;
  160. case Module3:
  161. M0P_PCA->ICLR_f.CCF3 = FALSE;
  162. enResult = Ok;
  163. break;
  164. case Module4:
  165. M0P_PCA->ICLR_f.CCF4 = FALSE;
  166. enResult = Ok;
  167. break;
  168. default:
  169. enResult = Error;
  170. break;
  171. }
  172. return enResult;
  173. }
  174. /**
  175. *****************************************************************************
  176. ** \brief PCA计数中断标志清除
  177. **
  178. **
  179. **
  180. ** \retval Ok or Error
  181. *****************************************************************************/
  182. en_result_t Pca_ClearCntIntFlag(void)
  183. {
  184. en_result_t enResult = Error;
  185. M0P_PCA->ICLR_f.CF = FALSE;
  186. enResult = Ok;
  187. return enResult;
  188. }
  189. /**
  190. *****************************************************************************
  191. ** \brief PCA中断服务程序
  192. **
  193. **
  194. ** \param [in] u8Param == 0
  195. **
  196. *****************************************************************************/
  197. void Pca_IRQHandler(uint8_t u8Param)
  198. {
  199. if(NULL != pfnPcaCallback)
  200. {
  201. pfnPcaCallback();
  202. }
  203. }
  204. /**
  205. *****************************************************************************
  206. ** \brief PCA中断使能
  207. **
  208. **
  209. ** \param [in] enModule PCA模块选择(Module0、Module1、Module2、Module3、Module4)
  210. **
  211. ** \retval Ok or Error
  212. *****************************************************************************/
  213. en_result_t Pca_EnableIrq(en_pca_module_t enModule)
  214. {
  215. en_result_t enResult = Error;
  216. ASSERT(IS_VALID_MODULE(enModule));
  217. switch (enModule)
  218. {
  219. case Module0:
  220. M0P_PCA->CCAPM0_f.CCIE = TRUE;
  221. enResult = Ok;
  222. break;
  223. case Module1:
  224. M0P_PCA->CCAPM1_f.CCIE = TRUE;
  225. enResult = Ok;
  226. break;
  227. case Module2:
  228. M0P_PCA->CCAPM2_f.CCIE = TRUE;
  229. enResult = Ok;
  230. break;
  231. case Module3:
  232. M0P_PCA->CCAPM3_f.CCIE = TRUE;
  233. enResult = Ok;
  234. break;
  235. case Module4:
  236. M0P_PCA->CCAPM4_f.CCIE = TRUE;
  237. enResult = Ok;
  238. break;
  239. default:
  240. enResult = Error;
  241. break;
  242. }
  243. return enResult;
  244. }
  245. /**
  246. *****************************************************************************
  247. ** \brief PCA计数中断使能
  248. **
  249. **
  250. **
  251. **
  252. ** \retval Ok or Error
  253. *****************************************************************************/
  254. en_result_t Pca_EnableCntIrq (void)
  255. {
  256. en_result_t enResult = Error;
  257. M0P_PCA->CMOD_f.CFIE = TRUE;
  258. enResult = Ok;
  259. return enResult;
  260. }
  261. /**
  262. *****************************************************************************
  263. ** \brief PCA中断禁止
  264. **
  265. **
  266. ** \param [in] enModule PCA模块选择(Module0、Module1、Module2、Module3、Module4)
  267. **
  268. ** \retval Ok or Error
  269. *****************************************************************************/
  270. en_result_t Pca_DisableIrq(en_pca_module_t enModule)
  271. {
  272. en_result_t enResult = Error;
  273. ASSERT(IS_VALID_MODULE(enModule));
  274. switch (enModule)
  275. {
  276. case Module0:
  277. M0P_PCA->CCAPM0_f.CCIE = FALSE;
  278. enResult = Ok;
  279. break;
  280. case Module1:
  281. M0P_PCA->CCAPM1_f.CCIE = FALSE;
  282. enResult = Ok;
  283. break;
  284. case Module2:
  285. M0P_PCA->CCAPM2_f.CCIE = FALSE;
  286. enResult = Ok;
  287. break;
  288. case Module3:
  289. M0P_PCA->CCAPM3_f.CCIE = FALSE;
  290. enResult = Ok;
  291. break;
  292. case Module4:
  293. M0P_PCA->CCAPM4_f.CCIE = FALSE;
  294. enResult = Ok;
  295. break;
  296. default:
  297. enResult = Error;
  298. break;
  299. }
  300. return enResult;
  301. }
  302. /**
  303. *****************************************************************************
  304. ** \brief PCA计数中断禁止
  305. **
  306. **
  307. **
  308. **
  309. ** \retval Ok or Error
  310. *****************************************************************************/
  311. en_result_t Pca_DisableCntIrq(void)
  312. {
  313. en_result_t enResult = Error;
  314. M0P_PCA->CMOD_f.CFIE = FALSE;
  315. enResult = Ok;
  316. return enResult;
  317. }
  318. /**
  319. *****************************************************************************
  320. ** \brief PCA初始化配置
  321. **
  322. **
  323. ** \param [in] pstcConfig PCA模块配置结构体指针
  324. **
  325. ** \retval Ok or Error
  326. *****************************************************************************/
  327. en_result_t Pca_Init(stc_pca_config_t* pstcConfig)
  328. {
  329. en_result_t enResult = Error;
  330. M0P_PCA->CMOD_f.CIDL = pstcConfig->enCIDL;
  331. M0P_PCA->CMOD_f.WDTE = pstcConfig->enWDTE;
  332. M0P_PCA->CMOD_f.CPS = pstcConfig->enCPS;
  333. pfnPcaCallback = pstcConfig->pfnPcaCb;
  334. enResult = Ok;
  335. return enResult;
  336. }
  337. /**
  338. *****************************************************************************
  339. ** \brief PCA模式配置
  340. **
  341. **
  342. ** \param [in] enModule PCA模块选择(Module0、Module1、Module2、Module3、Module4)
  343. ** \param [in] pstcCapMod PCA模式配置结构体指针
  344. **
  345. ** \retval Ok or Error
  346. *****************************************************************************/
  347. en_result_t Pca_CapModConfig(en_pca_module_t enModule, stc_pca_capmodconfig_t* pstcCapMod)
  348. {
  349. en_result_t enResult = Error;
  350. ASSERT(IS_VALID_MODULE(enModule));
  351. switch (enModule)
  352. {
  353. case Module0:
  354. {
  355. M0P_PCA->CCAPM0_f.ECOM = pstcCapMod->enECOM;
  356. M0P_PCA->CCAPM0_f.CAPP = pstcCapMod->enCAPP;
  357. M0P_PCA->CCAPM0_f.CAPN = pstcCapMod->enCAPN;
  358. M0P_PCA->CCAPM0_f.MAT = pstcCapMod->enMAT;
  359. M0P_PCA->CCAPM0_f.TOG = pstcCapMod->enTOG;
  360. M0P_PCA->CCAPM0_f.PWM = pstcCapMod->en8bitPWM;
  361. enResult = Ok;
  362. }
  363. break;
  364. case Module1:
  365. {
  366. M0P_PCA->CCAPM1_f.ECOM = pstcCapMod->enECOM;
  367. M0P_PCA->CCAPM1_f.CAPP = pstcCapMod->enCAPP;
  368. M0P_PCA->CCAPM1_f.CAPN = pstcCapMod->enCAPN;
  369. M0P_PCA->CCAPM1_f.MAT = pstcCapMod->enMAT;
  370. M0P_PCA->CCAPM1_f.TOG = pstcCapMod->enTOG;
  371. M0P_PCA->CCAPM1_f.PWM = pstcCapMod->en8bitPWM;
  372. enResult = Ok;
  373. }
  374. break;
  375. case Module2:
  376. {
  377. M0P_PCA->CCAPM2_f.ECOM = pstcCapMod->enECOM;
  378. M0P_PCA->CCAPM2_f.CAPP = pstcCapMod->enCAPP;
  379. M0P_PCA->CCAPM2_f.CAPN = pstcCapMod->enCAPN;
  380. M0P_PCA->CCAPM2_f.MAT = pstcCapMod->enMAT;
  381. M0P_PCA->CCAPM2_f.TOG = pstcCapMod->enTOG;
  382. M0P_PCA->CCAPM2_f.PWM = pstcCapMod->en8bitPWM;
  383. enResult = Ok;
  384. }
  385. break;
  386. case Module3:
  387. {
  388. M0P_PCA->CCAPM3_f.ECOM = pstcCapMod->enECOM;
  389. M0P_PCA->CCAPM3_f.CAPP = pstcCapMod->enCAPP;
  390. M0P_PCA->CCAPM3_f.CAPN = pstcCapMod->enCAPN;
  391. M0P_PCA->CCAPM3_f.MAT = pstcCapMod->enMAT;
  392. M0P_PCA->CCAPM3_f.TOG = pstcCapMod->enTOG;
  393. M0P_PCA->CCAPM3_f.PWM = pstcCapMod->en8bitPWM;
  394. enResult = Ok;
  395. }
  396. break;
  397. case Module4:
  398. {
  399. M0P_PCA->CCAPM4_f.ECOM = pstcCapMod->enECOM;
  400. M0P_PCA->CCAPM4_f.CAPP = pstcCapMod->enCAPP;
  401. M0P_PCA->CCAPM4_f.CAPN = pstcCapMod->enCAPN;
  402. M0P_PCA->CCAPM4_f.MAT = pstcCapMod->enMAT;
  403. M0P_PCA->CCAPM4_f.TOG = pstcCapMod->enTOG;
  404. M0P_PCA->CCAPM4_f.PWM = pstcCapMod->en8bitPWM;
  405. enResult = Ok;
  406. }
  407. break;
  408. default:
  409. enResult = Error;
  410. break;
  411. }
  412. return enResult;
  413. }
  414. /**
  415. *****************************************************************************
  416. ** \brief PCA启动运行
  417. **
  418. **
  419. **
  420. **
  421. ** \retval Ok or Error
  422. *****************************************************************************/
  423. en_result_t Pca_Run(void)
  424. {
  425. en_result_t enResult = Error;
  426. M0P_PCA->CCON_f.CR = TRUE;
  427. enResult = Ok;
  428. return enResult;
  429. }
  430. /**
  431. *****************************************************************************
  432. ** \brief PCA停止运行
  433. **
  434. **
  435. **
  436. **
  437. ** \retval Ok or Error
  438. *****************************************************************************/
  439. en_result_t Pca_Stop(void)
  440. {
  441. en_result_t enResult = Error;
  442. M0P_PCA->CCON_f.CR = FALSE;
  443. enResult = Ok;
  444. return enResult;
  445. }
  446. /**
  447. *****************************************************************************
  448. ** \brief PCA16位比较数据设置
  449. **
  450. **
  451. ** \param [in] enModule PCA模块选择(Module0、Module1、Module2、Module3、Module4)
  452. ** \param [in] u16Data PCA捕获数据
  453. **
  454. ** \retval Ok or Error
  455. *****************************************************************************/
  456. en_result_t Pca_CmpData16Set(en_pca_module_t enModule, uint16_t u16Data)
  457. {
  458. en_result_t enResult = Error;
  459. ASSERT(IS_VALID_MODULE(enModule));
  460. switch (enModule)
  461. {
  462. case Module0:
  463. M0P_PCA->CCAP0_f.CCAP0 = u16Data;
  464. enResult = Ok;
  465. break;
  466. case Module1:
  467. M0P_PCA->CCAP1_f.CCAP1 = u16Data;
  468. enResult = Ok;
  469. break;
  470. case Module2:
  471. M0P_PCA->CCAP2_f.CCAP2 = u16Data;
  472. enResult = Ok;
  473. break;
  474. case Module3:
  475. M0P_PCA->CCAP3_f.CCAP3 = u16Data;
  476. enResult = Ok;
  477. break;
  478. case Module4:
  479. M0P_PCA->CCAP4_f.CCAP4 = u16Data;
  480. enResult = Ok;
  481. break;
  482. default:
  483. enResult = Error;
  484. break;
  485. }
  486. return enResult;
  487. }
  488. /**
  489. *****************************************************************************
  490. ** \brief PCA16位捕获数据获取
  491. **
  492. **
  493. ** \param [in] enModule PCA模块选择(Module0、Module1、Module2、Module3、Module4)
  494. **
  495. ** \retval u16Data
  496. *****************************************************************************/
  497. uint16_t Pca_CapData16Get(en_pca_module_t enModule)
  498. {
  499. uint16_t u16Data = 0;
  500. ASSERT(IS_VALID_MODULE(enModule));
  501. switch (enModule)
  502. {
  503. case Module0:
  504. u16Data = M0P_PCA->CCAP0_f.CCAP0;
  505. break;
  506. case Module1:
  507. u16Data = M0P_PCA->CCAP1_f.CCAP1;
  508. break;
  509. case Module2:
  510. u16Data = M0P_PCA->CCAP2_f.CCAP2;
  511. break;
  512. case Module3:
  513. u16Data = M0P_PCA->CCAP3_f.CCAP3;
  514. break;
  515. case Module4:
  516. u16Data = M0P_PCA->CCAP4_f.CCAP4;
  517. break;
  518. default:
  519. u16Data = 0;
  520. break;
  521. }
  522. return u16Data;
  523. }
  524. /**
  525. *****************************************************************************
  526. ** \brief PCA高8位比较数据设置
  527. **
  528. **
  529. ** \param [in] enModule PCA模块选择(Module0、Module1、Module2、Module3、Module4)
  530. ** \param [in] u8Data PCA高8位捕获数据
  531. **
  532. ** \retval Ok or Error
  533. *****************************************************************************/
  534. en_result_t Pca_CmpDataHSet(en_pca_module_t enModule, uint8_t u8Data)
  535. {
  536. en_result_t enResult = Error;
  537. ASSERT(IS_VALID_MODULE(enModule));
  538. switch (enModule)
  539. {
  540. case Module0:
  541. M0P_PCA->CCAP0H_f.CCAP0 = u8Data;
  542. enResult = Ok;
  543. break;
  544. case Module1:
  545. M0P_PCA->CCAP1H_f.CCAP1 = u8Data;
  546. enResult = Ok;
  547. break;
  548. case Module2:
  549. M0P_PCA->CCAP2H_f.CCAP2 = u8Data;
  550. enResult = Ok;
  551. break;
  552. case Module3:
  553. M0P_PCA->CCAP3H_f.CCAP3 = u8Data;
  554. enResult = Ok;
  555. break;
  556. case Module4:
  557. M0P_PCA->CCAP4H_f.CCAP4 = u8Data;
  558. enResult = Ok;
  559. break;
  560. default:
  561. enResult = Error;
  562. break;
  563. }
  564. return enResult;
  565. }
  566. /**
  567. *****************************************************************************
  568. ** \brief PCA低8位比较数据设置
  569. **
  570. **
  571. ** \param [in] enModule PCA模块选择(Module0、Module1、Module2、Module3、Module4)
  572. ** \param [in] u8Data PCA低8位捕获数据
  573. **
  574. ** \retval Ok or Error
  575. *****************************************************************************/
  576. en_result_t Pca_CmpDataLSet(en_pca_module_t enModule, uint8_t u8Data)
  577. {
  578. en_result_t enResult = Error;
  579. ASSERT(IS_VALID_MODULE(enModule));
  580. switch (enModule)
  581. {
  582. case Module0:
  583. M0P_PCA->CCAP0L_f.CCAP0 = u8Data;
  584. enResult = Ok;
  585. break;
  586. case Module1:
  587. M0P_PCA->CCAP1L_f.CCAP1 = u8Data;
  588. enResult = Ok;
  589. break;
  590. case Module2:
  591. M0P_PCA->CCAP2L_f.CCAP2 = u8Data;
  592. enResult = Ok;
  593. break;
  594. case Module3:
  595. M0P_PCA->CCAP3L_f.CCAP3 = u8Data;
  596. enResult = Ok;
  597. break;
  598. case Module4:
  599. M0P_PCA->CCAP4L_f.CCAP4 = u8Data;
  600. enResult = Ok;
  601. break;
  602. default:
  603. enResult = Error;
  604. break;
  605. }
  606. return enResult;
  607. }
  608. /**
  609. *****************************************************************************
  610. ** \brief PCA计数器初值设置
  611. **
  612. **
  613. **
  614. ** \param [in] u16Data PCA计数器初值
  615. **
  616. ** \retval Ok or Error
  617. *****************************************************************************/
  618. en_result_t Pca_Cnt16Set(uint16_t u16Data)
  619. {
  620. en_result_t enResult = Error;
  621. M0P_PCA->CNT_f.CNT = u16Data;
  622. enResult = Ok;
  623. return enResult;
  624. }
  625. /**
  626. *****************************************************************************
  627. ** \brief PCA16位计数器值获取
  628. **
  629. **
  630. **
  631. ** \retval 16位计数器值
  632. *****************************************************************************/
  633. uint16_t Pca_Cnt16Get(void)
  634. {
  635. uint16_t u16CntData = 0;
  636. u16CntData = M0P_PCA->CNT_f.CNT;
  637. return u16CntData;
  638. }
  639. /**
  640. *****************************************************************************
  641. ** \brief PCA周期重载值设置
  642. **
  643. **
  644. **
  645. ** \param [in] u16Data PCA周期重载值
  646. **
  647. ** \retval Ok or Error
  648. *****************************************************************************/
  649. en_result_t Pca_CARRSet(uint16_t u16Data)
  650. {
  651. en_result_t enResult = Error;
  652. M0P_PCA->CARR_f.CARR = u16Data;
  653. enResult = Ok;
  654. return enResult;
  655. }
  656. /**
  657. *****************************************************************************
  658. ** \brief PCA周期重载值获取
  659. **
  660. **
  661. **
  662. ** \retval PCA周期重载值
  663. *****************************************************************************/
  664. uint16_t Pca_CARRGet(void)
  665. {
  666. uint16_t u16CntData = 0;
  667. u16CntData = M0P_PCA->CARR_f.CARR;
  668. return u16CntData;
  669. }
  670. /**
  671. *****************************************************************************
  672. ** \brief PCA增强PWM 使能
  673. **
  674. **
  675. **
  676. **
  677. ** \retval Ok or Error
  678. *****************************************************************************/
  679. en_result_t Pca_Enable16bitPWM(void)
  680. {
  681. en_result_t enResult = Error;
  682. M0P_PCA->EPWM_f.EPWM = TRUE;
  683. enResult = Ok;
  684. return enResult;
  685. }
  686. /**
  687. *****************************************************************************
  688. ** \brief PCA增强PWM 禁止
  689. **
  690. **
  691. **
  692. **
  693. ** \retval Ok or Error
  694. *****************************************************************************/
  695. en_result_t Pca_Disable16bitPWM(void)
  696. {
  697. en_result_t enResult = Error;
  698. M0P_PCA->EPWM_f.EPWM = FALSE;
  699. enResult = Ok;
  700. return enResult;
  701. }
  702. /**
  703. *****************************************************************************
  704. ** \brief PCA比较高速输出标志获取
  705. **
  706. **
  707. ** \param [in] enModule PCA模块选择(Module0、Module1、Module2、Module3、Module4)
  708. **
  709. ** \retval TRUE or FALSE
  710. *****************************************************************************/
  711. boolean_t Pca_GetCmpHighFlag(en_pca_module_t enModule)
  712. {
  713. boolean_t bRetVal = FALSE;
  714. ASSERT(IS_VALID_MODULE(enModule));
  715. switch (enModule)
  716. {
  717. case Module0:
  718. bRetVal = M0P_PCA->CCAPO_f.CCAPO0 ? TRUE : FALSE;
  719. break;
  720. case Module1:
  721. bRetVal = M0P_PCA->CCAPO_f.CCAPO1 ? TRUE : FALSE;
  722. break;
  723. case Module2:
  724. bRetVal = M0P_PCA->CCAPO_f.CCAPO2 ? TRUE : FALSE;
  725. break;
  726. case Module3:
  727. bRetVal = M0P_PCA->CCAPO_f.CCAPO3 ? TRUE : FALSE;
  728. break;
  729. case Module4:
  730. bRetVal = M0P_PCA->CCAPO_f.CCAPO4 ? TRUE : FALSE;
  731. break;
  732. default:
  733. bRetVal = FALSE;
  734. break;
  735. }
  736. return bRetVal;
  737. }
  738. //@} // PcaGroup
  739. /*******************************************************************************
  740. * EOF (not truncated)
  741. ******************************************************************************/