TI E2E™ 设计支持论坛将于 5 月 30 日至 6 月 1 日进行维护。如果您在此期间需要技术支持,请联系 TI 的客户支持中心寻求帮助。

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.

[参考译文] TMS320F2.8075万:访问CAN寄存器

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/577233/tms320f28075-access-to-can-registers

部件号:TMS320F2.8075万
主题中讨论的其他部件:C2000WARE

在第2074页的《技术参考手册》中,有以下注意事项:

CAN模块使用特殊的寻址方案来支持字节访问。 这与USB模块上使用的地址相同。
为便于使用,建议只对CAN寄存器进行32位访问。 但是,在较高的优化级别,编译器可能会将32位访问拆分为两个连续的16位访问,这将破坏寄存器值。 正在开发一个编译器修复程序。 同时,可以使用16位访问作为变通办法。 较低的16位应写入寄存器的地址,而较高的16位应写入寄存器的地址加2。

然后在第2097页上有以下注意事项:

只允许32位访问CAN寄存器,因为16位访问可能无法按预期工作。

此外,在CAN控制套件中,我找到了带有以下标题的文件CAN.c:

//文件:  ccan.c
//
//标题: F2807x CAN初始化和支持功能。
//
//注:CAN总线桥接器使用不同的编址方案来实现
//      允许字节访问。 因此,可以执行32位读/写操作
//      在较高的优化水平下异常。 CAN驱动器功能正常
//      已调整为显式使用两个16位读/写访问
//      完整的32位寄存器,其中HWREGH (BASE + OFFSET)表示
//      下部16位和HWREGH (BASE + OFFSET +2)代表上部
//      16位。


但是,在文件CAN.c中,我发现许多行中可以使用32位访问权限读取CAN寄存器。

所以我有点困惑。

如何访问CAN寄存器?
我是否应该在书写和阅读中都只使用16位访问?
我是否应该在写入时使用16位访问和在读取时使用32位访问?

如果我使用16位访问,并且中断位于同一寄存器的较低16位访问和较高16位访问之间,那么数据传输是否会损坏?

我是否应该禁用中断,以便16位下访问和16位上访问严格地按顺序进行?





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

    Demis,

               您引用的注释不再有效,将在TRM的下一版本中删除。 现将其替换为以下注释:

     

    CAN模块使用特殊的寻址方案来支持字节访问。 建议使用HWREG_BP()宏(使用__byte_peripheral_32()内在过程)仅使用32位访问CAN寄存器。 如果要使用16位访问,则应将较低的16位写入寄存器的地址,而较高的16位写入寄存器的地址加2。

     

     

     

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

    Demis

    为了补充Hareesh提到的内容,自从您所引用的CAN驱动程序的上次更新以来,我们创建了一个编译器内在(__byte_peripheral_32()),它可以正确地处理这些32位读/写操作。 这现在是访问寄存器的首选方法。 支持该驱动程序的hw_types.h文件尚未使用必需的硬件访问宏进行更新。

    下面是您要添加的宏。
    #define HWREG_BP(x)__byte_peripheral_32(UINT32_t *)(x)

    此外,现在还有一个新的驱动程序库,我建议您在引用该库的同时使用它。 新的软件包C2000Ware ( www.ti.com/.../c2000ware )中提供了新的软件包。 可在~/C2000Ware_1_00_00/driverlib/f2807x找到2807找到

    此致
    Chris

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

    感谢您的回答。

    我下载了新的CAN驱动程序,但我注意到HWREG_BP宏和HWREGH宏(16位访问!) 。 此外还有两个函数(CAN_readDataReg和CAN_writeDataReg),其中HWREGB宏(8位访问!!!) 。

    所以我不知道是否可以使用对CAN寄存器的8位和16位访问。

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

    是的,如果按照上面的注释Hareesh详细信息使用,则可以接受16位访问。 当写入或读取跨越32位寄存器的下16位和上16位的值时,您要使用HWREG_BP。 HWREGB (8位)访问仅在读取数据并将数据写入IF1DATA/B寄存器的特定情况下使用,并使用固有的字节仅抓取8位。 我不建议使用8位访问其他位置。

    此致
    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的,谢谢您的详细解释。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    克里斯托弗
    一个小问题:哪个编译器是实现__byte_peripheral_32(UINT32_t *)(x)函数的最小版本?

    谢谢。

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

    最低版本为v 15.9 .0.STS

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

    我目前正在使用版本v 15.12 .4.LTS。 结束字符串"STS"和"LTS"的含义是什么?

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

    STS为短期支持,LTS为长期支持。 这与他们计划为每个版本执行修补程序和修复的时间有关。

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

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

    您好,您能告诉我您从哪里下载 了TMS320F2.8075万 器件的最新CAN和CANopen驱动程序吗? 非常感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,
    我已从此页面下载

    www.ti.com/.../c2000ware

    克里斯托弗·基奥里拉尔建议的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢!! :)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,您是否知道已移植到TMS320F2807的任何OpenCan库?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    不,我不知道。

    我们正在开发自己的图书馆。

    此致,

    Demis