|
本帖最后由 qiang1092 于 2010-3-18 19:51 编辑
在TQ2440板子上做linux(自带的编译好的2.6.13内核)下的ADC驱动实验,设置好ADCCON后,给ADCCON的0位写1开始转换,
读ADCCON总是0x4251(第0位是1-开始转换了,但没结束;第15位是0-在转换的过程中),这是为什么啊?
难道上了linux操作系统了,不能做ADC的驱动???
贴出关键代码:
#define GPJ_CON 0x560000d0
#define ADC_CON 0x58000000
static unsigned long *vir_gpj;
static unsigned long *vir_adc;
int phoenix_open(struct inode *inode,struct file *filp)
{
//我在其他地方操作GPJ端口了(接了个数码管),操作没有问题
vir_gpj=ioremap(GPJ_CON,8);
vir_gpj[0]=0x55555555;
vir_gpj[1]=0x1fff;
vir_adc=ioremap_nocache(ADC_CON,16);//这是映射的ADC寄存器
vir_adc[0]=(1<<14)|(254<<6)|(2<<3);//用AIN2
return 0;
}
int phoenix_read(struct file *filp,char *buffer,size_t length,loff_t *offset)
{
int dat;
vir_adc[0]=vir_adc[0] | 0x1;//启动转换
// while(vir_adc[0] & 0x1);//wait begin//这两句都不能要,要了就是死循环,说明等待一段时间读也是一样的
// while(!(vir_adc[0] & 0x8000));//wait begin
printk("<0>""con=%u\n",vir_adc[0]);//在这里看了一下值,是0x4251
dat=vir_adc[3] & 0x3ff; //读DAT0,没意义,反正没转换
printk("<0>""dat=%d\n",dat);
return 0;
} |
|