首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

请cater,luckydog,charli22帮我看看33594的问题

请cater,luckydog,charli22帮我看看33594的问题

配置33594后,要读取开始的配置字是否正确,但是我每次读取33594的miso线的时候总是低电平,不知什么原因?怎么判断33594是否正常工作?下面是我的程序,时序上与demo程序的时序是一样的,不知什么原因/ 请各位大侠帮我解答,非常感谢 /***************配置MC33594*************/ /* pa0=sclk */ /* pa1=mosi */ /* pa2=miso */ /* pa4=rsetb */ /*****************************************/ /* Write_SPI[0]=0x77; Write_SPI[1]=0xb8; Write_SPI[2]=0xc8; */ void INIT_MC33594(void){ byte i=0xff,j=3,k=8; byte temp,result; PTA_PTA4=1; //RESETB置1 while(i--) { ; } PTA_PTA4=0; //RESETB清0,进入配置模式(33594从设备) PTA_PTA0=0; //Hold SCK low PTA_PTA1=0; //Hold MOSI low DDRA_DDRA0=1; //sclk线,单片机输出 DDRA_DDRA1=1; //mosi线,单片机输出 DDRA_DDRA2=0; //miso线,单片机输入 BUFFER[0]=Write_SPI[0]; BUFFER[1]=Write_SPI[1]; BUFFER[2]=Write_SPI[2]; for(j=0;j<3;j++) { temp=0x80; while(k--) { result=(BUFFER[j]&temp); if((result)!=0) PTA_PTA1=1; else PTA_PTA1=0; PTA_PTA0=1; //clk高电平 asm{nop nop nop } PTA_PTA0=0; //clk低电平 asm nop if(PTA_PTA2==1) //将miso线的配置数据送入Read_SPI[3]中 { Read_SPI[j]|=temp; } temp>>=1; } } } byte CheckConfig(void) { Write_SPI[0]|=0x80; //读校验字 INIT_MC33594(); //相等配置正确显示“配置正确” if(Write_SPI[0]!=Read_SPI[0]) //否则返回重新配置 { //Write_SPI[0]&=0x7f; //INIT_MC33594(); return 0; } else if(Write_SPI[1]!=Read_SPI[1]) { //Write_SPI[0]&=0x7f; //INIT_MC33594(); return 0; } else if(Write_SPI[2]!=Read_SPI[2]) { //Write_SPI[0]&=0x7f; //INIT_MC33594(); return 0; } /****************显示“配置正确”*******************/ else return 1; }
我为人人,人人为我。
我个人认为在你没有考虑读CR寄存器值的要求。下面的希望能有帮助。
1 事先准备好3个字节的数据,任意的数据,但是一定保证cr1的最高位为‘1’。
2 然后发送这组数据,同时读数据到你的缓存中。
下面这条或语句就将cr1的最高位置为‘1’了,没有问题呀,保证下面的操作是读操作了
Write_SPI[0]|=0x80; //读校验字
INIT_MC33594();            //相等配置正确显示“配置正确”
我为人人,人人为我。
顶,还是没找到原因在哪?
我为人人,人人为我。
返回列表