我用TLC2543多通道AD测量时,数据出错,如A,B,C三个通道,单独测量正确分。但三个数据同时测量时候就出现错误,A的数据为B口数据,B口数据为C口数据,C口数据为A口数据,值都是正确的 这是怎么回事儿啊。
调用语句:
int tem,tem1,tem2;
printk("tong dao 0 \n");
tem=read2543(0x00);
mdelay(1000);
printk("tong dao 1 \n");
tem1=read2543(0x10);
mdelay(1000);
printk("tong dao 2 \n");
tem2=read2543(0x20);
mdelay(1000)
tlc读数据函数:
unsigned int read2543(unsigned char port) //port is input pin-number
{
unsigned int i,ad=0,j;
int flag = 0;
unsigned char temp,ch;
ch=port;
// printk("%x\n",ch);
s3c2410_gpio_setpin(CLK,0);
s3c2410_gpio_setpin(CS,0);
//ch<<=4;
for(i=0;i<12;i++)
{
if(s3c2410_gpio_getpin(DPI))
ad|=0x01;
if(ch&0x80)
s3c2410_gpio_setpin(DPO,1);
else
s3c2410_gpio_setpin(DPO,0);
s3c2410_gpio_setpin(CLK,1);
delay1(6);
s3c2410_gpio_setpin(CLK,0);
delay1(6);
ch<<=1;
ad<<=1;
}
s3c2410_gpio_setpin(CS,1);
ad>>=1;
printk("ad=%d\n",ad);
return(ad);
调用语句:
int tem,tem1,tem2;
printk("tong dao 0 \n");
tem=read2543(0x00);
mdelay(1000);
printk("tong dao 1 \n");
tem1=read2543(0x10);
mdelay(1000);
printk("tong dao 2 \n");
tem2=read2543(0x20);
mdelay(1000)
tlc读数据函数:
unsigned int read2543(unsigned char port) //port is input pin-number
{
unsigned int i,ad=0,j;
int flag = 0;
unsigned char temp,ch;
ch=port;
// printk("%x\n",ch);
s3c2410_gpio_setpin(CLK,0);
s3c2410_gpio_setpin(CS,0);
//ch<<=4;
for(i=0;i<12;i++)
{
if(s3c2410_gpio_getpin(DPI))
ad|=0x01;
if(ch&0x80)
s3c2410_gpio_setpin(DPO,1);
else
s3c2410_gpio_setpin(DPO,0);
s3c2410_gpio_setpin(CLK,1);
delay1(6);
s3c2410_gpio_setpin(CLK,0);
delay1(6);
ch<<=1;
ad<<=1;
}
s3c2410_gpio_setpin(CS,1);
ad>>=1;
printk("ad=%d\n",ad);
return(ad);
}
其实很简单了!就在外面多加一个
for(i=0;i<3;i++)
{
里面写colk和cs喽!还 有其他的!哈哈
}