TQ2440 ADC基本应用

  ADC,为模数转换器。S3C2440中提供的ADC转换器有8个通道,其中4个用于触摸屏,4个为正常用途{ A[0..3] }(如下图),中间有个8:1的为8选一开关,用来选通AD转换通道,INT_ADC为中断产生信号线,(XP,XM,YP,YM用于触摸屏)



ADC的基本应用主要是配置ADCCON

 注:ADC时钟来源为PCLK,配置时ADC的时钟一定要小于PCLK的1/5,而且ADC时钟频率不能大于2.5MHz

ADC需要配置的:

1.是否开启预分频,开启则设置预分频系数

2.Mux 。 8个通道中选一个通道

3.是否读取后自动开启ADC

4.开启ADC


一般通道转换后的数据放在ADCDAT0的低10位


#include "2440addr.h"
#include "config.h"

#define PCLK	50000000
#define PRSCEN	1			//使能预分频系数
#define PRSCVL	49			//预分频系数,ADC Freq = (FCLK/PRSCVL + 1)
#define STDBM	0			//正常模式
#define READ_START	0		//读取后不自动开启ADC转换,手动开启
#define	Adc_Start()	rADCCON |= 1	//开启ADC

void adcInit(unsigned char channel);
int adcRead(void);
void uartInit(int baudrate);
void putc(unsigned char c);


void Main(void)
{
	int value;
	/*	使用2号通道	*/
	adcInit(2);
	uartInit(115200);

	while(1)
	{
		value = adcRead();
		/*	value的范围为 0 ~ 1023	*/
		putc(value/1000 + '0');
		putc( (value%1000)/100 + '0');
		putc( (value%100)/10 + '0');
		putc( (value%10) + '0');
		putc('\n');
		/*	延时	*/
		for(value = 0; value<1000000;value++)
			;
	}
}


void adcInit(unsigned char channel)
{
	/*	配置ADC,手动启动*/
	rADCCON &= ~(0xffff);
	rADCCON |= ((READ_START<<1) | (STDBM<<2) | (channel<<3) | 
				(PRSCVL<<6) | (PRSCEN<<14));
		
}

int adcRead(void)
{
	/*	使能ADC	*/
	Adc_Start();	
	
	/*	ADC启动后位0会自动置位0	*/
	while(rADCCON & (1<<0))
		;
	/*	等待ADC转换结束	*/
	while(!(rADCCON & (1<<15)))
		;
		
	return ( (int)(rADCDAT0 & 0x3ff) );
}

/*	串口通信的配置	*/
void uartInit(int baudrate)
{

	rGPHCON &= ~((3<<4) | (3<<6));
	rGPHCON |= (1<<5) | (1<<7);
	
	rULCON0 &= ~(0xff);
	rULCON0 |= (0x3<<0);
	
	rUCON0 &= ~(0xffff);
	rUCON0 |= ((1<<0) | (1<<2));
		
	rUBRDIV0 = (int)(PCLK/baudrate/16) - 1;
}

void putc(unsigned char c)
{
	rUTXH0 = c;
	while(!(rUTRSTAT0 & (1<<2)))
		;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值