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.

[参考译文] CCS/F28M35H52C:CAN 环回示例中的错误

Guru**** 1996415 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/673925/ccs-f28m35h52c-bug-in-can-loopback-example

器件型号:F28M35H52C

工具/软件:Code Composer Studio

嗨、大家好、

CAN_loopback 示例中似乎存在错误。 我将查看 device_support\f28m35x\v220\F28M35x_examples_Master\CAN_loopback\m3中的示例。

在函数 CANIntHandler()中,读取中断寄存器。 如果返回的值为0x8000、函数会设置错误。 但是、根据芯片文档、0x8000表示存在_不_错误。

您可以确认吗?

谢谢、

Calvin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    0x8000表示错误和状态寄存器的值不是0x07。 这表示 LEC 有可能为0到6。 这些注释只提到可能出现错误。 为了简化示例、它不会进一步调查、而是将标志设置为指示"可能发生了一些错误"。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Haresh、

    是的、我花了一段时间才知道发生了什么。 主要是因为 CAN.c 驱动程序不必要地混淆了对 CAN 块的寄存器访问。 具体而言、

    CANIntStatus()调用方式:

    • 中断状态 REG=0实际上读取寄存器0x10
    • 中断状态 REG=1实际读取寄存器0xB0

    调用的几乎完全相同的 CANStatusGE()

    • 状态寄存器=0实际读取寄存器0x4
    • 状态寄存器= 1实际读取寄存器0x88
    • 状态 REG=2实际读取寄存器0x9C
    • 状态寄存器=3实际读取寄存器0xC4

    g_bErrFlag 看起来应该是一个错误标志。 它称为"勘误表"。 但是、正如您指出的、注释指出这可能表示出错。 它可能不会。 没有对变量的解释、只是它可能指示或不指示什么。 如果简单性会增加混乱、则没有什么帮助。

    由于中断处理程序的写入方式、它需要对 ISR 进行三次调用来为一个 CAN 总线数据包提供服务。 没有必要这么做。 在大多数情况下、建议不要这样做。 尽管这涉及到 CAN 块功能的基本原理、但未提及多次调用的事实。

    所以、是的、你是对的-没有错误。 我的错误是由于接收包在某些情况下覆盖了之前的数据包而导致的-部分原因是我的代码出现问题,部分原因是 CAN 硬件块存在限制。 昨天我花了大部分时间才找到它、这是因为混淆的驱动程序代码和一个无法很好地解释块的示例。 这是你们可以改进的东西。

    Calvin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Calvin、
    我对这种混乱表示歉意。 我会将其反馈给软件团队。