这3天接了一个维护的活儿,发现对方的串口转光部分,上下电会引起DSP里的串口接收数据报错:
SCIRXBUF_BITS结构
Uint16 SCIFFPE:1; // 14 Receiver error flag
Uint16 SCIFFFE:1; // 15 Receiver error flag
就是这俩货报错。
于是网上慢慢求索:
方法有三:
1、重启串口接收部分。
2、重启串口外围设备。
3、重启DSP,杀看门狗。
按照需求,只是串口异常,只需要针对串口做处理即可。
反反复复的在网上看,以及看芯片手册,都不是很得法,最后找到解决办法如下:
if (SciaRegs.SCIRXST.bit.BRKDT == 1 || SciaRegs.SCIRXST.bit.RXERROR == 1)
{
SciaRegs.SCICCR.all =0x0007; // 1 stop bit, No loopback
// No parity,8 char bits,
// async mode, idle-line protocol
SciaRegs.SCICTL1.all =0x0003; // enable TX, RX, internal SCICLK,
// Disable RX ERR, SLEEP, TXWAKE
SciaRegs.SCICTL2.all =0x0000;
SciaRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset
SciaRegs.SCICTL2.bit.TXINTENA =1; // 发送中断
SciaRegs.SCICTL2.bit.RXBKINTENA =1; // 接收中断
asm(" RPT#10 || NOP");
}
放到main循环做检验,发现错误就重置一下即可。
希望3天的时间解决的问题能帮到遇到同样问题的小朋友。