You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

626 lines
22 KiB

  1. /*
  2. * Copyright (c) 2015, Freescale Semiconductor, Inc.
  3. * Copyright 2016-2017 NXP
  4. * All rights reserved.
  5. *
  6. * SPDX-License-Identifier: BSD-3-Clause
  7. */
  8. #ifndef _FSL_PDB_H_
  9. #define _FSL_PDB_H_
  10. #include "fsl_common.h"
  11. /*!
  12. * @addtogroup pdb
  13. * @{
  14. */
  15. /*******************************************************************************
  16. * Definitions
  17. ******************************************************************************/
  18. /*! @name Driver version */
  19. /*@{*/
  20. /*! @brief PDB driver version 2.0.4. */
  21. #define FSL_PDB_DRIVER_VERSION (MAKE_VERSION(2, 0, 4))
  22. /*@}*/
  23. /*!
  24. * @brief PDB flags.
  25. */
  26. enum _pdb_status_flags
  27. {
  28. kPDB_LoadOKFlag = PDB_SC_LDOK_MASK, /*!< This flag is automatically cleared when the values in buffers are
  29. loaded into the internal registers after the LDOK bit is set or the
  30. PDBEN is cleared. */
  31. kPDB_DelayEventFlag = PDB_SC_PDBIF_MASK, /*!< PDB timer delay event flag. */
  32. };
  33. /*!
  34. * @brief PDB ADC PreTrigger channel flags.
  35. */
  36. enum _pdb_adc_pretrigger_flags
  37. {
  38. /* PDB PreTrigger channel match flags. */
  39. kPDB_ADCPreTriggerChannel0Flag = PDB_S_CF(1U << 0), /*!< Pre-trigger 0 flag. */
  40. kPDB_ADCPreTriggerChannel1Flag = PDB_S_CF(1U << 1), /*!< Pre-trigger 1 flag. */
  41. #if (FSL_FEATURE_PDB_CHANNEL_PRE_TRIGGER_COUNT > 2)
  42. kPDB_ADCPreTriggerChannel2Flag = PDB_S_CF(1U << 2), /*!< Pre-trigger 2 flag. */
  43. kPDB_ADCPreTriggerChannel3Flag = PDB_S_CF(1U << 3), /*!< Pre-trigger 3 flag. */
  44. #endif /* FSL_FEATURE_PDB_CHANNEL_PRE_TRIGGER_COUNT */
  45. #if (FSL_FEATURE_PDB_CHANNEL_PRE_TRIGGER_COUNT > 4)
  46. kPDB_ADCPreTriggerChannel4Flag = PDB_S_CF(1U << 4), /*!< Pre-trigger 4 flag. */
  47. kPDB_ADCPreTriggerChannel5Flag = PDB_S_CF(1U << 5), /*!< Pre-trigger 5 flag. */
  48. kPDB_ADCPreTriggerChannel6Flag = PDB_S_CF(1U << 6), /*!< Pre-trigger 6 flag. */
  49. kPDB_ADCPreTriggerChannel7Flag = PDB_S_CF(1U << 7), /*!< Pre-trigger 7 flag. */
  50. #endif /* FSL_FEATURE_PDB_CHANNEL_PRE_TRIGGER_COUNT */
  51. /* PDB PreTrigger channel error flags. */
  52. kPDB_ADCPreTriggerChannel0ErrorFlag = PDB_S_ERR(1U << 0), /*!< Pre-trigger 0 Error. */
  53. kPDB_ADCPreTriggerChannel1ErrorFlag = PDB_S_ERR(1U << 1), /*!< Pre-trigger 1 Error. */
  54. #if (FSL_FEATURE_PDB_CHANNEL_PRE_TRIGGER_COUNT > 2)
  55. kPDB_ADCPreTriggerChannel2ErrorFlag = PDB_S_ERR(1U << 2), /*!< Pre-trigger 2 Error. */
  56. kPDB_ADCPreTriggerChannel3ErrorFlag = PDB_S_ERR(1U << 3), /*!< Pre-trigger 3 Error. */
  57. #endif /* FSL_FEATURE_PDB_CHANNEL_PRE_TRIGGER_COUNT */
  58. #if (FSL_FEATURE_PDB_CHANNEL_PRE_TRIGGER_COUNT > 4)
  59. kPDB_ADCPreTriggerChannel4ErrorFlag = PDB_S_ERR(1U << 4), /*!< Pre-trigger 4 Error. */
  60. kPDB_ADCPreTriggerChannel5ErrorFlag = PDB_S_ERR(1U << 5), /*!< Pre-trigger 5 Error. */
  61. kPDB_ADCPreTriggerChannel6ErrorFlag = PDB_S_ERR(1U << 6), /*!< Pre-trigger 6 Error. */
  62. kPDB_ADCPreTriggerChannel7ErrorFlag = PDB_S_ERR(1U << 7), /*!< Pre-trigger 7 Error. */
  63. #endif /* FSL_FEATURE_PDB_CHANNEL_PRE_TRIGGER_COUNT */
  64. };
  65. /*!
  66. * @brief PDB buffer interrupts.
  67. */
  68. enum _pdb_interrupt_enable
  69. {
  70. kPDB_SequenceErrorInterruptEnable = PDB_SC_PDBEIE_MASK, /*!< PDB sequence error interrupt enable. */
  71. kPDB_DelayInterruptEnable = PDB_SC_PDBIE_MASK, /*!< PDB delay interrupt enable. */
  72. };
  73. /*!
  74. * @brief PDB load value mode.
  75. *
  76. * Selects the mode to load the internal values after doing the load operation (write 1 to PDBx_SC[LDOK]).
  77. * These values are for the following operations.
  78. * - PDB counter (PDBx_MOD, PDBx_IDLY)
  79. * - ADC trigger (PDBx_CHnDLYm)
  80. * - DAC trigger (PDBx_DACINTx)
  81. * - CMP trigger (PDBx_POyDLY)
  82. */
  83. typedef enum _pdb_load_value_mode
  84. {
  85. kPDB_LoadValueImmediately = 0U, /*!< Load immediately after 1 is written to LDOK. */
  86. kPDB_LoadValueOnCounterOverflow = 1U, /*!< Load when the PDB counter overflows (reaches the MOD
  87. register value). */
  88. kPDB_LoadValueOnTriggerInput = 2U, /*!< Load a trigger input event is detected. */
  89. kPDB_LoadValueOnCounterOverflowOrTriggerInput = 3U, /*!< Load either when the PDB counter overflows or a trigger
  90. input is detected. */
  91. } pdb_load_value_mode_t;
  92. /*!
  93. * @brief Prescaler divider.
  94. *
  95. * Counting uses the peripheral clock divided by multiplication factor selected by times of MULT.
  96. */
  97. typedef enum _pdb_prescaler_divider
  98. {
  99. kPDB_PrescalerDivider1 = 0U, /*!< Divider x1. */
  100. kPDB_PrescalerDivider2 = 1U, /*!< Divider x2. */
  101. kPDB_PrescalerDivider4 = 2U, /*!< Divider x4. */
  102. kPDB_PrescalerDivider8 = 3U, /*!< Divider x8. */
  103. kPDB_PrescalerDivider16 = 4U, /*!< Divider x16. */
  104. kPDB_PrescalerDivider32 = 5U, /*!< Divider x32. */
  105. kPDB_PrescalerDivider64 = 6U, /*!< Divider x64. */
  106. kPDB_PrescalerDivider128 = 7U, /*!< Divider x128. */
  107. } pdb_prescaler_divider_t;
  108. /*!
  109. * @brief Multiplication factor select for prescaler.
  110. *
  111. * Selects the multiplication factor of the prescaler divider for the counter clock.
  112. */
  113. typedef enum _pdb_divider_multiplication_factor
  114. {
  115. kPDB_DividerMultiplicationFactor1 = 0U, /*!< Multiplication factor is 1. */
  116. kPDB_DividerMultiplicationFactor10 = 1U, /*!< Multiplication factor is 10. */
  117. kPDB_DividerMultiplicationFactor20 = 2U, /*!< Multiplication factor is 20. */
  118. kPDB_DividerMultiplicationFactor40 = 3U, /*!< Multiplication factor is 40. */
  119. } pdb_divider_multiplication_factor_t;
  120. /*!
  121. * @brief Trigger input source
  122. *
  123. * Selects the trigger input source for the PDB. The trigger input source can be internal or external (EXTRG pin), or
  124. * the software trigger. See chip configuration details for the actual PDB input trigger connections.
  125. */
  126. typedef enum _pdb_trigger_input_source
  127. {
  128. kPDB_TriggerInput0 = 0U, /*!< Trigger-In 0. */
  129. kPDB_TriggerInput1 = 1U, /*!< Trigger-In 1. */
  130. kPDB_TriggerInput2 = 2U, /*!< Trigger-In 2. */
  131. kPDB_TriggerInput3 = 3U, /*!< Trigger-In 3. */
  132. kPDB_TriggerInput4 = 4U, /*!< Trigger-In 4. */
  133. kPDB_TriggerInput5 = 5U, /*!< Trigger-In 5. */
  134. kPDB_TriggerInput6 = 6U, /*!< Trigger-In 6. */
  135. kPDB_TriggerInput7 = 7U, /*!< Trigger-In 7. */
  136. kPDB_TriggerInput8 = 8U, /*!< Trigger-In 8. */
  137. kPDB_TriggerInput9 = 9U, /*!< Trigger-In 9. */
  138. kPDB_TriggerInput10 = 10U, /*!< Trigger-In 10. */
  139. kPDB_TriggerInput11 = 11U, /*!< Trigger-In 11. */
  140. kPDB_TriggerInput12 = 12U, /*!< Trigger-In 12. */
  141. kPDB_TriggerInput13 = 13U, /*!< Trigger-In 13. */
  142. kPDB_TriggerInput14 = 14U, /*!< Trigger-In 14. */
  143. kPDB_TriggerSoftware = 15U, /*!< Trigger-In 15, software trigger. */
  144. } pdb_trigger_input_source_t;
  145. /*!
  146. * @brief List of PDB ADC trigger channels
  147. * @note Actual number of available channels is SoC dependent
  148. */
  149. typedef enum _pdb_adc_trigger_channel
  150. {
  151. kPDB_ADCTriggerChannel0 = 0U, /*!< PDB ADC trigger channel number 0 */
  152. kPDB_ADCTriggerChannel1 = 1U, /*!< PDB ADC trigger channel number 1 */
  153. kPDB_ADCTriggerChannel2 = 2U, /*!< PDB ADC trigger channel number 2 */
  154. kPDB_ADCTriggerChannel3 = 3U, /*!< PDB ADC trigger channel number 3 */
  155. } pdb_adc_trigger_channel_t;
  156. /*!
  157. * @brief List of PDB ADC pretrigger
  158. * @note Actual number of available pretrigger channels is SoC dependent
  159. */
  160. typedef enum _pdb_adc_pretrigger
  161. {
  162. kPDB_ADCPreTrigger0 = 0U, /*!< PDB ADC pretrigger number 0 */
  163. kPDB_ADCPreTrigger1 = 1U, /*!< PDB ADC pretrigger number 1 */
  164. kPDB_ADCPreTrigger2 = 2U, /*!< PDB ADC pretrigger number 2 */
  165. kPDB_ADCPreTrigger3 = 3U, /*!< PDB ADC pretrigger number 3 */
  166. kPDB_ADCPreTrigger4 = 4U, /*!< PDB ADC pretrigger number 4 */
  167. kPDB_ADCPreTrigger5 = 5U, /*!< PDB ADC pretrigger number 5 */
  168. kPDB_ADCPreTrigger6 = 6U, /*!< PDB ADC pretrigger number 6 */
  169. kPDB_ADCPreTrigger7 = 7U, /*!< PDB ADC pretrigger number 7 */
  170. } pdb_adc_pretrigger_t;
  171. /*!
  172. * @brief List of PDB DAC trigger channels
  173. * @note Actual number of available channels is SoC dependent
  174. */
  175. typedef enum _pdb_dac_trigger_channel
  176. {
  177. kPDB_DACTriggerChannel0 = 0U, /*!< PDB DAC trigger channel number 0 */
  178. kPDB_DACTriggerChannel1 = 1U, /*!< PDB DAC trigger channel number 1 */
  179. } pdb_dac_trigger_channel_t;
  180. /*!
  181. * @brief List of PDB pulse out trigger channels
  182. * @note Actual number of available channels is SoC dependent
  183. */
  184. typedef enum _pdb_pulse_out_trigger_channel
  185. {
  186. kPDB_PulseOutTriggerChannel0 = 0U, /*!< PDB pulse out trigger channel number 0 */
  187. kPDB_PulseOutTriggerChannel1 = 1U, /*!< PDB pulse out trigger channel number 1 */
  188. kPDB_PulseOutTriggerChannel2 = 2U, /*!< PDB pulse out trigger channel number 2 */
  189. kPDB_PulseOutTriggerChannel3 = 3U, /*!< PDB pulse out trigger channel number 3 */
  190. } pdb_pulse_out_trigger_channel_t;
  191. /*!
  192. * @brief List of PDB pulse out trigger channels mask
  193. * @note Actual number of available channels mask is SoC dependent
  194. */
  195. typedef enum _pdb_pulse_out_channel_mask
  196. {
  197. kPDB_PulseOutChannel0Mask = (1U << 0U), /*!< PDB pulse out trigger channel number 0 mask */
  198. kPDB_PulseOutChannel1Mask = (1U << 1U), /*!< PDB pulse out trigger channel number 1 mask */
  199. kPDB_PulseOutChannel2Mask = (1U << 2U), /*!< PDB pulse out trigger channel number 2 mask */
  200. kPDB_PulseOutChannel3Mask = (1U << 3U), /*!< PDB pulse out trigger channel number 3 mask */
  201. } pdb_pulse_out_channel_mask_t;
  202. /*!
  203. * @brief PDB module configuration.
  204. */
  205. typedef struct _pdb_config
  206. {
  207. pdb_load_value_mode_t loadValueMode; /*!< Select the load value mode. */
  208. pdb_prescaler_divider_t prescalerDivider; /*!< Select the prescaler divider. */
  209. pdb_divider_multiplication_factor_t dividerMultiplicationFactor; /*!< Multiplication factor select for prescaler. */
  210. pdb_trigger_input_source_t triggerInputSource; /*!< Select the trigger input source. */
  211. bool enableContinuousMode; /*!< Enable the PDB operation in Continuous mode.*/
  212. } pdb_config_t;
  213. /*!
  214. * @brief PDB ADC Pre-trigger configuration.
  215. */
  216. typedef struct _pdb_adc_pretrigger_config
  217. {
  218. uint32_t enablePreTriggerMask; /*!< PDB Channel Pre-trigger Enable. */
  219. uint32_t enableOutputMask; /*!< PDB Channel Pre-trigger Output Select.
  220. PDB channel's corresponding pre-trigger asserts when the counter
  221. reaches the channel delay register. */
  222. uint32_t enableBackToBackOperationMask; /*!< PDB Channel pre-trigger Back-to-Back Operation Enable.
  223. Back-to-back operation enables the ADC conversions complete to trigger
  224. the next PDB channel pre-trigger and trigger output, so that the ADC
  225. conversions can be triggered on next set of configuration and results
  226. registers.*/
  227. } pdb_adc_pretrigger_config_t;
  228. /*!
  229. * @brief PDB DAC trigger configuration.
  230. */
  231. typedef struct _pdb_dac_trigger_config
  232. {
  233. bool enableExternalTriggerInput; /*!< Enables the external trigger for DAC interval counter. */
  234. bool enableIntervalTrigger; /*!< Enables the DAC interval trigger. */
  235. } pdb_dac_trigger_config_t;
  236. /*******************************************************************************
  237. * API
  238. ******************************************************************************/
  239. #if defined(__cplusplus)
  240. extern "C" {
  241. #endif
  242. /*!
  243. * @name Initialization
  244. * @{
  245. */
  246. /*!
  247. * @brief Initializes the PDB module.
  248. *
  249. * This function initializes the PDB module. The operations included are as follows.
  250. * - Enable the clock for PDB instance.
  251. * - Configure the PDB module.
  252. * - Enable the PDB module.
  253. *
  254. * @param base PDB peripheral base address.
  255. * @param config Pointer to the configuration structure. See "pdb_config_t".
  256. */
  257. void PDB_Init(PDB_Type *base, const pdb_config_t *config);
  258. /*!
  259. * @brief De-initializes the PDB module.
  260. *
  261. * @param base PDB peripheral base address.
  262. */
  263. void PDB_Deinit(PDB_Type *base);
  264. /*!
  265. * @brief Initializes the PDB user configuration structure.
  266. *
  267. * This function initializes the user configuration structure to a default value. The default values are as follows.
  268. * @code
  269. * config->loadValueMode = kPDB_LoadValueImmediately;
  270. * config->prescalerDivider = kPDB_PrescalerDivider1;
  271. * config->dividerMultiplicationFactor = kPDB_DividerMultiplicationFactor1;
  272. * config->triggerInputSource = kPDB_TriggerSoftware;
  273. * config->enableContinuousMode = false;
  274. * @endcode
  275. * @param config Pointer to configuration structure. See "pdb_config_t".
  276. */
  277. void PDB_GetDefaultConfig(pdb_config_t *config);
  278. /*!
  279. * @brief Enables the PDB module.
  280. *
  281. * @param base PDB peripheral base address.
  282. * @param enable Enable the module or not.
  283. */
  284. static inline void PDB_Enable(PDB_Type *base, bool enable)
  285. {
  286. if (enable)
  287. {
  288. base->SC |= PDB_SC_PDBEN_MASK;
  289. }
  290. else
  291. {
  292. base->SC &= ~PDB_SC_PDBEN_MASK;
  293. }
  294. }
  295. /* @} */
  296. /*!
  297. * @name Basic Counter
  298. * @{
  299. */
  300. /*!
  301. * @brief Triggers the PDB counter by software.
  302. *
  303. * @param base PDB peripheral base address.
  304. */
  305. static inline void PDB_DoSoftwareTrigger(PDB_Type *base)
  306. {
  307. base->SC |= PDB_SC_SWTRIG_MASK;
  308. }
  309. /*!
  310. * @brief Loads the counter values.
  311. *
  312. * This function loads the counter values from the internal buffer.
  313. * See "pdb_load_value_mode_t" about PDB's load mode.
  314. *
  315. * @param base PDB peripheral base address.
  316. */
  317. static inline void PDB_DoLoadValues(PDB_Type *base)
  318. {
  319. base->SC |= PDB_SC_LDOK_MASK;
  320. }
  321. /*!
  322. * @brief Enables the DMA for the PDB module.
  323. *
  324. * @param base PDB peripheral base address.
  325. * @param enable Enable the feature or not.
  326. */
  327. static inline void PDB_EnableDMA(PDB_Type *base, bool enable)
  328. {
  329. if (enable)
  330. {
  331. base->SC |= PDB_SC_DMAEN_MASK;
  332. }
  333. else
  334. {
  335. base->SC &= ~PDB_SC_DMAEN_MASK;
  336. }
  337. }
  338. /*!
  339. * @brief Enables the interrupts for the PDB module.
  340. *
  341. * @param base PDB peripheral base address.
  342. * @param mask Mask value for interrupts. See "_pdb_interrupt_enable".
  343. */
  344. static inline void PDB_EnableInterrupts(PDB_Type *base, uint32_t mask)
  345. {
  346. assert(0U == (mask & ~(PDB_SC_PDBEIE_MASK | PDB_SC_PDBIE_MASK)));
  347. base->SC |= mask;
  348. }
  349. /*!
  350. * @brief Disables the interrupts for the PDB module.
  351. *
  352. * @param base PDB peripheral base address.
  353. * @param mask Mask value for interrupts. See "_pdb_interrupt_enable".
  354. */
  355. static inline void PDB_DisableInterrupts(PDB_Type *base, uint32_t mask)
  356. {
  357. assert(0U == (mask & ~(PDB_SC_PDBEIE_MASK | PDB_SC_PDBIE_MASK)));
  358. base->SC &= ~mask;
  359. }
  360. /*!
  361. * @brief Gets the status flags of the PDB module.
  362. *
  363. * @param base PDB peripheral base address.
  364. *
  365. * @return Mask value for asserted flags. See "_pdb_status_flags".
  366. */
  367. static inline uint32_t PDB_GetStatusFlags(PDB_Type *base)
  368. {
  369. return base->SC & (PDB_SC_PDBIF_MASK | PDB_SC_LDOK_MASK);
  370. }
  371. /*!
  372. * @brief Clears the status flags of the PDB module.
  373. *
  374. * @param base PDB peripheral base address.
  375. * @param mask Mask value of flags. See "_pdb_status_flags".
  376. */
  377. static inline void PDB_ClearStatusFlags(PDB_Type *base, uint32_t mask)
  378. {
  379. assert(0U == (mask & ~PDB_SC_PDBIF_MASK));
  380. base->SC &= ~mask;
  381. }
  382. /*!
  383. * @brief Specifies the counter period.
  384. *
  385. * @param base PDB peripheral base address.
  386. * @param value Setting value for the modulus. 16-bit is available.
  387. */
  388. static inline void PDB_SetModulusValue(PDB_Type *base, uint32_t value)
  389. {
  390. base->MOD = PDB_MOD_MOD(value);
  391. }
  392. /*!
  393. * @brief Gets the PDB counter's current value.
  394. *
  395. * @param base PDB peripheral base address.
  396. *
  397. * @return PDB counter's current value.
  398. */
  399. static inline uint32_t PDB_GetCounterValue(PDB_Type *base)
  400. {
  401. return base->CNT;
  402. }
  403. /*!
  404. * @brief Sets the value for the PDB counter delay event.
  405. *
  406. * @param base PDB peripheral base address.
  407. * @param value Setting value for PDB counter delay event. 16-bit is available.
  408. */
  409. static inline void PDB_SetCounterDelayValue(PDB_Type *base, uint32_t value)
  410. {
  411. base->IDLY = PDB_IDLY_IDLY(value);
  412. }
  413. /* @} */
  414. /*!
  415. * @name ADC Pre-trigger
  416. * @{
  417. */
  418. /*!
  419. * @brief Configures the ADC pre-trigger in the PDB module.
  420. *
  421. * @param base PDB peripheral base address.
  422. * @param channel Channel index for ADC instance.
  423. * @param config Pointer to the configuration structure. See "pdb_adc_pretrigger_config_t".
  424. */
  425. static inline void PDB_SetADCPreTriggerConfig(PDB_Type *base,
  426. pdb_adc_trigger_channel_t channel,
  427. pdb_adc_pretrigger_config_t *config)
  428. {
  429. assert((uint8_t)channel < (uint8_t)FSL_FEATURE_PDB_CHANNEL_COUNT);
  430. assert(NULL != config);
  431. base->CH[channel].C1 = PDB_C1_BB(config->enableBackToBackOperationMask) | PDB_C1_TOS(config->enableOutputMask) |
  432. PDB_C1_EN(config->enablePreTriggerMask);
  433. }
  434. /*!
  435. * @brief Sets the value for the ADC pre-trigger delay event.
  436. *
  437. * This function sets the value for ADC pre-trigger delay event. It specifies the delay value for the channel's
  438. * corresponding pre-trigger. The pre-trigger asserts when the PDB counter is equal to the set value.
  439. *
  440. * @param base PDB peripheral base address.
  441. * @param channel Channel index for ADC instance.
  442. * @param pretriggerNumber Channel group index for ADC instance.
  443. * @param value Setting value for ADC pre-trigger delay event. 16-bit is available.
  444. */
  445. static inline void PDB_SetADCPreTriggerDelayValue(PDB_Type *base,
  446. pdb_adc_trigger_channel_t channel,
  447. pdb_adc_pretrigger_t pretriggerNumber,
  448. uint32_t value)
  449. {
  450. assert((uint8_t)channel < (uint8_t)FSL_FEATURE_PDB_CHANNEL_COUNT);
  451. assert((uint8_t)pretriggerNumber < (uint8_t)FSL_FEATURE_PDB_CHANNEL_PRE_TRIGGER_COUNT);
  452. /* xx_COUNT2 is actually the count for pre-triggers in header file. xx_COUNT is used for the count of channels. */
  453. base->CH[channel].DLY[pretriggerNumber] = PDB_DLY_DLY(value);
  454. }
  455. /*!
  456. * @brief Gets the ADC pre-trigger's status flags.
  457. *
  458. * @param base PDB peripheral base address.
  459. * @param channel Channel index for ADC instance.
  460. *
  461. * @return Mask value for asserted flags. See "_pdb_adc_pretrigger_flags".
  462. */
  463. static inline uint32_t PDB_GetADCPreTriggerStatusFlags(PDB_Type *base, pdb_adc_trigger_channel_t channel)
  464. {
  465. assert((uint8_t)channel < (uint8_t)FSL_FEATURE_PDB_CHANNEL_COUNT);
  466. return base->CH[channel].S;
  467. }
  468. /*!
  469. * @brief Clears the ADC pre-trigger status flags.
  470. *
  471. * @param base PDB peripheral base address.
  472. * @param channel Channel index for ADC instance.
  473. * @param mask Mask value for flags. See "_pdb_adc_pretrigger_flags".
  474. */
  475. static inline void PDB_ClearADCPreTriggerStatusFlags(PDB_Type *base, pdb_adc_trigger_channel_t channel, uint32_t mask)
  476. {
  477. assert((uint8_t)channel < (uint8_t)FSL_FEATURE_PDB_CHANNEL_COUNT);
  478. base->CH[channel].S &= ~mask;
  479. }
  480. /* @} */
  481. #if defined(FSL_FEATURE_PDB_HAS_DAC) && FSL_FEATURE_PDB_HAS_DAC
  482. /*!
  483. * @name DAC Interval Trigger
  484. * @{
  485. */
  486. /*!
  487. * @brief Configures the DAC trigger in the PDB module.
  488. *
  489. * @param base PDB peripheral base address.
  490. * @param channel Channel index for DAC instance.
  491. * @param config Pointer to the configuration structure. See "pdb_dac_trigger_config_t".
  492. */
  493. void PDB_SetDACTriggerConfig(PDB_Type *base, pdb_dac_trigger_channel_t channel, pdb_dac_trigger_config_t *config);
  494. /*!
  495. * @brief Sets the value for the DAC interval event.
  496. *
  497. * This function sets the value for DAC interval event. DAC interval trigger triggers the DAC module to update
  498. * the buffer when the DAC interval counter is equal to the set value.
  499. *
  500. * @param base PDB peripheral base address.
  501. * @param channel Channel index for DAC instance.
  502. * @param value Setting value for the DAC interval event.
  503. */
  504. static inline void PDB_SetDACTriggerIntervalValue(PDB_Type *base, pdb_dac_trigger_channel_t channel, uint32_t value)
  505. {
  506. assert((uint8_t)channel < (uint8_t)FSL_FEATURE_PDB_DAC_INTERVAL_TRIGGER_COUNT);
  507. base->DAC[channel].INT = PDB_INT_INT(value);
  508. }
  509. /* @} */
  510. #endif /* FSL_FEATURE_PDB_HAS_DAC */
  511. /*!
  512. * @name Pulse-Out Trigger
  513. * @{
  514. */
  515. /*!
  516. * @brief Enables the pulse out trigger channels.
  517. *
  518. * @param base PDB peripheral base address.
  519. * @param channelMask Channel mask value for multiple pulse out trigger channel.
  520. * @param enable Whether the feature is enabled or not.
  521. */
  522. static inline void PDB_EnablePulseOutTrigger(PDB_Type *base, pdb_pulse_out_channel_mask_t channelMask, bool enable)
  523. {
  524. assert((uint8_t)channelMask < (1U << FSL_FEATURE_PDB_PULSE_OUT_COUNT));
  525. if (enable)
  526. {
  527. base->POEN |= PDB_POEN_POEN(channelMask);
  528. }
  529. else
  530. {
  531. base->POEN &= ~(PDB_POEN_POEN(channelMask));
  532. }
  533. }
  534. /*!
  535. * @brief Sets event values for the pulse out trigger.
  536. *
  537. * This function is used to set event values for the pulse output trigger.
  538. * These pulse output trigger delay values specify the delay for the PDB Pulse-out. Pulse-out goes high when the PDB
  539. * counter is equal to the pulse output high value (value1). Pulse-out goes low when the PDB counter is equal to the
  540. * pulse output low value (value2).
  541. *
  542. * @param base PDB peripheral base address.
  543. * @param channel Channel index for pulse out trigger channel.
  544. * @param value1 Setting value for pulse out high.
  545. * @param value2 Setting value for pulse out low.
  546. */
  547. static inline void PDB_SetPulseOutTriggerDelayValue(PDB_Type *base,
  548. pdb_pulse_out_trigger_channel_t channel,
  549. uint32_t value1,
  550. uint32_t value2)
  551. {
  552. assert((uint8_t)channel < (uint8_t)FSL_FEATURE_PDB_PULSE_OUT_COUNT);
  553. base->PODLY[channel] = PDB_PODLY_DLY1(value1) | PDB_PODLY_DLY2(value2);
  554. }
  555. /* @} */
  556. #if defined(__cplusplus)
  557. }
  558. #endif
  559. /*!
  560. * @}
  561. */
  562. #endif /* _FSL_PDB_H_ */