⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adc.c

📁 ARM7 lpc2100 ADC驱动API,源码有详细注解
💻 C
字号:
/****************************************************************************
* 文 件 名:ADC.c
* 功    能:初始化ADC模块,并读出ADC的值,AD通道uint8 Int_AIN,选择单路通道,
			有效值:LPC2124:0x01~0x04,LPC2200:0x01~0x08			

****************************************************************************/

#include "cfg.h"

void Func_InitADC(void);
uint32 Func_ReadADC(uint8 Int_AIN);



//PINSEL1=0X01400000;			   //P0.27=AIN0,P0.28=AIN1  
/****************************************************************************
* 名    称:void Func_InitADC(void)
* 功    能:对ADC进行初始化,没有选择通道,转换时钟为1MHz,正常模式,正常工作,
            没有启动,下降沿启动转换
* 入口参数:无
* 出口参数:无
****************************************************************************/
void Func_InitADC(void)
{	ADCR=0<<0  |                //AIN0通道选择,0不选择,1选择
	     0<<1  |                //AIN1通道选择,0不选择,1选择
	     0<<2  |                //AIN2通道选择,0不选择,1选择
	     0<<3  |                //AIN3通道选择,0不选择,1选择
	     0<<4  |                //AIN4通道选择,0不选择,1选择
	     0<<5  |                //AIN5通道选择,0不选择,1选择
	     0<<6  |                //AIN6通道选择,0不选择,1选择
	     0<<7  |                //AIN7通道选择,0不选择,1选择
	/*     
	     1<<8  |                //[15:8]分频设置,小于或等于4.5MHZ
	     1<<9  |                
	     1<<10 |                
	     0<<11 |               
	     0<<12 |                
	     0<<13 |               
	     0<<14 |                
	     0<<15 |  
	 */  
	     ((Fpclk / 1000000 - 1) << 8) | 		// CLKDIV = Fpclk / 1000000 - 1 ,即转换时钟为1MHz
	     
	     0<<16 |                //0:软件方式;1:突发方式
	     
	     0<<17 |                //[19:17]转换精度 =000:10位精度 001:9位精度
	     0<<18 |                //010:8位;011:7位;100:6位;101:5位;
	     0<<19 |                //110:4位;111:3位
	     
	     
	     0<<20 |                //无定义	     
	     1<<21 |                //1:正常工作,0:掉电
	     
	     0<<22 |                //[23:22]=00:正常模式;01:数字测试;
	     0<<23 |                //10:DAC测试;11:一次转换测试模式
	     
	     0<<24 |                //[26:24]=000:不启动;001:立即启动
	     0<<25 |                //
	     0<<26 |                //
	     
	     0<<27 |                //EDGE,0:CAP\MAT\AIN下降沿启动转换;1:上升沿启动
	     0<<28 ;                //[32:28]无定义
	     
	ADDR=0<<0  |                //[5:0]无定义
	     0<<6  |                //[15:6]10位ADC数据,计算公式:VIN=RESULT*(VSSA/0X3FFF)
	     0<<16 |                //[23:16]=0,连续AD值经过256个值累加不会溢出到CHN[26:24]字段
	     
	     0<<24 |                //[26:24]CHN:最低位的转换通道,不需要设置
	     0<<25 |                
	     0<<26 |                
	     
	     0<<27 |                //[29:27]无定义
	     0<<30 |                //OVERUN:
	     0<<31 ;                //DONE:完成标志位,读ADDR、ADCR被写时清0

	}
/****************************************************************************
* 名    称:uint32 Func_ReadADC(uint8 Int_AIN)
* 功    能:启动ADC转换并读出结果
* 入口参数:uint8 Int_AIN,选择单路通道,
			有效值:0x01~0x08,LPC2124:0x01~0x04,LPC2200:0x01~0x08
* 出口参数:uint32 Int32_ADCData,已读出电压值
****************************************************************************/
uint32 Func_ReadADC(uint8 Int_AIN)
{  	uint32 Int32_ADCData;	
	PINSEL1=(PINSEL1 & 0X003FFFFF |0X01<<22)<<(Int_AIN-1)*2 ;			   	//P0.27=AIN0,P0.28=AIN1
	ADCR =(ADCR & 0XFFFFFF00 ) | 
			1<<(Int_AIN-1)     |     										//选择通道
		    1<<24                ;            								//启动
	while((ADDR & 0X80000000)==0);
	Int32_ADCData=ADDR;
	Int32_ADCData=(Int32_ADCData>>6) & 0x3FF;      //右移6位,并清掉高22位
	Int32_ADCData=Int32_ADCData*3300 /0x3FF;
	return Int32_ADCData;
}
/****************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -