K74B/app_Indie/drivers/hal/inc/adc_device.h
2024-01-16 10:46:17 +08:00

168 lines
4.0 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_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__ */