Rizky Ardi Maulana / mbed-os
Committer:
elessair
Date:
Sun Oct 23 15:10:02 2016 +0000
Revision:
0:f269e3021894
Initial commit

Who changed what in which revision?

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