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.
工具/软件:Code Composer Studio
嗨、大家好、
CAN_loopback 示例中似乎存在错误。 我将查看 device_support\f28m35x\v220\F28M35x_examples_Master\CAN_loopback\m3中的示例。
在函数 CANIntHandler()中,读取中断寄存器。 如果返回的值为0x8000、函数会设置错误。 但是、根据芯片文档、0x8000表示存在_不_错误。
您可以确认吗?
谢谢、
Calvin
您好、Haresh、
是的、我花了一段时间才知道发生了什么。 主要是因为 CAN.c 驱动程序不必要地混淆了对 CAN 块的寄存器访问。 具体而言、
CANIntStatus()调用方式:
调用的几乎完全相同的 CANStatusGE()
g_bErrFlag 看起来应该是一个错误标志。 它称为"勘误表"。 但是、正如您指出的、注释指出这可能表示出错。 它可能不会。 没有对变量的解释、只是它可能指示或不指示什么。 如果简单性会增加混乱、则没有什么帮助。
由于中断处理程序的写入方式、它需要对 ISR 进行三次调用来为一个 CAN 总线数据包提供服务。 没有必要这么做。 在大多数情况下、建议不要这样做。 尽管这涉及到 CAN 块功能的基本原理、但未提及多次调用的事实。
所以、是的、你是对的-没有错误。 我的错误是由于接收包在某些情况下覆盖了之前的数据包而导致的-部分原因是我的代码出现问题,部分原因是 CAN 硬件块存在限制。 昨天我花了大部分时间才找到它、这是因为混淆的驱动程序代码和一个无法很好地解释块的示例。 这是你们可以改进的东西。
Calvin