作者:GWD 时间:2019.7.26
一、课程内容
概述:写了ADC通道0的初始化函数,并在串口打印电压值
第一步、根据手册写初始化函数(ADCCON第1位开始位,没说需要手动清0,就是会由硬件自动清0)
#include "../s3c2440_soc.h"
void adc_init(void)
{
/* [15] : ECFLG, 1 = End of A/D conversion
* [14] : PRSCEN, 1 = A/D converter prescaler enable
* [13:6]: PRSCVL, adc clk = PCLK / (PRSCVL + 1)
* [5:3] : SEL_MUX, 000 = AIN 0
* [2] : STDBM
* [0] : 1 = A/D conversion starts and this bit is cleared after the startup.
*/
ADCCON = (1<<14)|(49<<6)|(0<<3);
ADCDLY = 0XFF;
}
int adc_read_ain0(void)
{
ADCCON |= (1<<0);
while(!( ADCCON & (1<<15) ));
return ADCDAT0 & 0X3FF;
}
第二步、写测试函数
注:%03d,三位显示不足3位的数组由0补齐
#include "adc.h"
void adc_test(void)
{
int val;
int m,n;
double vol;
adc_init( );
while(1)
{
val = adc_read_ain0( );
vol = (double)val/1023*3.3;
m = (int)vol;
vol = vol - m;
n = vol * 1000;
printf("vol: %d.%03dv\r", m, n); /* 3.010v */
}
}