lib_cmp.c 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569
  1. /**
  2. ******************************************************************************
  3. * @file lib_cmp.c
  4. * @author Application Team
  5. * @version V1.1.0
  6. * @date 2019-10-28
  7. * @brief CMP library.
  8. ******************************************************************************
  9. * @attention
  10. *
  11. ******************************************************************************
  12. */
  13. #include "lib_cmp.h"
  14. /* CMP1 reset values */
  15. #define CMP1_REG2_Msk (0x13UL)
  16. #define CMP1_REG3_Msk (0x02UL)
  17. #define CMP1_REG5_Msk (0x03UL)
  18. #define CMP1_REGF_Msk (0x01UL)
  19. #define CMP1_CTRL_Msk (0x300003UL)
  20. #define CMP1_INTSTS_Msk (0x04UL)
  21. #define CMP1_INTEN_Msk (0x04UL)
  22. #define CMP1_THR_Msk (0xFFFFUL)
  23. #define CMP1_CTL_Msk (0x300FFUL)
  24. /* CMP2 reset values */
  25. #define CMP2_REG2_Msk (0x2CUL)
  26. #define CMP2_REG3_Msk (0x04UL)
  27. #define CMP2_REG5_Msk (0x0CUL)
  28. #define CMP2_REGF_Msk (0x02UL)
  29. #define CMP2_CTRL_Msk (0xC0000CUL)
  30. #define CMP2_INTSTS_Msk (0x08UL)
  31. #define CMP2_INTEN_Msk (0x08UL)
  32. #define CMP2_THR_Msk (0xFFFF0000UL)
  33. #define CMP2_CTL_Msk (0x30FF00UL)
  34. /**
  35. * @brief Initializes the Comparator peripheral registers to their default reset values.
  36. * @param CMPx:
  37. CMP_1
  38. CMP_2
  39. * @retval None
  40. */
  41. void CMP_DeInit(uint32_t CMPx)
  42. {
  43. /* Check parameters */
  44. assert_parameters(IS_CMP(CMPx));
  45. if (CMPx == CMP_1)
  46. {
  47. ANA->REG2 &= ~CMP1_REG2_Msk;
  48. ANA->REG3 &= ~CMP1_REG3_Msk;
  49. ANA->REG5 &= ~CMP1_REG5_Msk;
  50. ANA->REGF &= ~CMP1_REGF_Msk;
  51. ANA->CTRL &= ~CMP1_CTRL_Msk;
  52. ANA->INTSTS = CMP1_INTSTS_Msk;
  53. ANA->INTEN &= ~CMP1_INTEN_Msk;
  54. ANA->CMPTHR &= ~CMP1_THR_Msk;
  55. ANA->CMPCTL &= ~CMP1_CTL_Msk;
  56. ANA->CMPCNT1 = 0;
  57. }
  58. else
  59. {
  60. ANA->REG2 &= ~CMP2_REG2_Msk;
  61. ANA->REG3 &= ~CMP2_REG3_Msk;
  62. ANA->REG5 &= ~CMP2_REG5_Msk;
  63. ANA->REGF &= ~CMP2_REGF_Msk;
  64. ANA->CTRL &= ~CMP2_CTRL_Msk;
  65. ANA->INTSTS = CMP2_INTSTS_Msk;
  66. ANA->INTEN &= ~CMP2_INTEN_Msk;
  67. ANA->CMPTHR &= ~CMP2_THR_Msk;
  68. ANA->CMPCTL &= ~CMP2_CTL_Msk;
  69. ANA->CMPCNT2 = 0;
  70. }
  71. }
  72. /**
  73. * @brief Initializes comparator.
  74. * @param CMPx:
  75. CMP_1
  76. CMP_2
  77. InitStruct: Comparator configuration
  78. DebSel:
  79. CMP_DEB_NONE
  80. CMP_DEB_RTCCLK_2
  81. CMP_DEB_RTCCLK_3
  82. CMP_DEB_RTCCLK_4
  83. SignalSourceSel:
  84. CMP_SIGNALSRC_PPIN_TO_VREF
  85. CMP_SIGNALSRC_PPIN_TO_BGPREF
  86. CMP_SIGNALSRC_PBAT_TO_VREF
  87. CMP_SIGNALSRC_PBAT_TO_BGPREF
  88. CMP_SIGNALSRC_NPIN_TO_VREF
  89. CMP_SIGNALSRC_NPIN_TO_BGPREF
  90. CMP_SIGNALSRC_PPIN_TO_NPIN
  91. CMP_SIGNALSRC_PBAT_TO_NPIN
  92. BiasSel:
  93. CMP_BIAS_20nA
  94. CMP_BIAS_100nA
  95. CMP_BIAS_500nA
  96. * @retval None
  97. */
  98. void CMP_Init(uint32_t CMPx, CMP_TypeDef *InitStruct)
  99. {
  100. uint32_t tmp;
  101. /* Check parameters */
  102. assert_parameters(IS_CMP(CMPx));
  103. assert_parameters(IS_CMP_DEB(InitStruct->DebSel));
  104. assert_parameters(IS_CMP_SIGNALSRC(InitStruct->SignalSourceSel));
  105. assert_parameters(IS_CMP_BIAS(InitStruct->BiasSel));
  106. /* CMP1 Configure */
  107. if (CMPx == CMP_1)
  108. {
  109. tmp = ANA->CTRL;
  110. tmp &= ~ANA_CTRL_CMP1DEB;
  111. tmp |= (InitStruct->DebSel << ANA_CTRL_CMP1DEB_Pos);
  112. ANA->CTRL = tmp;
  113. tmp = ANA->REG5;
  114. tmp &= ~ANA_REG5_CMP1IT;
  115. tmp |= (InitStruct->BiasSel << ANA_REG5_CMP1IT_Pos);
  116. ANA->REG5 = tmp;
  117. ANA->REG2 &= ~(ANA_REG2_CMP1SEL|ANA_REG2_CMP1REFSEL);
  118. ANA->REGF &= ~ANA_REGF_BAT1DETEN;
  119. switch(InitStruct->SignalSourceSel)
  120. {
  121. case CMP_SIGNALSRC_PPIN_TO_VREF:
  122. break;
  123. case CMP_SIGNALSRC_PPIN_TO_BGPREF: ANA->REG2 |= ANA_REG2_CMP1REFSEL;
  124. break;
  125. case CMP_SIGNALSRC_PBAT_TO_VREF: ANA->REGF |= ANA_REGF_BAT1DETEN;
  126. break;
  127. case CMP_SIGNALSRC_PBAT_TO_BGPREF: ANA->REG2 |= ANA_REG2_CMP1REFSEL;
  128. ANA->REGF |= ANA_REGF_BAT1DETEN;
  129. break;
  130. case CMP_SIGNALSRC_NPIN_TO_VREF: ANA->REG2 |= ANA_REG2_CMP1SEL_1;
  131. break;
  132. case CMP_SIGNALSRC_NPIN_TO_BGPREF: ANA->REG2 |= (ANA_REG2_CMP1SEL_1|ANA_REG2_CMP1REFSEL);
  133. break;
  134. case CMP_SIGNALSRC_PPIN_TO_NPIN: ANA->REG2 |= ANA_REG2_CMP1SEL_3;
  135. break;
  136. case CMP_SIGNALSRC_PBAT_TO_NPIN: ANA->REG2 |= ANA_REG2_CMP1SEL_3;
  137. ANA->REGF |= ANA_REGF_BAT1DETEN;
  138. break;
  139. default:
  140. break;
  141. }
  142. }
  143. /* CMP2 Configure */
  144. else
  145. {
  146. tmp = ANA->CTRL;
  147. tmp &= ~ANA_CTRL_CMP2DEB;
  148. tmp |= (InitStruct->DebSel << ANA_CTRL_CMP2DEB_Pos);
  149. ANA->CTRL = tmp;
  150. tmp = ANA->REG5;
  151. tmp &= ~ANA_REG5_CMP2IT;
  152. tmp |= (InitStruct->BiasSel << ANA_REG5_CMP2IT_Pos);
  153. ANA->REG5 = tmp;
  154. ANA->REG2 &= ~(ANA_REG2_CMP2SEL|ANA_REG2_CMP2REFSEL);
  155. ANA->REGF &= ~ANA_REGF_BATRTCDETEN;
  156. switch(InitStruct->SignalSourceSel)
  157. {
  158. case CMP_SIGNALSRC_PPIN_TO_VREF:
  159. break;
  160. case CMP_SIGNALSRC_PPIN_TO_BGPREF: ANA->REG2 |= ANA_REG2_CMP2REFSEL;
  161. break;
  162. case CMP_SIGNALSRC_PBAT_TO_VREF: ANA->REGF |= ANA_REGF_BATRTCDETEN;
  163. break;
  164. case CMP_SIGNALSRC_PBAT_TO_BGPREF: ANA->REG2 |= ANA_REG2_CMP2REFSEL;
  165. ANA->REGF |= ANA_REGF_BATRTCDETEN;
  166. break;
  167. case CMP_SIGNALSRC_NPIN_TO_VREF: ANA->REG2 |= ANA_REG2_CMP2SEL_1;
  168. break;
  169. case CMP_SIGNALSRC_NPIN_TO_BGPREF: ANA->REG2 |= (ANA_REG2_CMP2SEL_1|ANA_REG2_CMP2REFSEL);
  170. break;
  171. case CMP_SIGNALSRC_PPIN_TO_NPIN: ANA->REG2 |= ANA_REG2_CMP2SEL_3;
  172. break;
  173. case CMP_SIGNALSRC_PBAT_TO_NPIN: ANA->REG2 |= ANA_REG2_CMP2SEL_3;
  174. ANA->REGF |= ANA_REGF_BATRTCDETEN;
  175. break;
  176. default:
  177. break;
  178. }
  179. }
  180. }
  181. /**
  182. * @brief Fills each CMP_TypeDef member with its default value.
  183. * @param InitStruct: pointer to an CMP_TypeDef structure which will be initialized.
  184. * @retval None
  185. */
  186. void CMP_StructInit(CMP_TypeDef *InitStruct)
  187. {
  188. InitStruct->DebSel = CMP_DEB_NONE;
  189. InitStruct->SignalSourceSel = CMP_SIGNALSRC_PPIN_TO_VREF;
  190. InitStruct->BiasSel = CMP_BIAS_20nA;
  191. }
  192. /**
  193. * @brief Initializes comparator Count.
  194. * @param CMPx:
  195. CMP_1
  196. CMP_2
  197. InitStruct: Comparator configuration
  198. ModeSel:
  199. CMP_MODE_OFF
  200. CMP_MODE_RISING
  201. CMP_MODE_FALLING
  202. CMP_MODE_BOTH
  203. CheckPeriod:
  204. CMP_PERIOD_30US
  205. CMP_PERIOD_7_8125MS
  206. CMP_PERIOD_125MS
  207. CMP_PERIOD_250MS
  208. CMP_PERIOD_500MS
  209. CheckNum:
  210. CMP_CHKNUM_1~CMP_CHKNUM_16
  211. * @retval None
  212. */
  213. void CMP_CountInit(uint32_t CMPx, CMP_CountTypeDef *InitStruct)
  214. {
  215. uint32_t tmp;
  216. /* Check parameters */
  217. assert_parameters(IS_CMP(CMPx));
  218. assert_parameters(IS_CMP_MODE(InitStruct->ModeSel));
  219. assert_parameters(IS_CMP_CHECKPERIOD(InitStruct->CheckPeriod));
  220. assert_parameters(IS_CMP_CHKNUM(InitStruct->CheckNum));
  221. /* CMP1 Configure */
  222. if (CMPx == CMP_1)
  223. {
  224. /* Configure ModeSel */
  225. tmp = ANA->CTRL;
  226. tmp &= ~ANA_CTRL_CMP1SEL;
  227. tmp |= (InitStruct->ModeSel << ANA_CTRL_CMP1SEL_Pos);
  228. ANA->CTRL = tmp;
  229. /* Configure CheckPeriod/CheckNum */
  230. tmp = ANA->CMPCTL;
  231. tmp &= ~(ANA_CMPCTL_CMP1_CHK_FRQ|ANA_CMPCTL_CMP1_CHK_NUM);
  232. tmp |= ((InitStruct->CheckPeriod << ANA_CMPCTL_CMP1_CHK_FRQ_Pos) | \
  233. (InitStruct->CheckNum << ANA_CMPCTL_CMP1_CHK_NUM_Pos));
  234. ANA->CMPCTL = tmp;
  235. }
  236. /* CMP2 Configure */
  237. else
  238. {
  239. /* Configure ModeSel */
  240. tmp = ANA->CTRL;
  241. tmp &= ~ANA_CTRL_CMP2SEL;
  242. tmp |= (InitStruct->ModeSel << ANA_CTRL_CMP2SEL_Pos);
  243. ANA->CTRL = tmp;
  244. /* Configure CheckPeriod/CheckNum */
  245. tmp = ANA->CMPCTL;
  246. tmp &= ~(ANA_CMPCTL_CMP2_CHK_FRQ|ANA_CMPCTL_CMP2_CHK_NUM);
  247. tmp |= ((InitStruct->CheckPeriod << ANA_CMPCTL_CMP2_CHK_FRQ_Pos) | \
  248. (InitStruct->CheckNum << ANA_CMPCTL_CMP2_CHK_NUM_Pos));
  249. ANA->CMPCTL = tmp;
  250. }
  251. }
  252. /**
  253. * @brief Fill each CMP_CountTypeDef member with its default value.
  254. * @param InitStruct: pointer to an CMP_CountTypeDef structure which will be initialized.
  255. * @retval None
  256. */
  257. void CMP_CountStructInit(CMP_CountTypeDef *InitStruct)
  258. {
  259. InitStruct->ModeSel = CMP_MODE_OFF;
  260. InitStruct->CheckPeriod = CMP_PERIOD_30US;
  261. InitStruct->CheckNum = CMP_CHKNUM_1;
  262. }
  263. /**
  264. * @brief Initializes Comparator interrupt.
  265. * @param CMPx:
  266. CMP_1
  267. CMP_2
  268. InitStruct: Comparator configuration
  269. INTNumSel:
  270. CMP_INTNUM_EVERY
  271. CMP_INTNUM_1
  272. SubSel:
  273. CMP_COUNT_NOSUB
  274. CMP_COUNT_SUB
  275. THRNum:0~65535
  276. * @retval None
  277. */
  278. void CMP_INTInit(uint32_t CMPx, CMP_INTTypeDef *InitStruct)
  279. {
  280. uint32_t tmp;
  281. /* Check parameters */
  282. assert_parameters(IS_CMP(CMPx));
  283. assert_parameters(IS_CMP_INTNUM(InitStruct->INTNumSel));
  284. assert_parameters(IS_CMP_COUNT(InitStruct->SubSel));
  285. assert_parameters(IS_CMP_THRNUM(InitStruct->THRNum));
  286. /* CMP1 Configure */
  287. if (CMPx == CMP_1)
  288. {
  289. /* Configure INTNumSel/SubSel */
  290. tmp = ANA->CMPCTL;
  291. tmp &= ~(ANA_CMPCTL_CMP1_THR_EN|ANA_CMPCTL_CMP1_INT_MASK_EN);
  292. tmp |= ((InitStruct->SubSel << ANA_CMPCTL_CMP1_THR_EN_Pos) | \
  293. (InitStruct->INTNumSel << ANA_CMPCTL_CMP1_INT_MASK_EN_Pos));
  294. ANA->CMPCTL = tmp;
  295. /* Configure THRNum */
  296. tmp = ANA->CMPTHR;
  297. tmp &= ~ANA_CMPTHR_CMP1_THR;
  298. tmp |= (InitStruct->THRNum << ANA_CMPTHR_CMP1_THR_Pos);
  299. ANA->CMPTHR = tmp;
  300. }
  301. /* CMP2 Configure */
  302. else
  303. {
  304. /* Configure INTNumSel/SubSel */
  305. tmp = ANA->CMPCTL;
  306. tmp &= ~(ANA_CMPCTL_CMP2_THR_EN|ANA_CMPCTL_CMP2_INT_MASK_EN);
  307. tmp |= ((InitStruct->SubSel << ANA_CMPCTL_CMP2_THR_EN_Pos) | \
  308. (InitStruct->INTNumSel << ANA_CMPCTL_CMP2_INT_MASK_EN_Pos));
  309. ANA->CMPCTL = tmp;
  310. /* Configure THRNum */
  311. tmp = ANA->CMPTHR;
  312. tmp &= ~ANA_CMPTHR_CMP2_THR;
  313. tmp |= (InitStruct->THRNum << ANA_CMPTHR_CMP2_THR_Pos);
  314. ANA->CMPTHR = tmp;
  315. }
  316. }
  317. /**
  318. * @brief Fills each CMP_INTTypeDef member with its default value.
  319. * @param InitStruct: pointer to an CMP_INTTypeDef structure which will be initialized.
  320. * @retval None
  321. */
  322. void CMP_INTStructInit(CMP_INTTypeDef *InitStruct)
  323. {
  324. InitStruct->INTNumSel = CMP_INTNUM_EVERY;
  325. InitStruct->SubSel = CMP_COUNT_NOSUB;
  326. InitStruct->THRNum = 0;
  327. }
  328. /**
  329. * @brief Initializes Comparator Output IO.
  330. * @param CMPx:
  331. CMP_1
  332. CMP_2
  333. InitStruct: Comparator configuration
  334. DebSel:
  335. CMP_OUTPUT_DEB
  336. CMP_OUTPUT_NODEB
  337. OutputSel:
  338. ENABLE
  339. DISABLE
  340. * @retval None
  341. */
  342. void CMP_OutputInit(uint32_t CMPx, CMP_OutputTypeDef *InitStruct)
  343. {
  344. /* Check parameters */
  345. assert_parameters(IS_CMP(CMPx));
  346. assert_parameters(IS_CMP_OUTPUTDEB(InitStruct->DebSel));
  347. assert_parameters(IS_FUNCTIONAL_STATE(InitStruct->OutputSel));
  348. /* CMP1 Configure */
  349. if (CMPx == CMP_1)
  350. {
  351. ANA->CMPCTL &= ~ANA_CMPCTL_CMP1_IO_NODEB;
  352. ANA->CMPCTL |= (InitStruct->DebSel << ANA_CMPCTL_CMP1_IO_NODEB_Pos);
  353. GPIOAF->IOE_SEL &= ~GPIOAF_IOE_SEL_SEL7;
  354. GPIOAF->IOE_SEL |= (InitStruct->OutputSel << GPIOAF_IOE_SEL_SEL7_Pos);
  355. }
  356. /* CMP2 Configure */
  357. else
  358. {
  359. ANA->CMPCTL &= ~ANA_CMPCTL_CMP2_IO_NODEB;
  360. ANA->CMPCTL |= (InitStruct->DebSel << ANA_CMPCTL_CMP2_IO_NODEB_Pos);
  361. GPIOA->SEL &= ~GPIOA_SEL_SEL6;
  362. GPIOA->SEL |= (InitStruct->OutputSel << GPIOA_SEL_SEL6_Pos);
  363. }
  364. }
  365. /**
  366. * @brief Fills each CMP_OutputTypeDef member with its default value.
  367. * @param InitStruct: pointer to an CMP_OutputTypeDef structure which will be initialized.
  368. * @retval None
  369. */
  370. void CMP_OutputStructInit(CMP_OutputTypeDef *InitStruct)
  371. {
  372. InitStruct->DebSel = CMP_OUTPUT_DEB;
  373. InitStruct->OutputSel = DISABLE;
  374. }
  375. /**
  376. * @brief Gets comparator count value.
  377. * @param CMPx:
  378. CMP_1
  379. CMP_2
  380. * @retval Comparator count value.
  381. */
  382. uint32_t CMP_GetCNTValue(uint32_t CMPx)
  383. {
  384. /* Check parameters */
  385. assert_parameters(IS_CMP(CMPx));
  386. if (CMPx == CMP_1)
  387. {
  388. return ANA->CMPCNT1;
  389. }
  390. else
  391. {
  392. return ANA->CMPCNT2;
  393. }
  394. }
  395. /**
  396. * @brief Clears comparator counter value.
  397. * @param CMPx:
  398. CMP_1
  399. CMP_2
  400. * @retval None
  401. */
  402. void CMP_ClearCNTValue(uint32_t CMPx)
  403. {
  404. /* Check parameters */
  405. assert_parameters(IS_CMP(CMPx));
  406. if (CMPx == CMP_1)
  407. {
  408. ANA->CMPCNT1 = 0;
  409. }
  410. else
  411. {
  412. ANA->CMPCNT2 = 0;
  413. }
  414. }
  415. /**
  416. * @brief Enables or disables Comparator.
  417. * @param CMPx:
  418. CMP_1
  419. CMP_2
  420. NewState:
  421. ENABLE
  422. DISABLE
  423. * @retval None
  424. */
  425. void CMP_Cmd(uint32_t CMPx, uint32_t NewState)
  426. {
  427. /* Check parameters */
  428. assert_parameters(IS_CMP(CMPx));
  429. assert_parameters(IS_FUNCTIONAL_STATE(NewState));
  430. if (CMPx == CMP_1)
  431. {
  432. ANA->REG3 &= ~ANA_REG3_CMP1PDN;
  433. ANA->REG3 |= (NewState << ANA_REG3_CMP1PDN_Pos);
  434. }
  435. else
  436. {
  437. ANA->REG3 &= ~ANA_REG3_CMP2PDN;
  438. ANA->REG3 |= (NewState << ANA_REG3_CMP2PDN_Pos);
  439. }
  440. }
  441. /**
  442. * @brief Gets comparator output level
  443. * @param None
  444. * @retval Output of comparator
  445. */
  446. uint8_t CMP_GetOutputValue(uint32_t CMPx)
  447. {
  448. /* Check parameters */
  449. assert_parameters(IS_CMP(CMPx));
  450. if (CMPx == CMP_1)
  451. {
  452. return ((ANA->CMPOUT & ANA_CMPOUT_CMP1) >> ANA_CMPOUT_CMP1_Pos);
  453. }
  454. else
  455. {
  456. return ((ANA->CMPOUT & ANA_CMPOUT_CMP2) >> ANA_CMPOUT_CMP2_Pos);
  457. }
  458. }
  459. /**
  460. * @brief Enables or disables Comparator interrupt.
  461. * @param CMPx:
  462. * CMP_1
  463. * CMP_2
  464. * NewState:
  465. * ENABLE
  466. * DISABLE
  467. * @retval None
  468. */
  469. void CMP_INTConfig(uint32_t CMPx, uint32_t NewState)
  470. {
  471. /* Check parameters */
  472. assert_parameters(IS_CMP(CMPx));
  473. if (CMPx == CMP_1)
  474. {
  475. ANA->INTEN &= ~ANA_INTEN_INTEN2;
  476. ANA->INTEN |= (NewState<<ANA_INTEN_INTEN2_Pos);
  477. }
  478. else
  479. {
  480. ANA->INTEN &= ~ANA_INTEN_INTEN3;
  481. ANA->INTEN |= (NewState<<ANA_INTEN_INTEN3_Pos);
  482. }
  483. }
  484. /**
  485. * @brief Gets comparator interrupt flag status.
  486. * @param CMPx:
  487. * CMP_1
  488. * CMP_2
  489. * @retval flag status
  490. * 0: status not set
  491. * 1: status set
  492. */
  493. uint8_t CMP_GetINTStatus(uint32_t CMPx)
  494. {
  495. /* Check parameters */
  496. assert_parameters(IS_CMP(CMPx));
  497. if (CMPx == CMP_1)
  498. {
  499. return ((ANA->INTSTS & ANA_INTSTS_INTSTS2) >> ANA_INTSTS_INTSTS2_Pos);
  500. }
  501. else
  502. {
  503. return ((ANA->INTSTS & ANA_INTSTS_INTSTS3) >> ANA_INTSTS_INTSTS3_Pos);
  504. }
  505. }
  506. /**
  507. * @brief Clears comparator interrupt flag.
  508. * @param CMPx:
  509. * CMP_1
  510. * CMP_2
  511. * @retval None
  512. */
  513. void CMP_ClearINTStatus(uint32_t CMPx)
  514. {
  515. /* Check parameters */
  516. assert_parameters(IS_CMP(CMPx));
  517. if (CMPx == CMP_1)
  518. {
  519. ANA->INTSTS = ANA_INTSTS_INTSTS2;
  520. }
  521. else
  522. {
  523. ANA->INTSTS = ANA_INTSTS_INTSTS3;
  524. }
  525. }
  526. /*********************************** END OF FILE ******************************/