<br />本人在使用LPC2142的SPI总线读写数据的时候,出现了这样的现象:<br />在向SPI的数据寄存器S0PDR写入数据后,发现SPI状态寄存器S0PSR变为0x40,而在未写入之前,SPI状态寄存器S0PSR的值为0x00。<br /> IO1CLR = SPI_Enable; //片选SPI器件<br /> Uart0_SendByte(S0PSR); //读取SPI状态寄存器,发现值为0x00<br /> S0PDR = 0x05; //将数据写入SPI数据寄存器S0PDR<br /> Uart0_SendByte(S0PSR); //读取SPI状态寄存器,发现值为0x40<br /> while(0 == (S0PSR & 0x80)); //等待数据发送完毕<br />查阅得知是写冲突(WCOL),资料上说:先通过读取该寄存器,清零WCOL位,再访问SPI数据寄存器。 我也按照这个方法做了,但是还是同样的现象。<br /> IO1CLR = SPI_Enable; //片选SPI器件<br /> Uart0_SendByte(S0PSR); //读取SPI状态寄存器,发现值为0x00<br /> dat = S0PSR; //先读取S0PSR寄存器<br /> Uart0_SendByte(dat); //送串口输出<br /> S0PDR = 0x05; //将数据写入SPI数据寄存器S0PDR<br /> Uart0_SendByte(S0PSR); //读取SPI状态寄存器,发现值为0x40<br /> while(0 == (S0PSR & 0x80)); //等待数据发送完毕<br /><br />请问:<br />1、什么是写冲突?是上一个数据没有发送完毕还是什么?<br />2、主器件的SPI状态寄存器是否受从器件的影响?<br />3、主器件的发送模式是不是必须和从器件的接收模式相匹配?<br /><br />谢谢! |
|