昨天又调试了一遍程序,还是不行,很奇怪,如果把开发板和计算机断开连接不通电很长一段时间,再连接起来,做2131的SPI主机实验,7段数码管会闪烁,但也不是正确的从零开始闪,并且到一个数就停了,7段数码管就不动了,以后无论怎么运行程序,数码管都不再变化,我用串口回传数据跟踪了一下: uint8 MSPI_SendData(uint8 data) { uint8 p; IOCLR = (1 << 29);
SPI_SPDR = data;//赋值要发送的数据 //p = SPI_SPSR; //UART_SendByte(p);//这里接收的是0x00,发送前状态寄存器
while((SPI_SPSR & 0x80) == 0) ;//等待发送完毕
//p = SPI_SPSR; //UART_SendByte(p);//这里接收的是0x80,发送后状态寄存器 //p=SPI_SPDR;//读SPI_SPDR会清空SPIF标志,但读SPI_SPSR不清空!
UART_SendByte(SPI_SPDR);//这里回传的数据始终是00 IOSET = (1 << 29); return(SPI_SPDR); }
为什么回传的数据始终是00呢?数据已经发过去了呀?为什么数码管不变化? IODIR等都设置了,SPI初始化也没问题,用随机光盘上的程序也不行,难道是595的问题? |