adc_driver.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2016, Freescale Semiconductor, Inc.
3  * Copyright 2016-2017 NXP
4  * All rights reserved.
5  *
6  * THIS SOFTWARE IS PROVIDED BY NXP "AS IS" AND ANY EXPRESSED OR
7  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
8  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
9  * IN NO EVENT SHALL NXP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
10  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
11  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
12  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
13  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
14  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
15  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
16  * THE POSSIBILITY OF SUCH DAMAGE.
17  */
18 
19 #ifndef ADC_DRIVER_H
20 #define ADC_DRIVER_H
21 
22 #include <stdint.h>
23 #include <stdbool.h>
24 #include "device_registers.h"
25 
52 /*******************************************************************************
53  * Definitions
54  ******************************************************************************/
60 typedef enum
61 {
62  ADC_CLK_DIVIDE_1 = 0x00U,
63  ADC_CLK_DIVIDE_2 = 0x01U,
64  ADC_CLK_DIVIDE_4 = 0x02U,
67 
73 typedef enum
74 {
79 
85 typedef enum
86 {
87  ADC_CLK_ALT_1 = 0x00U,
88  ADC_CLK_ALT_2 = 0x01U,
89  ADC_CLK_ALT_3 = 0x02U,
90  ADC_CLK_ALT_4 = 0x03U
92 
98 typedef enum
99 {
102 } adc_trigger_t;
103 
109 typedef enum
110 {
115 
121 typedef enum
122 {
126 
132 typedef enum
133 {
140 
146 typedef enum
147 {
151 
157 typedef enum
158 {
159  ADC_AVERAGE_4 = 0x00U,
160  ADC_AVERAGE_8 = 0x01U,
161  ADC_AVERAGE_16 = 0x02U,
162  ADC_AVERAGE_32 = 0x03U
163 } adc_average_t;
164 
180 typedef enum
181 {
184 #if (FEATURE_ADC_HAS_CHANNEL_2)
186 #endif
192 #if (FEATURE_ADC_HAS_CHANNEL_8)
194 #endif
201 #if (FEATURE_ADC_MAX_NUM_EXT_CHANS > 15)
203 #if (FEATURE_ADC_MAX_NUM_EXT_CHANS > 16)
204  ADC_INPUTCHAN_EXT16 = 0x20U,
205  ADC_INPUTCHAN_EXT17 = 0x21U,
206  ADC_INPUTCHAN_EXT18 = 0x22U,
207  ADC_INPUTCHAN_EXT19 = 0x23U,
208  ADC_INPUTCHAN_EXT20 = 0x24U,
209  ADC_INPUTCHAN_EXT21 = 0x25U,
210  ADC_INPUTCHAN_EXT22 = 0x26U,
211  ADC_INPUTCHAN_EXT23 = 0x27U,
212 #if (FEATURE_ADC_MAX_NUM_EXT_CHANS > 24)
213  ADC_INPUTCHAN_EXT24 = 0x28U,
214  ADC_INPUTCHAN_EXT25 = 0x29U,
215  ADC_INPUTCHAN_EXT26 = 0x2AU,
216  ADC_INPUTCHAN_EXT27 = 0x2BU,
217  ADC_INPUTCHAN_EXT28 = 0x2CU,
218  ADC_INPUTCHAN_EXT29 = 0x2DU,
219  ADC_INPUTCHAN_EXT30 = 0x2EU,
220  ADC_INPUTCHAN_EXT31 = 0x2FU,
221 #endif /* (FEATURE_ADC_MAX_NUM_EXT_CHANS > 24) */
222 #endif /* (FEATURE_ADC_MAX_NUM_EXT_CHANS > 16) */
223 #endif/* (FEATURE_ADC_MAX_NUM_EXT_CHANS > 15) */
224 
244 
252 typedef struct
253 {
255  uint8_t sampleTime;
261  bool dmaEnable;
266 
275 typedef struct
276 {
280  uint16_t compVal1;
281  uint16_t compVal2;
283 
292 typedef struct
293 {
294  bool hwAvgEnable;
297 
306 typedef struct
307 {
311 
320 typedef struct
321 {
322  uint16_t userGain;
323  uint16_t userOffset;
325 
330 typedef enum
331 {
335 
336 /*******************************************************************************
337  * API
338  ******************************************************************************/
339 
340 #if defined (__cplusplus)
341 extern "C" {
342 #endif
343 
362 
372 void ADC_DRV_ConfigConverter(const uint32_t instance,
373  const adc_converter_config_t * const config);
374 
384 void ADC_DRV_GetConverterConfig(const uint32_t instance,
385  adc_converter_config_t * const config);
386 
420 
431 void ADC_DRV_ConfigHwCompare(const uint32_t instance,
432  const adc_compare_config_t * const config);
433 
443 void ADC_DRV_GetHwCompareConfig(const uint32_t instance,
444  adc_compare_config_t * const config);
445 
468 
479 void ADC_DRV_ConfigHwAverage(const uint32_t instance,
480  const adc_average_config_t * const config);
481 
491 void ADC_DRV_GetHwAverageConfig(const uint32_t instance,
492  adc_average_config_t * const config);
493 
513 void ADC_DRV_InitChanStruct(adc_chan_config_t * const config);
514 
530 void ADC_DRV_ConfigChan(const uint32_t instance,
531  const uint8_t chanIndex,
532  const adc_chan_config_t * const config);
533 
544 void ADC_DRV_GetChanConfig(const uint32_t instance,
545  const uint8_t chanIndex,
546  adc_chan_config_t * const config);
547 
554 void ADC_DRV_SetSwPretrigger(const uint32_t instance,
555  const adc_sw_pretrigger_t swPretrigger);
556 
591 void ADC_DRV_Reset(const uint32_t instance);
592 
601 void ADC_DRV_WaitConvDone(const uint32_t instance);
602 
615 bool ADC_DRV_GetConvCompleteFlag(const uint32_t instance,
616  const uint8_t chanIndex);
643 void ADC_DRV_GetChanResult(const uint32_t instance,
644  const uint8_t chanIndex,
645  uint16_t * const result);
646 
670 void ADC_DRV_AutoCalibration(const uint32_t instance);
671 
687 
698 void ADC_DRV_ConfigUserCalibration(const uint32_t instance,
699  const adc_calibration_t * const config);
700 
710 void ADC_DRV_GetUserCalibration(const uint32_t instance,
711  adc_calibration_t * const config);
712 
730 IRQn_Type ADC_DRV_GetInterruptNumber(const uint32_t instance);
731 
751 void ADC_DRV_ClearLatchedTriggers(const uint32_t instance,
752  const adc_latch_clear_t clearMode);
753 
761 void ADC_DRV_ClearTriggerErrors(const uint32_t instance);
762 
771 uint32_t ADC_DRV_GetTriggerErrorFlags(const uint32_t instance);
772 
775 #if defined (__cplusplus)
776 }
777 #endif
778 
781 #endif /* ADC_DRIVER_H */
782 /*******************************************************************************
783  * EOF
784  ******************************************************************************/
adc_resolution_t
Conversion resolution selection.
Definition: adc_driver.h:73
Defines the user calibration configuration.
Definition: adc_driver.h:320
adc_voltage_reference_t
Voltage reference selection.
Definition: adc_driver.h:146
uint32_t ADC_DRV_GetTriggerErrorFlags(const uint32_t instance)
Get the trigger error flags bits of the ADC instance.
Definition: adc_driver.c:743
void ADC_DRV_AutoCalibration(const uint32_t instance)
Executes an Auto-Calibration.
Definition: adc_driver.c:548
adc_trigger_sel_t triggerSel
Definition: adc_driver.h:260
adc_voltage_reference_t voltageRef
Definition: adc_driver.h:262
adc_clk_divide_t
Clock Divider selection.
Definition: adc_driver.h:60
void ADC_DRV_GetHwAverageConfig(const uint32_t instance, adc_average_config_t *const config)
Gets the current Hardware Average configuration.
Definition: adc_driver.c:334
void ADC_DRV_InitHwCompareStruct(adc_compare_config_t *const config)
Initializes the Hardware Compare configuration structure.
Definition: adc_driver.c:233
void ADC_DRV_InitHwAverageStruct(adc_average_config_t *const config)
Initializes the Hardware Average configuration structure.
Definition: adc_driver.c:299
bool ADC_DRV_GetConvCompleteFlag(const uint32_t instance, const uint8_t chanIndex)
Gets the control channel Conversion Complete Flag state.
Definition: adc_driver.c:483
void ADC_DRV_ConfigConverter(const uint32_t instance, const adc_converter_config_t *const config)
Configures the converter with the given configuration structure.
Definition: adc_driver.c:91
adc_input_clock_t inputClock
Definition: adc_driver.h:257
void ADC_DRV_ConfigUserCalibration(const uint32_t instance, const adc_calibration_t *const config)
Configures the User Calibration feature with the given configuration structure.
Definition: adc_driver.c:648
void ADC_DRV_Reset(const uint32_t instance)
Resets the converter (sets all configurations to reset values)
Definition: adc_driver.c:175
void ADC_DRV_SetSwPretrigger(const uint32_t instance, const adc_sw_pretrigger_t swPretrigger)
This function sets the software pretrigger - affects only first 4 control channels.
Definition: adc_driver.c:423
adc_clk_divide_t clockDivide
Definition: adc_driver.h:254
void ADC_DRV_GetChanResult(const uint32_t instance, const uint8_t chanIndex, uint16_t *const result)
Gets the last result for the selected control channel.
Definition: adc_driver.c:510
uint16_t userGain
Definition: adc_driver.h:322
Defines the hardware average configuration.
Definition: adc_driver.h:292
adc_trigger_t trigger
Definition: adc_driver.h:258
void ADC_DRV_ConfigChan(const uint32_t instance, const uint8_t chanIndex, const adc_chan_config_t *const config)
Configures the selected control channel with the given configuration structure.
Definition: adc_driver.c:378
void ADC_DRV_ConfigHwCompare(const uint32_t instance, const adc_compare_config_t *const config)
Configures the Hardware Compare feature with the given configuration structure.
Definition: adc_driver.c:252
adc_input_clock_t
Input clock source selection.
Definition: adc_driver.h:85
adc_pretrigger_sel_t
Pretrigger types selectable from Trigger Latching and Arbitration Unit.
Definition: adc_driver.h:109
void ADC_DRV_GetChanConfig(const uint32_t instance, const uint8_t chanIndex, adc_chan_config_t *const config)
Gets the current control channel configuration for the selected channel index.
Definition: adc_driver.c:403
void ADC_DRV_InitChanStruct(adc_chan_config_t *const config)
Initializes the control channel configuration structure.
Definition: adc_driver.c:356
adc_sw_pretrigger_t
Software pretriggers which may be set from Trigger Latching and Arbitration Unit. ...
Definition: adc_driver.h:132
void ADC_DRV_InitConverterStruct(adc_converter_config_t *const config)
Initializes the converter configuration structure.
Definition: adc_driver.c:66
void ADC_DRV_ClearTriggerErrors(const uint32_t instance)
Clear all latch trigger error.
Definition: adc_driver.c:727
void ADC_DRV_GetConverterConfig(const uint32_t instance, adc_converter_config_t *const config)
Gets the current converter configuration.
Definition: adc_driver.c:137
IRQn_Type
Defines the Interrupt Numbers definitions.
Definition: S32K118.h:188
void ADC_DRV_InitUserCalibrationStruct(adc_calibration_t *const config)
Initializes the User Calibration configuration structure.
Definition: adc_driver.c:632
IRQn_Type ADC_DRV_GetInterruptNumber(const uint32_t instance)
Returns the interrupt number for the ADC instance.
Definition: adc_driver.c:685
#define ADC_SC1_ADCH_MASK
Definition: S32K118.h:328
Defines the converter configuration.
Definition: adc_driver.h:252
adc_trigger_sel_t
Trigger source selectable from Trigger Latching and Arbitration Unit.
Definition: adc_driver.h:121
adc_trigger_t
Trigger type selection.
Definition: adc_driver.h:98
void ADC_DRV_GetUserCalibration(const uint32_t instance, adc_calibration_t *const config)
Gets the current User Calibration configuration.
Definition: adc_driver.c:667
adc_inputchannel_t
Enumeration of input channels assignable to a control channel. Note 0: entries in this enum are aff...
Definition: adc_driver.h:180
adc_average_t
Hardware average selection.
Definition: adc_driver.h:157
adc_average_t hwAverage
Definition: adc_driver.h:295
void ADC_DRV_ClearLatchedTriggers(const uint32_t instance, const adc_latch_clear_t clearMode)
Clear latched triggers under processing.
Definition: adc_driver.c:702
adc_latch_clear_t
Defines the trigger latch clear method Implements : adc_latch_clear_t_Class.
Definition: adc_driver.h:330
void ADC_DRV_WaitConvDone(const uint32_t instance)
Waits for a conversion/calibration to finish.
Definition: adc_driver.c:463
adc_resolution_t resolution
Definition: adc_driver.h:256
uint16_t userOffset
Definition: adc_driver.h:323
adc_pretrigger_sel_t pretriggerSel
Definition: adc_driver.h:259
void ADC_DRV_GetHwCompareConfig(const uint32_t instance, adc_compare_config_t *const config)
Gets the current Hardware Compare configuration.
Definition: adc_driver.c:274
void ADC_DRV_ConfigHwAverage(const uint32_t instance, const adc_average_config_t *const config)
Configures the Hardware Average feature with the given configuration structure.
Definition: adc_driver.c:315
Defines the hardware compare configuration.
Definition: adc_driver.h:275
adc_inputchannel_t channel
Definition: adc_driver.h:309
Defines the control channel configuration.
Definition: adc_driver.h:306