主题中讨论的其他器件:HALCOGEN
您好!
我在完全由中断驱动的环境中使用 TMS570。 轮询通常是不可接受的。 我想检测 CAN 总线故障、其结果是导致 TMS570 DCAN 控制器不断重新发送最后一条消息。 我知道我可以禁用重新发送、但这也不可取、因为通常您希望它在发生碰撞或其他情况时重新发送。 理想情况是、如果消息在输出缓冲器中停留的时间超过一段时间、就会出现错误中断。 这是可行的吗?
感谢您的任何想法...
烧伤
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.
您好!
我在完全由中断驱动的环境中使用 TMS570。 轮询通常是不可接受的。 我想检测 CAN 总线故障、其结果是导致 TMS570 DCAN 控制器不断重新发送最后一条消息。 我知道我可以禁用重新发送、但这也不可取、因为通常您希望它在发生碰撞或其他情况时重新发送。 理想情况是、如果消息在输出缓冲器中停留的时间超过一段时间、就会出现错误中断。 这是可行的吗?
感谢您的任何想法...
烧伤
您好、Sunil、
我很抱歉、我不太清楚。 我通过 HalCoGen "notify"例程使中断正常工作。 当消息到达时以及完成时、我会得到中断。 都非常好。 我还启用了状态更改和错误通知。
我的问题是、当我模拟 CAN 总线故障时。 在这种情况下、我尝试发送的消息未被总线上的另一个节点应答、因此 TMS570 DCAN 一直尝试重新发送。 这适用于某个时间、不会产生错误。 但是,问题是它一直在不停地重复。 在某些时候、我希望它放弃并发出错误信号、这将生成中断。
总之、中断运行正常。 但是、即使在重试传输的几秒钟(或几分钟)后、DCAN 模块也不会识别错误或状态变化。 我想快速了解 CAN 总线是否出现故障。
想法? 谢谢。
Burns、您好!
我也应该更清楚。 只要发送的 CAN 报文未被应答、就会产生状态改变中断。 这不是 CAN 错误中断的一部分、而是被视为状态变化、并由 CAN 错误和状态寄存器(DCAN ES)中的 LEC (最后一个错误代码= 3)位域反映出来。 请参阅参考手册中的以下内容:
将为 TX OK、RX OK、WakeUpPnd 或 LEC 位字段的所有更改生成状态更改中断。 SPNU607a 的第24.10.3节对此进行了说明。
您可以在状态更改 ISR 中实现一个计数器、以跟踪 LEC = 3调用该中断的次数。 这与时间单位不直接相关、但您可以在软件中采取其他操作、而不是允许 CAN 节点永久重新传输未确认的消息。
中断可在三个点被选通:
此致、Sunil
嗯、正如我说过的、除了错误之外、所有中断都正常工作。 据我所知、所有中断都出现在同一中断请求线路上、因此我显然正确设置了 VIM。 除非我需要设置另一个中断请求行并且找不到该中断请求行。
正如我说过的、我还调用 了 canEnableErrorNotification 和 canEnableStatusChangeNotification、它们似乎设置了您提到的特定条件(即 CTL 寄存器的位2和位3、SIE 和 EIE。
我的 HalCoGen 在"Help/Examples"下没有 CAN 错误状态中断的示例。 您能在网上提供一个指向它的指针吗?