本帖最后由 斯坦尼斯拉夫司机 于 2020-4-8 10:58 编辑
目前在调试KEA128单片机时候,设置SPI从机通信,在调试过程中遇到的问题:1、IDE:S32DS; 2、开发板:FRDM-KEA128;用作SPI从机。 3、问题描述: (1)主机采用轮询的方式每次发送8个字节的数据。即传输时先将SS拉低,然后传输完8Byte数据后,再拉高。 (2)从机采用中断方式发送接收数据,从机运行时首先进入中断,将待传输的第1个字节的数据写入到SPI_D寄存器中,然后等待主机发指令。 (3)主机发送第1个字节,然后从机接收到主机的数据,读取从机接收到的数据,此时正常来说从机应该触发中断向主机发送第2个字节的数据,但从机没有触发中断。这是什么原因? (4)在单步调试从机时,发现每次从机读取完SPI_D寄存器之后,SPI_S中SPTEF位没有被置1.即使我利用(void)SPI0_S;来对S寄存器读操作,它也不会置位。 (5)在检查主机收到的数据等于主机发出的数据,但我在从机中设置的从机返回值与主机发出值是不同的。 (6)设置主机发送{0x1A,0x2A,0x3A,0x4A,0x5A,0x6A,0x7A,0x8A}; 设置从机返回{0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88}; 但主机接收的实际数据变成了{0x11,0x1A,0x2A,0x3A,0x4A,0x5A,0x6A,0x7A};
4、查找问题: 在调试过程中,发现,当每次传输完8个字节后,SS被拉高之后,SPI从机会进入到发送中断去,然后我又查找了参考手册,发现原来SPI_C1寄存器中的CPHA这一位置0与置1在从机通信中是由区别的,如果将CPHA改为1就解决了。(见图片中参考手册对于CPHA位的描述) 总结:看来还是需要多详细研究数据手册。 附件是修改后,可以作为SPI从机通信的例程。
最佳答案
不要单步,用 逻辑分析仪去抓波形,一步一步找问题。
|