当前位置:首页 > 单片机 > 单片机
[导读]使用的是RVDS4.0编译的大家主要是看看如何配置模式的我之前一直使用自动X,Y采样,但是读取的都不准,最后采样分离的,才可以,需要注意的是使能ADC读开始后需要先读转换结果寄存器,但是此时读取的是上一次的转换结果,

使用的是RVDS4.0编译的

大家主要是看看如何配置模式的

我之前一直使用自动X,Y采样,但是读取的都不准,最后采样分离的,才可以,需要注意的是使能ADC读开始后需要先读转换结果寄存器,但是此时读取的是上一次的转换结果,如果是连续读取需要等待转换完成,否则转换结果不准.

adc.c


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

*文件名:ADC.c

*功能:S3C6410ADC底层驱动函数

*作者:cp1300@139.com

*创建时间:2012年3月12日21:05

*最后修改时间:2012年3月12日

*详细:触摸屏驱动以及相关ADC驱动

*问题:一直以来存在一个误区,一直以为使用了启动开始读操作,每次读DAT寄存器后就可以读取到转换后的数据,最终发现使用这个后读到的是上一次的数据,

*还是需要等到转换完成,否则连续转换的时候数据会非常乱.

*现在使用的是手动控制转换开始

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

#include"system.h"

#include"ADC.h"

//ADC的控制寄存器ADCCON

#defineADCCON_RESSEL_12BIT(1<<16)//12bit模式

#defineADCCON_ECFLG(0<<15)//A/D转换结束标志只读;

#defineADCCON_PRSCEN(1<<14)//A/D转换器预分频器使能

#defineADCCON_PRSCVL(32<<6)//预分频值,1-255,分频值+1,至少为PCLK的1/5,此时PCLK=66MHZ,在2.5MHZ时钟下转换最快

#defineADCCON_SEL_MUX(0<<3)//默认选择通道0

#defineADCCON_STDBM(0<<2)//正常模式

#defineADCCON_READ_START(0<<1)//关闭启动开始读操作

#defineADCCON_ENABLE_START(0<<0)//如果READ_START启用,这个值是无效的。

//ADCDLY

#defineADCDLY_DELAY500//自动采样延时时间,

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

*函数:voidSetADC_Channel(u8ch)

*功能:设置ADC输入通道

*参数:ch:通道号,0-7

*返回:无

*依赖:底层宏定义

*作者:cp1300@139.com

*时间:20120513

*最后修改时间:20120513

*说明:ADC输入通道选择

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

voidSetADC_Channel(u8ch)

{

ADC->CON&=~(7<<3);//清除通道

ADC->CON|=ch&(0x07);//设置通道号

}

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

*函数:voidADC_Init(void)

*功能:ADC初始始化

*参数:无

*返回:无

*依赖:底层宏定义

*作者:cp1300@139.com

*时间:20120312

*最后修改时间:20120313

*说明:ADC初始始化

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

voidADC_Init(void)

{

//ADC的控制寄存器配置;12BIT模式

ADC->CON=ADCCON_RESSEL_12BIT+ADCCON_ECFLG+ADCCON_PRSCEN+ADCCON_PRSCVL+ADCCON_SEL_MUX+ADCCON_STDBM+ADCCON_READ_START+ADCCON_ENABLE_START;

ADC->DLY=ADCDLY_DELAY;//设置自动间隔采样时间

}

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

*函数:voidADC_SetMode(u8Mode)

*功能:设置ADC模式

*参数:无

*返回:无

*依赖:底层宏定义

*作者:cp1300@139.com

*时间:20120313

*最后修改时间:20120313

*说明:设置ADC模式

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

voidADC_SetMode(u8Mode)

{

ADC->TSC&=(1<<8);//清除原先设置

ADC->CON&=~BIT2;//退出待机模式

XP_UP_DISABLE();//XP上拉禁止

Normal_ADC_Mode();//普通ADC模式

switch(Mode)

{

caseCOMMON_AD_MODER://普通ADC模式

Normal_ADC_Mode();break;

caseASUNDER_X_MODER://分离的X扫描模式

{

ADCTSC_XP_VDD();

ADCTSC_XM_GND();

ADCTSC_YP_HZ();

ADCTSC_YM_HZ();

X_PosMode();

}break;//XP=外部电源,XM=GND,YP=AIN5,YM=高阻

caseASUNDER_Y_MODER://分离的Y扫描模式

{

ADCTSC_X

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭