haohan007 发表于 2011-12-30 18:16:05

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();
       }
}

haohan007 发表于 2011-12-31 13:12:34

万能的坛啊,赐于我力量吧,到底是哪里的时序不对呢。0x18 0x00 0x06这能说明些什么问题呢。

stream11181314 发表于 2013-1-15 19:20:06

楼主有EN25T80这个芯片的驱动程序吗?
页: [1]
查看完整版本: EN25T80的ID读不对,大家帮忙看看。