?? adc.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 + -