📄 adc.c
字号:
/****************************************************************************
【文 件 名 称】ADC.C
【功 能 描 述】ADC实验
【程 序 版 本】2.0
【创建人及创建日期】龚俊//2002年11月19日19:26
【修改人及修改日期】龚俊//2005-5-19 14:42
****************************************************************************/
//***************************************************************************
#include "def.h"
#include "config.h"
#include "board.h"
#include "utils.h"
//***************************************************************************
/****************************************************************************
【功能说明】模数转换初始化,输入的参数表示ADC的转换频率
****************************************************************************/
static void ADC_Init( U32 Adc_Clk )
{
U32 ADC_Data;
/* 进行ADC模块设置,其中x<<n表示第n位设置为x(若x超过一位,则向高位顺延) */
ADCR = ( 1 << 0 ) | // SEL = 1 ,选择通道0
( ( Fpclk / Adc_Clk - 1 ) << 8 ) | // CLKDIV = Fpclk / 1000000 - 1 ,即转换时钟为1MHz
( 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 ); // EDGE = 0 (CAP/MAT引脚下降沿触发ADC转换)
Delay( 10 );
ADC_Data = ADDR; // 读取ADC结果,并清除DONE标志位
}
//***************************************************************************
/****************************************************************************
【功能说明】ADC某一通道进行转换,返回转换的数据
****************************************************************************/
static unsigned short Read_Adc( unsigned char ch )
{
U32 ADC_Data;
ADCR = ( ADCR & 0xFFFFFF00 ) | ( ch ) | ( 1 << 24 ); // 切换通道并进行第一次转换
while ( ( ADDR & 0x80000000 ) == 0 ); // 等待转换结束
ADCR = ADCR | ( 1 << 24 ); // 再次启运转换
while ( ( ADDR & 0x80000000 ) == 0 );
ADC_Data = ADDR; // 读取ADC结果
ADC_Data = ( ADC_Data >> 6 ) & 0x3FF;
return ADC_Data ; //返回AD转换值
}
//***************************************************************************
/****************************************************************************
【功能说明】ADC测试
****************************************************************************/
//int ADC_Test( int argc , char* argv[] )
void ADC_Test(void)
{
U16 a0 = 0 ;
// U16 a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0;
printf( "LPC229X ADC TEST ! \t\t'ESC' to exit!\n\n" ) ;
ADC_Init( 1000000 ) ; //模数转换初始化
while ( getkey() != ESC_KEY )
{
a0 = Read_Adc( 0 ); //ADC某一通道进行转换,返回转换的数据
// a1 = Read_Adc(1); //ADC某一通道进行转换,返回转换的数据
// a2 = Read_Adc(2); //ADC某一通道进行转换,返回转换的数据
// a3 = Read_Adc(3); //ADC某一通道进行转换,返回转换的数据
// a4 = Read_Adc(4); //ADC某一通道进行转换,返回转换的数据
// a5 = Read_Adc(5); //ADC某一通道进行转换,返回转换的数据
// a6 = Read_Adc(6); //ADC某一通道进行转换,返回转换的数据
// a7 = Read_Adc(7); //ADC某一通道进行转换,返回转换的数据
// printf("ADC channel 0-7 output: %4d %4d %4d %4d %4d %4d %4d %4d\n",a0,a1,a2,a3,a4,a5,a6,a7);
printf( "ADC channel 0 output: %4d\n" , a0 ) ;
Delay( 100 ); //延时
}
// return 1 ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -