我们的应用程序正在将同步接口作为SPI从属接口实现。 通信协议为半双工,因此驱动程序正在接收或传输。 时钟相位和极性由标准定义,我们无法更改它们。 它可以运行数天,数月和永久,但有时UCB0会在每个接收字节的第7个时钟边缘之后发出接收中断。 接收缓冲区中的数据或者移动一位,或者有时传输缓冲区中的内容移动一个字节。 在每次接收事务之前,都会重置和配置UCI。 有时需要几个POR来清除该情况,并且数周内不会再次出现。 它只有系统的1个组件,对整个器件进行电源循环非常不方便,必须以物理方式打开装置才能重置MSP430。 它已经开始出现在现场,变得非常麻烦。 我附上了良好和不良接收序列的捕获。 接收中断设置清除IO引脚,使我们知道何时发生。
SPI接收初始化
{
volatile uint8_t dummy;
// SPI communication
StopFlashWrite = true;
UCB0CTL1 = UCSWRST;
RcvState = R_DEVT_1;
RcvCount = 0;
XmtCount = 0;
校验和 = FALSE;
错误代码 = 0;
UCB0TXBUF = 0xDE;
P3SEL = CEAmoSi | CEAClock;
P3DIR &=~(CEAMiSo | CEAmoSi | CEAClock);
UCB0CTL0 = UCMSB + UCSYNC + UCCKPH;
UCB0CTL1 &=~UCSWRST;//释放重置
虚拟 = UCB0RableXBUF;
ENRxInterrupt (
)
正确的接收计时
计时不正确显示整个握手。 收到4个字节时,确定消息已损坏,接收中止。
相同的捕获,更高的分辨率。
此致,
Paul Terricciano
