void CADD(void)
{
uint32 aa;
uint32 ADdata;
ADdata=0;
//从机选择(主机模式)低有效,为低将从机拉进中断,正式开始数据传输
IO0CLR=(1<<16);//片选信号拉低
S0SPDR=0x1C40; //选择通道8,Manual Mode
while((S0SPSR&0x80)==0); //等待发送完成
aa=S0SPDR; //第一个周期的输出值不要
IO0SET=(1<<CS1); //取消片选
IO0CLR=(1<<CS1);//片选信号拉低
S0SPDR=0x0000; //以先前选择的模式继续
while((S0SPSR&0x80)==0); //等待发送完毕
ADdata=S0SPDR;
ADdata=ADdata&0x0FFF;//取后12位AD转换数据
GOODDATA=ADdata;
IO0SET=(1<<CS1); //取消片选
}
Decapton Wang:
ADdata为什么要和0x0FFF做一个与运算?建议检查一下是不是“ADdata=ADdata&0x0FFF;//取后12位AD转换数据”这句代码出了问题。
qing wang:
回复 Decapton Wang:
因为ADS7952转换出来的数据高四位是通道地址,后12位才是转换出来的数据,所以进行了与运算
Decapton Wang:
回复 qing wang:
1. 你把0x0FFF改成0xFFFF,看看采出数据的通道对不对。
2. S0SPDR出现过多次,从“S0SPDR=0x1C40"看出S0SPDR应该是从主机向ADC发,但是从”ADdata=S0SPDR“来看又像是从ADC向主机发,检查一下是不是这个S0SPDR出问题了。
qing wang:
回复 Decapton Wang:
1、通道地址正确;
2、主机先向ADC发通道选择控制字(即“S0SPDR=0x1C40"),然后再从ADC读出AD转换数据,SOSPDR是个双向数据寄存器。
user4064604:
回复 qing wang:
楼主可否发一份ads7952的例程?
shencheng hu:
回复 user4064604:
请问你解决了吗?能不能发我一份