用qg8的内部spi模块读取spi接口的93c46eeprom时16位时,采用查询方式,发现输出波形正常,
但是接受寄存器会把93c46发出的第一个零位放入spid中,请教高手如何解释。
需要接受3个字节一位后才能是正确的数据。并且,无论在发送或接受spid一放数,就会置位SPIS_SPRF
unsigned char rebuff1,rebuff2,rebuff3;
b_cs=1; //93c46使能 yanshi(); //延时 SPID=0X01; //高7位补齐脉冲 while(!SPIS_SPTEF); rebuff1=SPID; //清除标志 SPID=0X80; // 低六位为读取9346的地址 while(!SPIS_SPTEF); SPID=0X00; //产生时钟 while(!SPIS_SPTEF); rebuff1=SPID; // while(!SPIS_SPRF) ; rebuff1=SPID; SPID=0X00; //产生时钟 while(!SPIS_SPTEF); rebuff1=SPID; //读取高字节,????最高位为0,实际为1 while(!SPIS_SPRF) ; rebuff2=SPID; SPID=0X00; //产生时钟 while(!SPIS_SPTEF); rebuff2=SPID; //读取低字节,????最高位为高字节零位, while(!SPIS_SPRF); rebuff3=SPID; SPID=0X00; //产生时钟 while(!SPIS_SPTEF); rebuff3=SPID; // ????最高位为低字节零位 SPIC1=0X00; yanshi(); yanshi(); yanshi(); yanshi(); yanshi(); b_cs=0; yanshi();
}
void yanshi(void){ unsigned char i;
for(i=0;i<10;i++)__RESET_WATCHDOG(); }
|