当 DCAN 处于被动错误状态时、尝试将 DCAN 的初始位设置为1、并通过软件复位 DCAN。 有时、设置 DCAN 的 INIT 位需要很长时间、在 INIT 位被攻击之前超过10ms。
是否有人以前遇到过此问题? 修复它的方法是什么?
此外、什么是使 DCAN 脱离无源错误状态的更好方法? 如何清除 RX 误差?
谢谢
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
当 DCAN 处于被动错误状态时、尝试将 DCAN 的初始位设置为1、并通过软件复位 DCAN。 有时、设置 DCAN 的 INIT 位需要很长时间、在 INIT 位被攻击之前超过10ms。
是否有人以前遇到过此问题? 修复它的方法是什么?
此外、什么是使 DCAN 脱离无源错误状态的更好方法? 如何清除 RX 误差?
谢谢
尊敬的 Mike:
不应花费这么长的时间。 我在 LS04x 器件上的测试显示、它只需93个 CPU 时钟周期(CPU 为80MHz)。
以下是我的测试代码。 由于没有 ACK 信号、CAN1继续向 CAN 总线发送报文、因此错误增量为0x80 (无源)。 当 EPASS 位置位时、PMU 计数器开始计数、并向 Init 位写入1。 在 Init 位被置位后、PMU 停止计数:
while (1)
{
canTransmit (canREG1、canMESSAGE_BOX1、&TX_DATA[0]);
if ((canREG1->ES & 0x20)=0x20){
_pmuResetCounters_();
_pmuStartCounter_(pmuCYCLE _计数器);
canREG1->CTL |= 0x01;
while ((canREG1->CTL & 0x01)!= 0x01);
_pmuStopCounter_(pmuCYCLE _计数器);
/*获取 CPU 周期计数*/
pmuCount =_pmuGetCycleCount_();
}
}