/******************************************************************************* @file adc.h @brief Contains all functions support for adc driver @version 0.0 @date 18. Oct. 2017 @author qing.han SDK_LICENSE *******************************************************************************/ #ifndef __ADC__H__ #define __ADC__H__ #ifdef __cplusplus extern "C" { #endif #include "types.h" #include "bus_dev.h" #include "gpio.h" #define MAX_ADC_SAMPLE_SIZE 32 #define ADC_CH_BASE (0x40050400UL) #define CLEAR_ADC_INT(n) AP_ADC->intr_clear |= BIT(n) #define IS_CLAER_ADC_INT_VOICE (AP_ADC->intr_clear & BIT(8)) #define IS_CLAER_ADC_INT(n) (AP_ADC->intr_clear & BIT(n)) #define GET_IRQ_STATUS (AP_ADCC->intr_status & 0x3ff) #define ENABLE_ADC (AP_PCRM->ANA_CTL |= BIT(3)) #define DISABLE_ADC (AP_PCRM->ANA_CTL &= ~BIT(3)) #define ADC_CLOCK_ENABLE (AP_PCRM->CLKHF_CTL1 |= BIT(13)) #define ADC_CLOCK_DISABLE (AP_PCRM->CLKHF_CTL1 &= ~BIT(13)) #define SPIF_RSVD_AREA_1 (0x1000) #define pSPIF_RSVD1_ADC_CALIBRATE ((volatile uint32_t*)(SPIF_BASE_ADDR + SPIF_RSVD_AREA_1)) #define SPIF_RSVD1_ADC_CALIBRATE (SPIF_BASE_ADDR + SPIF_RSVD_AREA_1) /************************************************************************************** @fn hal_get_adc_int_source @brief This function process for get adc interrupt source,such as adc channel NO input parameters @param None. output parameters @param None. @return adc interrupt source bit loaction(uint8_t) **************************************************************************************/ /* ADC note: There are ten pins which can config as analogy,there are some differences between them. hardware analogy index: gpio<11>/aio<0> gpio<23>/aio<1>/micphone bias reference voltage gpio<24>/aio<2> gpio<14>/aio<3> gpio<15>/aio<4>/micphone bias gpio<16>/aio<5>/32K XTAL input gpio<17>/aio<6>/32K XTAL output gpio<18>/aio<7>/pga in+ gpio<25>/aio<8> gpio<20>/aio<9>/pga in- There are six pins which can work in adc single mode.Such as: ADC_CH0 = 2,ADC_CH1N_P11 = 2, ADC_CH1 = 3,ADC_CH1P_P23 = 3, ADC_CH2 = 4,ADC_CH2N_P24 = 4, ADC_CH3 = 5,ADC_CH2P_P14 = 5, ADC_CH4 = 6,ADC_CH3N_P15 = 6, ADC_CH9 = 7,ADC_CH3P_P20 = 7, There are four pair pins which can work in adc diff mode.Such as: ADC_CH0DIFF = 1,p18(p) and P25(n) ADC_CH1DIFF = 3,P23(p) and P11(n) ADC_CH2DIFF = 5,P14(p) and P24(n) ADC_CH3DIFF = 7,P20(p) and P15(n) There are two pins which uses with 32.768K crystal oscillator. gpio<16>/aio<5>/32K XTAL input gpio<17>/aio<6>/32K XTAL output There are four pins which uses as pga,voice and so on. gpio<23>/aio<1>/micphone bias reference voltage,this pin is selected gpio<15>/aio<4>/micphone bias gpio<18>/aio<7>/pga in+ gpio<20>/aio<9>/pga in- */ typedef enum { ADC_CH0DIFF = 1,/*p18(positive),p25(negative),only works in diff*/ ADC_CH0 = 2,ADC_CH1N_P11 = 2,MIN_ADC_CH = 2, ADC_CH1 = 3,ADC_CH1P_P23 = 3,ADC_CH1DIFF = 3,/*P23 and P11*/ ADC_CH2 = 4,ADC_CH2N_P24 = 4, ADC_CH3 = 5,ADC_CH2P_P14 = 5,ADC_CH2DIFF = 5,/*P14 and P24*/ ADC_CH4 = 6,ADC_CH3N_P15 = 6, ADC_CH9 = 7,ADC_CH3P_P20 = 7,MAX_ADC_CH = 7,ADC_CH3DIFF = 7,/*P20 and P15*/ ADC_CH_VOICE = 8, ADC_CH_NUM =9, } adc_CH_t; #define ADC_BIT(ch) (1<