155 lines
3.6 KiB
C
155 lines
3.6 KiB
C
/**
|
|
* @copyright 2015 Indie Semiconductor.
|
|
*
|
|
* This file is proprietary to Indie Semiconductor.
|
|
* All rights reserved. Reproduction or distribution, in whole
|
|
* or in part, is forbidden except by express written permission
|
|
* of Indie Semiconductor.
|
|
*
|
|
* @file adc_device.h
|
|
*/
|
|
|
|
#ifndef ADC_DEVICE_H__
|
|
#define ADC_DEVICE_H__
|
|
|
|
#include <stddef.h>
|
|
#include <string.h>
|
|
#include <stdint.h>
|
|
#include <stdbool.h>
|
|
#include <meta.h>
|
|
#include <pdsTask.h>
|
|
|
|
typedef enum {
|
|
ADC_REF_VBG = 0U, /* VBG = 1.22V */
|
|
ADC_REF_VBG_2TIMES, /* 2* VBG */
|
|
ADC_REF_VDD_3V3,
|
|
}AdcReference_t;
|
|
|
|
typedef enum {
|
|
ADC_TRIGGER_SEL_GENERAL_TRIGSRC = 0x00U,
|
|
ADC_TRIGGER_SEL_PWM_AUX_TRIGSRC,
|
|
}AdcTriggerSEL_t;
|
|
|
|
typedef enum {
|
|
ADC_PWMAUX_CHN0 = 0x00U,
|
|
ADC_PWMAUX_CHN1,
|
|
ADC_PWMAUX_CHN2,
|
|
ADC_PWMAUX_CHN3,
|
|
ADC_PWMAUX_CHN4,
|
|
ADC_PWMAUX_CHN5,
|
|
}AdcPwmAuxChannel_t;
|
|
|
|
typedef enum {
|
|
ADC_PWMAUX_TRIG_SRC_PWM_RISING = 0x01U,
|
|
ADC_PWMAUX_TRIG_SRC_PWM_FALLING = 0x02U,
|
|
ADC_PWMAUX_TRIG_SRC_PWM_PERIOD0 = 0x04U,
|
|
ADC_PWMAUX_TRIG_SRC_PWM_PERIOD1 = 0x08U,
|
|
}AdcPwmAuxTriggerSRC_t;
|
|
|
|
typedef enum {
|
|
ADC_TRIG_SRC_SOFT_INPUT = 0x00U,
|
|
ADC_TRIG_SRC_PWM_CMP0 = 0x08U,
|
|
ADC_TRIG_SRC_PWM_CMP1 = 0x09U,
|
|
ADC_TRIG_SRC_PWM_PCC3_1 = 0x0AU,
|
|
ADC_TRIG_SRC_PWM_CT6OUT = 0x0BU,
|
|
ADC_TRIG_SRC_PWM_CT3OUT = 0x0CU,
|
|
ADC_TRIG_SRC_GT1ADCTRIG = 0x0DU,
|
|
ADC_TRIG_SRC_GT2ADCTRIG = 0x0EU,
|
|
ADC_TRIG_SRC_GT3ADCTRIG = 0x0FU
|
|
}AdcGeneralTriggerSRC_t;
|
|
|
|
|
|
typedef enum {
|
|
ADC_AFE_GAIN_22_OF_32 = 0U,
|
|
ADC_AFE_GAIN_31_OF_32,
|
|
}AdcAfeGain_t;
|
|
|
|
typedef enum {
|
|
ADC_AFE_INPUT_ALL_EXT = 0U,
|
|
ADC_AFE_INPUT_INP_BUFFERED_INN_EXT,
|
|
ADC_AFE_INPUT_INP_EXT_INN_BUFFERED,
|
|
ADC_AFE_INPUT_INP_BUFFERED_INN_BUFFERED,
|
|
}AdcAfeInputMode_t;
|
|
|
|
typedef enum {
|
|
ADC_CH_SEL_NONE = 0U,
|
|
ADC_CH_SEL_REF_REF,
|
|
ADC_CH_SEL_REF_GND,
|
|
ADC_CH_SEL_GND_REF,
|
|
ADC_CH_SEL_TSENSOR_GND,
|
|
ADC_CH_SEL_1V5_GND,
|
|
ADC_CH_SEL_3V3_GND, /* 1/2 gain */
|
|
ADC_CH_SEL_5V0_GND, /* 1/4 gain */
|
|
ADC_CH_SEL_VBAT_GND, /* 1/14 gain */
|
|
ADC_CH_SEL_CSA_Filter_OUT_GND,
|
|
ADC_CH_SEL_CSA_OUT_GND,
|
|
ADC_CH_SEL_PA2_GND,
|
|
ADC_CH_SEL_PA3_GND,
|
|
ADC_CH_SEL_PA4_GND,
|
|
ADC_CH_SEL_PA5_GND,
|
|
ADC_CH_SEL_PA6_GND,
|
|
ADC_CH_SEL_PC3_GND,
|
|
ADC_CH_SEL_PC4_GND,
|
|
ADC_CH_SEL_PB0_GND,
|
|
ADC_CH_SEL_PB1_GND,
|
|
ADC_CH_SEL_PB2_GND,
|
|
ADC_CH_SEL_PB3_GND,
|
|
ADC_CH_SEL_PB4_GND,
|
|
ADC_CH_SEL_PB5_GND,
|
|
ADC_CH_SEL_PB6_GND,
|
|
ADC_CH_SEL_PB7_GND,
|
|
ADC_CH_SEL_3V3_EXT_GND, /* 1/2 gain */
|
|
}AdcChannelSelect_t;
|
|
|
|
|
|
typedef enum {
|
|
ADC_SQ_CH1_2_CH1 = 1U,
|
|
ADC_SQ_CH1_2_CH2 = 2U,
|
|
ADC_SQ_CH1_2_CH3 = 3U,
|
|
ADC_SQ_CH1_2_CH4 = 4U,
|
|
ADC_SQ_CH1_2_CH5 = 5U,
|
|
ADC_SQ_CH1_2_CH6 = 6U,
|
|
ADC_SQ_CH1_2_CH7 = 7U,
|
|
ADC_SQ_CH1_2_CH8 = 8U,
|
|
ADC_SQ_CH1_2_CH9 = 9U,
|
|
ADC_SQ_CH1_2_CH10= 10U
|
|
}AdcSequence_t;
|
|
|
|
|
|
typedef enum {
|
|
ADC_MEASURE_ITEM_NONE = 0U,
|
|
ADC_MEASURE_ITEM_VBG,
|
|
ADC_MEASURE_ITEM_VBAT,
|
|
ADC_MEASURE_ITEM_VDD1V5,
|
|
ADC_MEASURE_ITEM_PC3,
|
|
ADC_MEASURE_ITEM_VBAT_VTEMP,
|
|
ADC_MEASURE_ITEM_LED,
|
|
}AdcMeasureItem_t;
|
|
|
|
typedef struct{
|
|
AdcMeasureItem_t item;
|
|
uint8_t channel;
|
|
}ADCMeasureParam_t;
|
|
|
|
|
|
typedef struct{
|
|
AdcTriggerSEL_t selection;
|
|
union{
|
|
AdcGeneralTriggerSRC_t general;
|
|
AdcPwmAuxTriggerSRC_t pwmAux;
|
|
};
|
|
AdcPwmAuxChannel_t channel; /* Only for pwm aux */
|
|
}ADCTriggerParam_t;
|
|
|
|
|
|
typedef void (*adc_cb_func_t)(ADCMeasureParam_t item, uint16_t *const result);
|
|
|
|
void ADC_GeneralInit(void);
|
|
void ADC_Init(AdcMeasureItem_t item, uint8_t channel);
|
|
void ADC_UnInit(AdcMeasureItem_t item);
|
|
void ADC_RegisterIRQ(adc_cb_func_t callback);
|
|
void ADC_UnregisterIRQ(void);
|
|
void ADC_Start(void);
|
|
|
|
|
|
#endif /* __ADC_DEVICE_H__ */ |