📄 drv_adc.c
字号:
#include "config_60_61.h"
#include "config_GD60.h"
#include "include_GD60.h"
#include "include_GD61.h"
////
#define MAX_ADCHANNEL 8
#define ADC_MAX_POINT 20
uint16 ADC[MAX_ADCHANNEL][ADC_MAX_POINT];
extern volatile uint8 DispSecondTick; // for display of time
///////////////////////////////////////////////////////////////////////
uint16 Start_ADC(uint8 adc_chan);
void ADC_TestPrn(void);
///////////////////////////////////////////////////////////////////////
//***************** FETCH ONE CHANNEL DATA ****************************
///////////////////////////////////////////////////////////////////////
uint16 Start_ADC(uint8 adc_chan)
{
uint32 ad_result;
static uint8 data_pt=0;
// TimeElapseStart();
if(adc_chan>=MAX_ADCHANNEL) return 0; // invalid ad channel
IRQDisable();
AD0CR =(1 << adc_chan) | // SEL 选择通道
((LPC_FPCLK / 4000000 - 1) << 8)| // CLKDIV=LPC_FPCLK/4000000-1,转换时钟为4MHz
(0 << 16) | // BURST=0,软件控制转换操作
(0 << 17) | // CLKS=0, 使用11clock转换
(1 << 21) | // PDN=1,正常工作模式
(0 << 22) | // TEST1:0=00,正常工作模式
// (1 << 24) | // START=1,直接启动ADC转换
(0 << 27); // 直接启动ADC转换时,此位无效
AD0CR |= 1 << 24 ; // 进行第一次转换
while((AD0DR & 0x80000000) == 0); // 等待转换结束
AD0CR |= 1 << 24; // 再次启动转换
while((AD0DR & 0x80000000) == 0); // 等待转换结束
ad_result= AD0DR; // 读取ADC结果
ad_result=(ad_result>>6)&0x3ff; // 10 bits A/D
ad_result= ad_result*3000; // 参考电压3000 mV
ad_result= ad_result>>10;
ADC[adc_chan][data_pt]=(uint16)ad_result;
// data_pt++; if(data_pt>=ADC_MAX_POINT) data_pt=0;
IRQEnable(); // 使能IRQ中断
// TimeElapseStop("Start_ADC_2()");
return ad_result;
}
////////////////////////////////////////////////////////////////////////
void ADC_TestPrn(void)
{
char buffer[200];
static uint8 SecondTick;
if(SecondTick!=DispSecondTick){
SecondTick =DispSecondTick;
sprintf(buffer,"ADC[0]=%d,ADC[1]=%d,ADC[2]=%d,ADC[3]=%d,ADC[4]=%d,ADC[5]=%d,ADC[6]=%d,ADC[7]=%d",
ADC[0][0],ADC[1][0],ADC[2][0],ADC[3][0],ADC[4][0],ADC[5][0],ADC[6][0],ADC[7][0]);
DB_SendString(buffer);
}
}
////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -