我是一个新人,对飞思卡尔单片机使用的不是很熟,最近在使用飞思卡尔128单片机和nrf905之间做一个无线传输的小协议,选择飞思卡尔为主机模式,并且作为接收终端,用于接收我的发送数据。我的发送端是用51做到已经好使了,没有问题了(发送端暂且不用考虑是好使的)。那我的问题来了,就是接收端接收不到数据,仿真时,spi只是一打开就迅速中断停止了。查看状态寄存器的SPIF位根本没有改变一直是零停在那里。所以我判断这就是症结所在,导致了MCU读取nrf905的接收数据失败了。
查找了好久,资料阅读了好多也没有发现问题的解决方案。听说这里的高手如云,热心的人如云。我相信,我有信心相信我的问题能很快得到高手的指点的。解决我的问题。
{
//(void)SPI0SR;
SPI0DRL = byte;
Delay(2);
while(!(SPI0SR_SPTEF));//wait until the data is all sent off
}
/*****************************************************************************/
//function SpiRead();
/*****************************************************************************/
uchar SpiRead(void)
{
while(!(SPI0SR_SPIF)); //程序就是卡在这里了,如果屏蔽掉改行代码,spi的数据时运行的状态
Delay(2);
return SPI0DRL; // Return function parameter
}
接收905数据包的函数
void RxPacket(void)
{
uchar i;
TRX_CE=0; // Set nRF905 in standby mode
CSN=0; // Spi enable for write a spi command
SpiWrite(RRP);
for (i=0;i<4;i++) // Read payload comma
{
RxBuf=SpiRead(); // Read data and save to buffer
}
CSN=1; // Disable spi
while(DR||AM);
Delay(2);
TRX_CE=1;
}
真心求解 希望得到各位的帮助 多谢!
这个可以呀, void SpiWrite(uchar byte)
{
//(void)SPI0SR;
SPI0DRL = byte;
Delay(2);
while(!(SPI0SR_SPTEF));//wait until the data is all sent off
}
这个发送的程序我是在12日早上调试好的,要加上个延时905才能够处理好,跟波特率没有关系,只要不超过100K就可以了,我想照着这样做就没有问题了,还有问题再联系。
这个SPI的模式肯定是没有错的了,因为发送的时候spi是好用的而且已经成功了,所以呀,接收程序应该是read函数有问题的了,但是原因到现在还是没有发现,逼得我们开始尝试用模拟的试试,但是我还没有放弃对SPI接收方式的调试过程,我还要坚持一下看看。希望各位大虾支持一哈