EN25T80的ID读不对,大家帮忙看看。
这是相关代码,这些代码在我另一块实验板上可以正常读到EN25T80的ID:0X1C 0X51 0X14,可是弄到这块实验板上后就读成0X18 0X00 0X06了,时钟都是24M//Data is shifted out on the falling edge of the CLK.
//D0(数据输出)采样于CLK的下降沿
//器件默认为SPI模式0,时钟空闲时为低。
unsigned char SPI_ReadByte(void){
unsigned char i,j=0;
for(i=0;i<8;i++){
j<<=1;
SPI_CLK=0;
_nop_();
_nop_();
_nop_();
_nop_();
if(SPI_SDO) j++;
SPI_CLK=1;
// j<<=1;
}
SPI_CLK=0; //MODE 0,时钟空闲时为低。
return j;
}
//Data is shifted in on the rising edge of the CLK.
//DI(数据输入)采样于CLK的上升沿
//器件默认为SPI模式0,时钟空闲时为低。
void SPI_WriteByte(unsigned char wByte){
unsigned char i;
for(i=0;i<8;i++){
SPI_CLK=0;
if(wByte&0x80) {SPI_SDI=1;}
else {SPI_SDI=0;}
wByte<<=1;
SPI_CLK=1;
_nop_();
}
SPI_CLK=0; //MODE 0,时钟空闲时为低。
}
void readid()
{
SPI_CLK=0; //MODE 0,在CS变低之前,时钟变成低电平
_nop_(); //MODE 0,在CS变低之前,时钟变成低电平
_nop_();
SPI_CS=0; //
SPI_WriteByte(0x9f); //READ ID
ss=SPI_ReadByte();
// SPI_WriteByte(255); //dummy.8个CLK
ss=SPI_ReadByte();
// SPI_WriteByte(255);
ss=SPI_ReadByte();
SPI_CLK=0; //MODE 0,在CS变高之前,时钟变成低电平
_nop_(); //MODE 0,在CS变高之前,时钟变成低电平
_nop_();
SPI_CS=1; //MODE 0,在CS变高之前,时钟变成低电平
}
void main(void)
{ unsigned char nn,n2,tt,mm,qq,pg;
// unsigned long lp=0;
// unsigned char *p;
delay();
for(mm=0;mm<8;mm++)
for(nn=0;nn<128;nn++)
LCDRAM=0;
lcdreset(); //初始化液晶显示控制器
while(1)
{ pg=0;
while(pg<8)
{ qq=0;
readid();
for(nn=0;nn<3;nn++)
{ mm=ss;
tt=mm/16;
tt=tt*5;
for(n2=0;n2<5;n2++)
LCDRAM=ASC_57;
tt=mm%16;
tt=tt*5;
for(n2=0;n2<5;n2++)
LCDRAM=ASC_57;
qq+=4;//空4列;
}
mypute12864();
pg++;
delay();
delay();
delay();
delay();
}
} 万能的坛啊,赐于我力量吧,到底是哪里的时序不对呢。0x18 0x00 0x06这能说明些什么问题呢。 楼主有EN25T80这个芯片的驱动程序吗?
页:
[1]