S32 SDK
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 
33 /*******************************************************************************
34  * Definitions
35  ******************************************************************************/
41 typedef enum
42 {
43  ADC_CLK_DIVIDE_1 = 0x00U,
44  ADC_CLK_DIVIDE_2 = 0x01U,
45  ADC_CLK_DIVIDE_4 = 0x02U,
48 
54 typedef enum
55 {
60 
66 typedef enum
67 {
68  ADC_CLK_ALT_1 = 0x00U,
69  ADC_CLK_ALT_2 = 0x01U,
70  ADC_CLK_ALT_3 = 0x02U,
71  ADC_CLK_ALT_4 = 0x03U
73 
79 typedef enum
80 {
84 
90 typedef enum
91 {
96 
102 typedef enum
103 {
107 
113 typedef enum
114 {
121 
127 typedef enum
128 {
132 
138 typedef enum
139 {
140  ADC_AVERAGE_4 = 0x00U,
141  ADC_AVERAGE_8 = 0x01U,
142  ADC_AVERAGE_16 = 0x02U,
143  ADC_AVERAGE_32 = 0x03U
144 } adc_average_t;
145 
156 typedef enum
157 {
175 #if (FEATURE_ADC_MAX_NUM_EXT_CHANS > 16)
176  ADC_INPUTCHAN_EXT16 = 0x20U,
177  ADC_INPUTCHAN_EXT17 = 0x21U,
178  ADC_INPUTCHAN_EXT18 = 0x22U,
179  ADC_INPUTCHAN_EXT19 = 0x23U,
180  ADC_INPUTCHAN_EXT20 = 0x24U,
181  ADC_INPUTCHAN_EXT21 = 0x25U,
182  ADC_INPUTCHAN_EXT22 = 0x26U,
183  ADC_INPUTCHAN_EXT23 = 0x27U,
184  ADC_INPUTCHAN_EXT24 = 0x28U,
185  ADC_INPUTCHAN_EXT25 = 0x29U,
186  ADC_INPUTCHAN_EXT26 = 0x2AU,
187  ADC_INPUTCHAN_EXT27 = 0x2BU,
188  ADC_INPUTCHAN_EXT28 = 0x2CU,
189  ADC_INPUTCHAN_EXT29 = 0x2DU,
190  ADC_INPUTCHAN_EXT30 = 0x2EU,
191  ADC_INPUTCHAN_EXT31 = 0x2FU,
192 #endif /* (FEATURE_ADC_MAX_NUM_EXT_CHANS > 16) */
193 
206 
214 typedef struct
215 {
217  uint8_t sampleTime;
223  bool dmaEnable;
227 
236 typedef struct
237 {
241  uint16_t compVal1;
242  uint16_t compVal2;
244 
253 typedef struct
254 {
255  bool hwAvgEnable;
258 
267 typedef struct
268 {
272 
281 typedef struct
282 {
283  uint16_t userGain;
284  uint16_t userOffset;
286 
291 typedef enum
292 {
296 
297 /*******************************************************************************
298  * API
299  ******************************************************************************/
300 
301 #if defined (__cplusplus)
302 extern "C" {
303 #endif
304 
323 
333 void ADC_DRV_ConfigConverter(const uint32_t instance,
334  const adc_converter_config_t * const config);
335 
345 void ADC_DRV_GetConverterConfig(const uint32_t instance,
346  adc_converter_config_t * const config);
347 
381 
392 void ADC_DRV_ConfigHwCompare(const uint32_t instance,
393  const adc_compare_config_t * const config);
394 
404 void ADC_DRV_GetHwCompareConfig(const uint32_t instance,
405  adc_compare_config_t * const config);
406 
429 
440 void ADC_DRV_ConfigHwAverage(const uint32_t instance,
441  const adc_average_config_t * const config);
442 
452 void ADC_DRV_GetHwAverageConfig(const uint32_t instance,
453  adc_average_config_t * const config);
454 
474 void ADC_DRV_InitChanStruct(adc_chan_config_t * const config);
475 
491 void ADC_DRV_ConfigChan(const uint32_t instance,
492  const uint8_t chanIndex,
493  const adc_chan_config_t * const config);
494 
505 void ADC_DRV_GetChanConfig(const uint32_t instance,
506  const uint8_t chanIndex,
507  adc_chan_config_t * const config);
508 
515 void ADC_DRV_SetSwPretrigger(const uint32_t instance,
516  const adc_sw_pretrigger_t swPretrigger);
517 
552 void ADC_DRV_Reset(const uint32_t instance);
553 
562 void ADC_DRV_WaitConvDone(const uint32_t instance);
563 
576 bool ADC_DRV_GetConvCompleteFlag(const uint32_t instance,
577  const uint8_t chanIndex);
604 void ADC_DRV_GetChanResult(const uint32_t instance,
605  const uint8_t chanIndex,
606  uint16_t * const result);
607 
631 void ADC_DRV_AutoCalibration(const uint32_t instance);
632 
646 
657 void ADC_DRV_ConfigUserCalibration(const uint32_t instance,
658  const adc_calibration_t * const config);
659 
669 void ADC_DRV_GetUserCalibration(const uint32_t instance,
670  adc_calibration_t * const config);
671 
689 IRQn_Type ADC_DRV_GetInterruptNumber(const uint32_t instance);
690 
710 void ADC_DRV_ClearLatchedTriggers(const uint32_t instance,
711  const adc_latch_clear_t clearMode);
712 
720 void ADC_DRV_ClearTriggerErrors(const uint32_t instance);
721 
730 uint32_t ADC_DRV_GetTriggerErrorFlags(const uint32_t instance);
731 
734 #if defined (__cplusplus)
735 }
736 #endif
737 
740 #endif /* ADC_DRIVER_H */
741 /*******************************************************************************
742  * EOF
743  ******************************************************************************/
adc_resolution_t
Conversion resolution selection.
Definition: adc_driver.h:54
Defines the user calibration configuration.
Definition: adc_driver.h:281
adc_voltage_reference_t
Voltage reference selection.
Definition: adc_driver.h:127
uint32_t ADC_DRV_GetTriggerErrorFlags(const uint32_t instance)
This function returns the trigger error flags bits of the ADC instance.
Definition: adc_driver.c:646
void ADC_DRV_AutoCalibration(const uint32_t instance)
Executes an Auto-Calibration.
Definition: adc_driver.c:490
adc_trigger_sel_t triggerSel
Definition: adc_driver.h:222
adc_voltage_reference_t voltageRef
Definition: adc_driver.h:224
adc_clk_divide_t
Clock Divider selection.
Definition: adc_driver.h:41
void ADC_DRV_GetHwAverageConfig(const uint32_t instance, adc_average_config_t *const config)
Gets the current Hardware Average configuration.
Definition: adc_driver.c:287
void ADC_DRV_InitHwCompareStruct(adc_compare_config_t *const config)
Initializes the Hardware Compare configuration structure.
Definition: adc_driver.c:186
void ADC_DRV_InitHwAverageStruct(adc_average_config_t *const config)
Initializes the Hardware Average configuration structure.
Definition: adc_driver.c:252
bool ADC_DRV_GetConvCompleteFlag(const uint32_t instance, const uint8_t chanIndex)
Gets the control channel Conversion Complete Flag state.
Definition: adc_driver.c:429
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:83
adc_input_clock_t inputClock
Definition: adc_driver.h:219
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:551
void ADC_DRV_Reset(const uint32_t instance)
Resets the converter (sets all configurations to reset values)
Definition: adc_driver.c:137
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:372
adc_clk_divide_t clockDivide
Definition: adc_driver.h:216
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:456
uint16_t userGain
Definition: adc_driver.h:283
Defines the hardware average configuration.
Definition: adc_driver.h:253
adc_trigger_t trigger
Definition: adc_driver.h:220
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:331
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:205
adc_input_clock_t
Input clock source selection.
Definition: adc_driver.h:66
adc_pretrigger_sel_t
Pretrigger types selectable from Trigger Latching and Arbitration Unit.
Definition: adc_driver.h:90
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:352
void ADC_DRV_InitChanStruct(adc_chan_config_t *const config)
Initializes the control channel configuration structure.
Definition: adc_driver.c:309
adc_sw_pretrigger_t
Software pretriggers which may be set from Trigger Latching and Arbitration Unit. ...
Definition: adc_driver.h:113
void ADC_DRV_InitConverterStruct(adc_converter_config_t *const config)
Initializes the converter configuration structure.
Definition: adc_driver.c:59
void ADC_DRV_ClearTriggerErrors(const uint32_t instance)
Clear all latch trigger error.
Definition: adc_driver.c:630
void ADC_DRV_GetConverterConfig(const uint32_t instance, adc_converter_config_t *const config)
Gets the current converter configuration.
Definition: adc_driver.c:110
void ADC_DRV_InitUserCalibrationStruct(adc_calibration_t *const config)
Initializes the User Calibration configuration structure.
Definition: adc_driver.c:535
IRQn_Type ADC_DRV_GetInterruptNumber(const uint32_t instance)
Returns the interrupt number for the ADC instance.
Definition: adc_driver.c:588
#define ADC_SC1_ADCH_MASK
Definition: S32K142.h:392
Defines the converter configuration.
Definition: adc_driver.h:214
adc_trigger_sel_t
Trigger source selectable from Trigger Latching and Arbitration Unit.
Definition: adc_driver.h:102
adc_trigger_t
Trigger type selection.
Definition: adc_driver.h:79
void ADC_DRV_GetUserCalibration(const uint32_t instance, adc_calibration_t *const config)
Gets the current User Calibration configuration.
Definition: adc_driver.c:570
adc_inputchannel_t
Enumeration of input channels assignable to a control channel. Note 0: entries in this enum are aff...
Definition: adc_driver.h:156
adc_average_t
Hardware average selection.
Definition: adc_driver.h:138
adc_average_t hwAverage
Definition: adc_driver.h:256
void ADC_DRV_ClearLatchedTriggers(const uint32_t instance, const adc_latch_clear_t clearMode)
Clear latched triggers under processing.
Definition: adc_driver.c:605
adc_latch_clear_t
Defines the trigger latch clear method Implements : adc_latch_clear_t_Class.
Definition: adc_driver.h:291
void ADC_DRV_WaitConvDone(const uint32_t instance)
Waits for a conversion/calibration to finish.
Definition: adc_driver.c:409
adc_resolution_t resolution
Definition: adc_driver.h:218
uint16_t userOffset
Definition: adc_driver.h:284
adc_pretrigger_sel_t pretriggerSel
Definition: adc_driver.h:221
void ADC_DRV_GetHwCompareConfig(const uint32_t instance, adc_compare_config_t *const config)
Gets the current Hardware Compare configuration.
Definition: adc_driver.c:227
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:268
Defines the hardware compare configuration.
Definition: adc_driver.h:236
adc_inputchannel_t channel
Definition: adc_driver.h:270
IRQn_Type
Defines the Interrupt Numbers definitions.
Definition: S32K142.h:192
Defines the control channel configuration.
Definition: adc_driver.h:267