SmartSnippets DA1459x SDK
hw_gpadc_v2.h
Go to the documentation of this file.
1 
34 #ifndef HW_GPADC_V2_H
35 #define HW_GPADC_V2_H
36 
37 
38 #if dg_configUSE_HW_GPADC
39 
40 #include <stdbool.h>
41 #include <stdint.h>
42 #include "sdk_defs.h"
43 
44 /***************************************************************************
45  ********* Macro, type and data-structure definitions ***************
46  ***************************************************************************/
47 
58 #define HW_GPADC_DIE_TEMP_SMPL_TIME 0x04
59 
66 #define HW_GPADC_DIE_TEMP_INIT_DELAY 0x68 /* 26 usec with a clock speed of (DivN_clk / 2) */
67 
72 typedef enum {
78 
83 #define HW_GPADC_VREF_MILLIVOLT (900)
84 
91 typedef enum {
101 
102 /*
103  * ADC input to GPIO pin mapping
104  */
105 typedef enum {
106  HW_GPADC_INPUT_ADC0 = 0,
107  HW_GPADC_INPUT_ADC1,
108  HW_GPADC_INPUT_ADC2,
109  HW_GPADC_INPUT_ADC3,
110  HW_GPADC_INPUT_ADC4 = 0x0A,
111  HW_GPADC_INPUT_ADC5 = 0x0B,
112  HW_GPADC_INPUT_ADC6 = 0x0C,
113  HW_GPADC_INPUT_ADC7 = 0x0D,
114  HW_GPADC_INPUT_RES1 = 0x0E,
115  HW_GPADC_INPUT_RES2 = 0x0F,
116 } HW_GPADC_GPIO_INPUT;
117 
122 typedef enum {
123  HW_GPADC_INP_P1_0 = HW_GPADC_INPUT_ADC0,
124  HW_GPADC_INP_P1_1 = HW_GPADC_INPUT_ADC1,
125  HW_GPADC_INP_P1_2 = HW_GPADC_INPUT_ADC2,
126  HW_GPADC_INP_P0_10 = HW_GPADC_INPUT_ADC3,
135  HW_GPADC_INP_P1_5 = HW_GPADC_INPUT_ADC4,
136  HW_GPADC_INP_P1_6 = HW_GPADC_INPUT_ADC5,
137  HW_GPADC_INP_P1_9 = HW_GPADC_INPUT_ADC6,
138  HW_GPADC_INP_P1_11 = HW_GPADC_INPUT_ADC7,
140 
145 typedef enum {
146  HW_GPADC_INN_P1_0 = HW_GPADC_INPUT_ADC0,
147  HW_GPADC_INN_P1_1 = HW_GPADC_INPUT_ADC1,
148  HW_GPADC_INN_P1_2 = HW_GPADC_INPUT_ADC2,
149  HW_GPADC_INN_P0_10 = HW_GPADC_INPUT_ADC3,
150  HW_GPADC_INN_P1_5 = HW_GPADC_INPUT_ADC4,
151  HW_GPADC_INN_P1_6 = HW_GPADC_INPUT_ADC5,
152  HW_GPADC_INN_P1_9 = HW_GPADC_INPUT_ADC6,
153  HW_GPADC_INN_P1_11 = HW_GPADC_INPUT_ADC7,
155 
160 typedef struct {
161  HW_GPADC_INPUT_MODE input_mode;
164  uint8_t sample_time;
165  bool continuous;
166  uint8_t interval;
167  HW_GPADC_MAX_INPUT_VOLTAGE input_attenuator;
168  bool chopping;
169  HW_GPADC_OVERSAMPLING oversampling;
170 #if HW_GPADC_DMA_SUPPORT
171  gpadc_dma_cfg *dma_setup;
172 #endif
174 
179 /***************************************************************************
180  **************** GP_ADC configuration functions *******************
181  ***************************************************************************/
182 
198 __STATIC_INLINE void hw_gpadc_set_ldo_delay(uint32_t delay)
199 {
200  /* Zero delay is not allowed by the h/w specification */
201  ASSERT_ERROR(delay != 0);
202  REG_SETF(GPADC, GP_ADC_CTRL3_REG, GP_ADC_EN_DEL, delay);
203 }
204 
220  __STATIC_INLINE void hw_gpadc_set_store_delay(HW_GPADC_STORE_DELAY delay)
221  {
222  REG_SETF(GPADC, GP_ADC_CTRL2_REG, GP_ADC_STORE_DEL, delay);
223  }
224 
231 __STATIC_INLINE void hw_gpadc_set_positive(HW_GPADC_INPUT_POSITIVE channel)
232 {
233  REG_SETF(GPADC, GP_ADC_SEL_REG, GP_ADC_SEL_P, channel);
234 }
235 
243 {
244  return REG_GETF(GPADC, GP_ADC_SEL_REG, GP_ADC_SEL_P);
245 }
246 
253 __STATIC_INLINE void hw_gpadc_set_negative(HW_GPADC_INPUT_NEGATIVE channel)
254 {
255  REG_SETF(GPADC, GP_ADC_SEL_REG, GP_ADC_SEL_N, channel);
256 }
257 
265 {
266  return REG_GETF(GPADC, GP_ADC_SEL_REG, GP_ADC_SEL_N);
267 }
268 
280 {
281  REG_SETF(GPADC, GP_ADC_CTRL2_REG, GP_ADC_ATTN, vmax);
282 }
283 
291 {
292  return REG_GETF(GPADC, GP_ADC_CTRL2_REG, GP_ADC_ATTN);
293 }
294 
304 __STATIC_INLINE void hw_gpadc_set_sample_time(uint8_t mult)
305 {
306  REG_SETF(GPADC, GP_ADC_CTRL2_REG, GP_ADC_SMPL_TIME, mult);
307 }
308 
317 __STATIC_INLINE uint8_t hw_gpadc_get_sample_time(void)
318 {
319  return REG_GETF(GPADC, GP_ADC_CTRL2_REG, GP_ADC_SMPL_TIME);
320 }
321 
331 __STATIC_INLINE void hw_gpadc_set_die_temp(bool enabled)
332 {
333  REG_SETF(GPADC, GP_ADC_CTRL_REG, DIE_TEMP_EN, !!enabled);
334 }
335 
344 __STATIC_INLINE bool hw_gpadc_get_die_temp(void)
345 {
346  return REG_GETF(GPADC, GP_ADC_CTRL_REG, DIE_TEMP_EN);
347 }
348 
358 __STATIC_INLINE void hw_gpadc_set_ldo_hold(bool enabled)
359 {
360  REG_SETF(GPADC, GP_ADC_CTRL_REG, GP_ADC_LDO_HOLD, !!enabled);
361 }
362 
371 __STATIC_INLINE bool hw_gpadc_get_ldo_hold(void)
372 {
373  return (bool) REG_GETF(GPADC, GP_ADC_CTRL_REG, GP_ADC_LDO_HOLD);
374 }
375 
380 /***************************************************************************
381  **************** Basic functionality of the GPADC *******************
382  ***************************************************************************/
383 
398 int16_t hw_gpadc_get_voltage(void);
399 
404 /***************************************************************************
405  ****************** TEMPERATURE SENSOR functions *********************
406  ***************************************************************************/
407 
434 int16_t hw_gpadc_convert_to_celsius_x100_util(const hw_gpadc_config_t *cfg, uint16_t raw_val);
435 
444 uint16_t hw_gpadc_convert_celsius_x100_to_raw_val_util(const hw_gpadc_config_t *cfg, int16_t temperature);
445 
453 void hw_gpadc_store_ambient_calibration_point(uint16_t raw_val, int16_t temp);
454 
459 #endif /* dg_configUSE_HW_GPADC */
460 #endif /* HW_GPADC_V2_H */
hw_gpadc_set_ldo_hold
__STATIC_INLINE void hw_gpadc_set_ldo_hold(bool enabled)
Set the mode of bandgap reference.
Definition: hw_gpadc_v2.h:356
hw_gpadc_get_input_attenuator_state
__STATIC_INLINE HW_GPADC_MAX_INPUT_VOLTAGE hw_gpadc_get_input_attenuator_state(void)
Get the current state of input attenuator.
Definition: hw_gpadc_v2.h:288
hw_gpadc_set_die_temp
__STATIC_INLINE void hw_gpadc_set_die_temp(bool enabled)
Set DIE_TEMP_EN field.
Definition: hw_gpadc_v2.h:329
HW_GPADC_STORE_DEL_8_CYCLES
Definition: hw_gpadc_v2.h:98
REG_SETF
#define REG_SETF(base, reg, field, new_val)
Set the value of a register field.
Definition: sdk_defs.h:738
HW_GPADC_INPUT_VOLTAGE_UP_TO_3V6
Definition: hw_gpadc_v2.h:75
hw_gpadc_convert_to_celsius_x100_util
int16_t hw_gpadc_convert_to_celsius_x100_util(const hw_gpadc_config_t *cfg, uint16_t raw_val)
Convert a 16-bit, left-aligned, raw value to temperature. For accurate conversions using this functio...
hw_gpadc_set_input_attenuator_state
__STATIC_INLINE void hw_gpadc_set_input_attenuator_state(HW_GPADC_MAX_INPUT_VOLTAGE vmax)
Set state of input attenuator.
Definition: hw_gpadc_v2.h:277
ASSERT_ERROR
#define ASSERT_ERROR(a)
Assert as error macro.
Definition: sdk_defs.h:422
HW_GPADC_INPUT_VOLTAGE_UP_TO_2V7
Definition: hw_gpadc_v2.h:74
hw_gpadc_get_sample_time
__STATIC_INLINE uint8_t hw_gpadc_get_sample_time(void)
Get the current sample time. The sample time is calculated, based on this register field value.
Definition: hw_gpadc_v2.h:315
HW_GPADC_INP_P1_2
Definition: hw_gpadc_v2.h:124
HW_GPADC_STORE_DEL_7_CYCLES
Definition: hw_gpadc_v2.h:97
hw_gpadc_set_positive
__STATIC_INLINE void hw_gpadc_set_positive(HW_GPADC_INPUT_POSITIVE channel)
Set positive input channel.
Definition: hw_gpadc_v2.h:229
HW_GPADC_INP_DIE_TEMP
Definition: hw_gpadc_v2.h:126
HW_GPADC_INP_VDDIO
Definition: hw_gpadc_v2.h:133
HW_GPADC_STORE_DEL_2_CYCLES
Definition: hw_gpadc_v2.h:92
HW_GPADC_STORE_DELAY
HW_GPADC_STORE_DELAY
Store delay.
Definition: hw_gpadc_v2.h:90
sdk_defs.h
Central include header file with platform definitions.
HW_GPADC_INPUT_MODE
HW_GPADC_INPUT_MODE
ADC input mode.
Definition: hw_gpadc.h:120
HW_GPADC_INP_VDDD
Definition: hw_gpadc_v2.h:131
HW_GPADC_INP_P1_0
Definition: hw_gpadc_v2.h:122
hw_gpadc_get_die_temp
__STATIC_INLINE bool hw_gpadc_get_die_temp(void)
Get the current status of the die-temperature sensor. Output can be measured on GPADC input 4.
Definition: hw_gpadc_v2.h:342
HW_GPADC_INN_P1_0
Definition: hw_gpadc_v2.h:145
HW_GPADC_INPUT_POSITIVE
HW_GPADC_INPUT_POSITIVE
ADC input - Positive side.
Definition: hw_gpadc_v2.h:121
HW_GPADC_INN_P1_9
Definition: hw_gpadc_v2.h:151
HW_GPADC_INP_P1_1
Definition: hw_gpadc_v2.h:123
hw_gpadc_get_voltage
int16_t hw_gpadc_get_voltage(void)
Get the measured voltage in mVolt.
HW_GPADC_STORE_DEL_6_CYCLES
Definition: hw_gpadc_v2.h:96
HW_GPADC_INPUT_VOLTAGE_UP_TO_1V8
Definition: hw_gpadc_v2.h:73
HW_GPADC_INN_P1_11
Definition: hw_gpadc_v2.h:152
HW_GPADC_INP_P1_5
Definition: hw_gpadc_v2.h:134
HW_GPADC_STORE_DEL_3_CYCLES
Definition: hw_gpadc_v2.h:93
HW_GPADC_INP_P0_10
Definition: hw_gpadc_v2.h:125
hw_gpadc_set_sample_time
__STATIC_INLINE void hw_gpadc_set_sample_time(uint8_t mult)
Set sample time.
Definition: hw_gpadc_v2.h:302
HW_GPADC_INP_P1_11
Definition: hw_gpadc_v2.h:137
HW_GPADC_INP_VBAT
Definition: hw_gpadc_v2.h:130
HW_GPADC_STORE_DEL_5_CYCLES
Definition: hw_gpadc_v2.h:95
HW_GPADC_INPUT_VOLTAGE_UP_TO_0V9
Definition: hw_gpadc_v2.h:72
hw_gpadc_set_ldo_delay
__STATIC_INLINE void hw_gpadc_set_ldo_delay(uint32_t delay)
Set the delay required to enable the ADC_LDO. 0: Not allowed 1: 4x ADC_CLK period....
Definition: hw_gpadc_v2.h:196
HW_GPADC_STORE_DEL_0
Definition: hw_gpadc_v2.h:91
HW_GPADC_INP_P1_6
Definition: hw_gpadc_v2.h:135
HW_GPADC_OVERSAMPLING
HW_GPADC_OVERSAMPLING
GPADC oversampling.
Definition: hw_gpadc.h:132
HW_GPADC_INP_P1_9
Definition: hw_gpadc_v2.h:136
hw_gpadc_set_store_delay
__STATIC_INLINE void hw_gpadc_set_store_delay(HW_GPADC_STORE_DELAY delay)
Set STORE_DEL field.
Definition: hw_gpadc_v2.h:218
hw_gpadc_config_t
ADC configuration.
Definition: hw_gpadc_v2.h:159
hw_gpadc_set_negative
__STATIC_INLINE void hw_gpadc_set_negative(HW_GPADC_INPUT_NEGATIVE channel)
Set negative input channel.
Definition: hw_gpadc_v2.h:251
HW_GPADC_INN_P1_1
Definition: hw_gpadc_v2.h:146
HW_GPADC_INP_VDCDC
Definition: hw_gpadc_v2.h:129
HW_GPADC_INP_VSSA
Definition: hw_gpadc_v2.h:132
HW_GPADC_STORE_DEL_4_CYCLES
Definition: hw_gpadc_v2.h:94
HW_GPADC_INN_P1_5
Definition: hw_gpadc_v2.h:149
hw_gpadc_store_ambient_calibration_point
void hw_gpadc_store_ambient_calibration_point(uint16_t raw_val, int16_t temp)
Store temperature calibration point at ambient temperature.
REG_GETF
#define REG_GETF(base, reg, field)
Return the value of a register field.
Definition: sdk_defs.h:711
hw_gpadc_convert_celsius_x100_to_raw_val_util
uint16_t hw_gpadc_convert_celsius_x100_to_raw_val_util(const hw_gpadc_config_t *cfg, int16_t temperature)
Convert a temperature value to raw GPADC value.
HW_GPADC_INPUT_NEGATIVE
HW_GPADC_INPUT_NEGATIVE
ADC input - Negative side.
Definition: hw_gpadc_v2.h:144
HW_GPADC_MAX_INPUT_VOLTAGE
HW_GPADC_MAX_INPUT_VOLTAGE
GPADC input voltages.
Definition: hw_gpadc_v2.h:71
hw_gpadc_get_positive
__STATIC_INLINE HW_GPADC_INPUT_POSITIVE hw_gpadc_get_positive(void)
Get the current positive input channel.
Definition: hw_gpadc_v2.h:240
hw_gpadc_get_negative
__STATIC_INLINE HW_GPADC_INPUT_NEGATIVE hw_gpadc_get_negative(void)
Get the current negative input channel.
Definition: hw_gpadc_v2.h:262
HW_GPADC_INN_P1_6
Definition: hw_gpadc_v2.h:150
hw_gpadc_get_ldo_hold
__STATIC_INLINE bool hw_gpadc_get_ldo_hold(void)
Get the current mode of bandgap reference.
Definition: hw_gpadc_v2.h:369
HW_GPADC_INN_P0_10
Definition: hw_gpadc_v2.h:148
HW_GPADC_INN_P1_2
Definition: hw_gpadc_v2.h:147