139 lines
4.0 KiB
C
139 lines
4.0 KiB
C
/*******************************************************************************
|
||
* @note Copyright (C) 2017 Shanghai Panchip Microelectronics Co., Ltd.
|
||
* All rights reserved.
|
||
*
|
||
* @file lib_driver_adc_pan159.c
|
||
* @brief
|
||
*
|
||
* ADC¶ÔÓ¦µÄIO¿Ú:
|
||
* ---------+-----------
|
||
* ADC_CH0 | P5.3(5)
|
||
* ---------+-----------
|
||
* ADC_CH1 | P1.0(7)
|
||
* ---------+-----------
|
||
* ADC_CH2 | P1.2(8)
|
||
* ---------+-----------
|
||
* ADC_CH3 | P1.3(9)
|
||
* ---------+-----------
|
||
* ADC_CH4 | P1.4(10)
|
||
* ---------+-----------
|
||
* ADC_CH5 | P1.5(11)
|
||
* ---------+-----------
|
||
* ADC_CH6 | P3.0(13)
|
||
* ---------+-----------
|
||
* ADC_CH7 | P3.1(17)
|
||
* ---------+-----------
|
||
*
|
||
* @history - V1.0, 2017-09-18, xiaoguolin, first implementation.
|
||
*******************************************************************************/
|
||
#include "lib_driver_adc_pan159.h"
|
||
|
||
const static uint8_t adc_chns_table[] = {
|
||
#if ADC_ENABLE_CH0_P53 != 0
|
||
ADC_PAN159_CH0_P53,
|
||
#endif
|
||
#if ADC_ENABLE_CH1_P10 != 0
|
||
ADC_PAN159_CH1_P10,
|
||
#endif
|
||
#if ADC_ENABLE_CH2_P12 != 0
|
||
ADC_PAN159_CH2_P12,
|
||
#endif
|
||
#if ADC_ENABLE_CH3_P13 != 0
|
||
ADC_PAN159_CH3_P13,
|
||
#endif
|
||
#if ADC_ENABLE_CH4_P14 != 0
|
||
ADC_PAN159_CH4_P14,
|
||
#endif
|
||
#if ADC_ENABLE_CH5_P15 != 0
|
||
ADC_PAN159_CH5_P15,
|
||
#endif
|
||
#if ADC_ENABLE_CH6_P30 != 0
|
||
ADC_PAN159_CH6_P30,
|
||
#endif
|
||
#if ADC_ENABLE_CH7_P31 != 0
|
||
ADC_PAN159_CH7_P31,
|
||
#endif
|
||
0x00
|
||
};
|
||
#define ADC_CHN_NUM_COUNT (sizeof(adc_chns_table)-1)
|
||
static int8_t adc_cur_chn_index = 0;
|
||
|
||
void adc_pan159_init(void)
|
||
{
|
||
ADC_POWER_ON(ADC);
|
||
if(ADC_ENABLE_CH0_P53){
|
||
SYS->P5_MFP &= ~SYS_MFP_P53_Msk;
|
||
SYS->P5_MFP |= SYS_MFP_P53_ADC_CH0;
|
||
GPIO_DISABLE_DIGITAL_PATH(P5,BIT3);
|
||
}
|
||
if(ADC_ENABLE_CH1_P10){
|
||
SYS->P1_MFP &= ~SYS_MFP_P10_Msk;
|
||
SYS->P1_MFP |= SYS_MFP_P10_ADC_CH1;
|
||
GPIO_DISABLE_DIGITAL_PATH(P1,BIT0);
|
||
}
|
||
if(ADC_ENABLE_CH2_P12){
|
||
SYS->P1_MFP &= ~SYS_MFP_P12_Msk;
|
||
SYS->P1_MFP |= SYS_MFP_P12_ADC_CH2;
|
||
GPIO_DISABLE_DIGITAL_PATH(P1,BIT2);
|
||
}
|
||
if(ADC_ENABLE_CH3_P13){
|
||
SYS->P1_MFP &= ~SYS_MFP_P13_Msk;
|
||
SYS->P1_MFP |= SYS_MFP_P13_ADC_CH3;
|
||
GPIO_DISABLE_DIGITAL_PATH(P1,BIT3);
|
||
}
|
||
if(ADC_ENABLE_CH4_P14){
|
||
SYS->P1_MFP &= ~SYS_MFP_P14_Msk;
|
||
SYS->P1_MFP |= SYS_MFP_P14_ADC_CH4;
|
||
GPIO_DISABLE_DIGITAL_PATH(P1,BIT4);
|
||
}
|
||
if(ADC_ENABLE_CH5_P15){
|
||
SYS->P1_MFP &= ~SYS_MFP_P15_Msk;
|
||
SYS->P1_MFP |= SYS_MFP_P15_ADC_CH5;
|
||
GPIO_DISABLE_DIGITAL_PATH(P1,BIT5);
|
||
}
|
||
if(ADC_ENABLE_CH6_P30){
|
||
SYS->P3_MFP &= ~SYS_MFP_P30_Msk;
|
||
SYS->P3_MFP |= SYS_MFP_P30_ADC_CH6;
|
||
GPIO_DISABLE_DIGITAL_PATH(P3,BIT0);
|
||
}
|
||
if(ADC_ENABLE_CH7_P31){
|
||
SYS->P3_MFP &= ~SYS_MFP_P31_Msk;
|
||
SYS->P3_MFP |= SYS_MFP_P31_ADC_CH7;
|
||
GPIO_DISABLE_DIGITAL_PATH(P3,BIT1);
|
||
}
|
||
}
|
||
|
||
void adc_pan159_samp2(uint16_t *buf)
|
||
{
|
||
/* »ñÈ¡µ±Ç°Í¨µÀ */
|
||
//uint8_t curr_index = adc_cur_chn_index;
|
||
//int16_t curr_chn = adc_chns_table[curr_index];
|
||
|
||
//adc_pan159_start(adc_chns_table[adc_cur_chn_index],6);
|
||
ADC->CHEN = adc_chns_table[adc_cur_chn_index];
|
||
ADC->EXTSMPT = (ADC->EXTSMPT & ~ADC_EXTSMPT_EXTSMPT_Msk) | 6;
|
||
ADC_START_CONV(ADC);
|
||
while(adc_pan159_is_busy());
|
||
/* ¶ÁÈ¡ADCת»»½á¹û */
|
||
buf[adc_cur_chn_index] = adc_pan159_value();
|
||
|
||
/* ¼ÆËãÏÂÒ»¸öͨµÀ */
|
||
if(adc_cur_chn_index < ADC_CHN_NUM_COUNT-1){
|
||
adc_cur_chn_index++;
|
||
}
|
||
else{
|
||
adc_cur_chn_index = 0;
|
||
}
|
||
}
|
||
|
||
void adc_pan159_samp1(uint16_t *buf)
|
||
{
|
||
ADC->CHEN = ADC_PAN159_CH3_P13;
|
||
//ADC->CHEN = ADC_PAN159_CH1_P10 ;
|
||
ADC->EXTSMPT = (ADC->EXTSMPT & ~ADC_EXTSMPT_EXTSMPT_Msk) | 6;
|
||
ADC_START_CONV(ADC);
|
||
while(adc_pan159_is_busy());
|
||
/* ¶ÁÈ¡ADCת»»½á¹û */
|
||
buf[0] = adc_pan159_value();
|
||
}
|