SPI工作在从机模式,经过一个芯片转换为USB口连接PC。现在给PC传数时遇到如下问题:写入一些数据,只有第一个字节的数能传到PC,以后的数据都是错误数据。感觉原因是因为第一个数据可以通过SPI0DR写入移位寄存器,后面的数据因为是工作在从机模式,时钟是不可控制,所以写入SPI0DR的数据无法写入移位寄存器。主要程序如下: for(i=0;i<8;i++){ while(!(SPI0SR&0x20)) { } //判断数据寄存器是否可写。第五位为1可写 SPI0DR=DATA; } SPI的初始化程序: int Init_Spi(void){ DDRS=0xE0; SPI0CR1=0x02; SPI0CR2=0x00; // SPI0BR=0x02; //波特率8分频 SPI0CR1=SPI0CR1|0x40; } |