S3C2440配合MX7705循环读取数据,周期性出错,求大神

woshiyunsk 发布于 2013/11/10 15:37
阅读 81
收藏 0

采用SPI接口配置MX7705并读取数据的时候,采用循环轮询模式,出现周期性出错,

/********************************MX7705初始化*********************************/

void MX7705_Init(void)
{

MX7705_RESET();//MX7705重启

cs(0);//片选拉低
rSPTDAT0=0x20;//写communication寄存器,选定clock寄存器,进行写操作
while(rSPSTA0&1!=1);//等待SPI数据传输完毕(后面有同样使用)
cs(1);//片选拉高(后面有同样应用)

cs(0);
rSPTDAT0=0X94;//写clock寄存器,设定时钟
while(rSPSTA0&1!=1);
cs(1);

cs(0);
rSPTDAT0=0X10;//写communication寄存器,选定setup寄存器,进行写操作
while(rSPSTA0&1!=1);
cs(1);

cs(0);
rSPTDAT0=0X04;//写Setup寄存器,设定转换配置,并开始转换
while(rSPSTA0&1!=1);
cs(1);
delay(20);
}
/*************************读取A/D转换值***********************************************/
void readtemp(void)
{
U16 temp=0;
U8 high8=0,low8=0;
for(;;)     //循环轮询读取A/D转换值
{
while((rGPBDAT&(1<<1))==0);
while((rGPBDAT&(1<<1))!=0);//这两条语句确保后续读取值从DRDY的下降沿开始(即有效数据)

cs(0);//片选拉低
rSPTDAT0=0x38;//写communication寄存器,选定Data寄存器,读操作
while((rSPSTA0&1)!=1);
cs(1);

cs(0);
high8=rSPRDAT0;//读取转换数据的高8位
while((rSPSTA0&1)!=1);
cs(1);

cs(0);
rSPTDAT0=0x38;//10;// 写communication寄存器,选定Data寄存器,读操作
while((rSPSTA0&1)!=1);
cs(1);

cs(0);
low8=rSPRDAT0;//读取转换数据的低8位
while((rSPSTA0&1)!=1);
cs(1);

temp=(high8<<8)+low8;
Uart_Printf("Now the temp is 0x%x!\n",temp);
temp=0;
}

}

程序在MX7705配置好后,进行循环读取函数,其结果如下:

在循环中,有的时候能够读出数据,有的时候只能读出高或低8位,但是能否读出又是很有规律性的!

怀疑过是DRDY引脚所用的GPIO口的上拉功能的引用,所以也换过引脚进行了比较,还是没有改善,求大神指导!!!!!!!!

加载中
返回顶部
顶部