/** * @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 #include #include #include #include #include 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_VAMP, ADC_MEASURE_ITEM_VBAT_VTEMP, ADC_MEASURE_ITEM_PC3, 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 struct{ AdcTriggerSEL_t selection; 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); uint16_t getcurrent(void); uint16_t getpb3code(void); uint16_t getpc4code(void); uint16_t getpb4code(void); uint8_t getgai(void); 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); void ADC_Stop(void); ADCMeasureParam_t ADC_GetadcMeasParamm(void); #endif /* __ADC_DEVICE_H__ */