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