工具/软件:
我们的客户正在进行系统集成、并且与我们的电路板失去了通信。 客户在示波器上捕获了中断检测事件并向我们展示了该事件。 一旦中断检测条件消失、我们的电路板就无法恢复。
在审查我们的固件后、我们发现我们正确地检查并清除了通信错误:
EOC 中断 Void SCIRXINTA_ISR ( Void )
{
IF (SciaRegs.SCIRXST.bit.RXERROR = 1)
{
//*****************
//通信错误
//不在乎哪一个
//*****************
SciaRegs.SCICTL1.bit.SWRESET = 0; //切换 SW_RESET 低电平、然后切换为高电平以清除标志
SciaRegs.SCICTL1.bit.SWRESET = 1; //和状态机。
SciaRegs.SCICTL1.bit.Sleep = 1; //返回睡眠模式并等待空闲
}
我们在实验室中使用 Windows 驱动程序命令测试了电路板、以创建中断检测条件:
PCAS_SerialPort.BreakState = true;
. 然后消除中断情况。
PCAS_SerialPort.BreakState = false;
通过 XDS 100v3调试器运行固件时、我们放置了断点并观察到正确设置和清除了 BRKDT、FE 和 RXERROR 标志。 我们点击了 Code Composer 中的"Resume"按钮(或 F8)。 我们的 Windows 测试 GUI 在向电路板发送命令时从未产生超时错误。
我们对电路板进行下电上电、使其不再在调试模式下运行。 重新启动 GUI 并重新创建了如前所述的中断检测条件。 遗憾的是、电路板从未从中断检测条件中恢复、也未能响应来自 GUI 的命令。 GUI 报告了通信超时错误。
为什么我们的电路板在调试器环境中从通信中断中恢复、但在现实生活中无法响应?
谢谢您、