关于SPI长时间通讯的问题

2019-03-26 08:03发布

最近在做一个SPI通讯的实验,SPI边发边收且循环执行,刚开始程序运行正常,但是运行几个小时后程序就卡在while(!SPIS_SPRF)那里跳不出来了,至今找不到问题。求高人指点啊,小弟谢谢了。 /******************************************************************************************
| FUNCTION NAME : SPI_Init
| CALLED BY : xxxx
| PRECONDITIONS : xxxx
| INPUT PARAMETERS : xxxx
| OUTPUT PARAMETERS: xxxx
| RETURN VALUE : xxxx
| DESCRIPTION : SPI initialize
| NOTE : xxxx
|*******************************************************************************************/
void SPI_Init(void) /*set SPI clock(baud rate);data format;MASTER mode*/
{
SPIC1 = 0X54; /*enable SPI;master mode;samping in the falling edge*/
SPIC2 = 0X00;
// SPIBR = 0X30; /*SPICLK = BUSCLK/8*/
SPIBR = 0X32; /*6*16=96*/
} /******************************************************************************************
| FUNCTION NAME : SPI_RW
| CALLED BY : xxxx
| PRECONDITIONS : xxxx
| INPUT PARAMETERS : *Lp_u_SpiTxBuf,uSiz
| OUTPUT PARAMETERS: *Lp_u_SpiRxBuf
| RETURN VALUE : xxxx
| DESCRIPTION : SPI write and receive funtion,
| NOTE : the SPI communication here is aimed at TPIC84134
|*******************************************************************************************/
void SPI_RW(uint8 *Lp_u_SpiTxBuf,uint8 *Lp_u_SpiRxBuf,uint8 uSiz)
{
uint8 Idx;
uint8 temp;
temp = SPIS;
temp = SPID;
for(Idx=0;Idx<uSiz;Idx++)
{
while(!SPIS_SPTEF); /*wait SPI TxBuffer idle*/
SPID = Lp_u_SpiTxBuf[Idx];
while(!SPIS_SPRF); /*wait RxBuffer full*/
Lp_u_SpiRxBuf[Idx] = SPID; /*read the received data*/ }  
  
}
/*EOF**************************************************************************************/ 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
quilt1120p
1楼-- · 2019-03-26 16:10
MCU是freescale MC9S08DZ60
bluehacker
2楼-- · 2019-03-26 19:18
代码本身没什么问题。可能是其他原因导致的,在你几个小时的运行过程中,有没有出现过复位等现象。
我怀疑是从机,即mcu spi通信的对象出了问题。不知道从机是什么芯片
ddllxxrr
3楼-- · 2019-03-26 23:16
quilt1120p
4楼-- · 2019-03-27 05:07
 精彩回答 2  元偷偷看……
quilt1120p
5楼-- · 2019-03-27 05:48
干扰没有,测试条件一直没有发生变化啊
chunyang
6楼-- · 2019-03-27 06:43
先简化代码编一个只运行SPI接口的测试程序运行,同时最好带有错误次数和类型记录功能,这样就能确认是硬件问题还是软件问题。

一周热门 更多>