请cater,luckydog,charli22帮我看看33594的问题
- UID
- 117213
- 性别
- 男
|
请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;
} |
|
|
|
|
|
- UID
- 109373
- 性别
- 男
|
我个人认为在你没有考虑读CR寄存器值的要求。下面的希望能有帮助。
1 事先准备好3个字节的数据,任意的数据,但是一定保证cr1的最高位为‘1’。
2 然后发送这组数据,同时读数据到你的缓存中。 |
|
|
|
|
|
- UID
- 117213
- 性别
- 男
|
下面这条或语句就将cr1的最高位置为‘1’了,没有问题呀,保证下面的操作是读操作了
Write_SPI[0]|=0x80; //读校验字
INIT_MC33594(); //相等配置正确显示“配置正确” |
|
|
|
|
|
- UID
- 117213
- 性别
- 男
|
|
|
|
|
|