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.

[参考译文] TMS320F280039:调试 LIN 示例工程时、LINTD 和 LINRD 寄存器出错

Guru**** 2398695 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1237276/tms320f280039-the-lintd-and-linrd-register-are-wrong-when-debugging-lin-example-project

器件型号:TMS320F280039
主题中讨论的其他器件:C2000WARE

尊敬的 Champs:

现在我在 C:\ti\c2000\C2000Ware_4_03_00_00\driverlib\f28003x\examples\LIN\LIN_EX7_external_loopback 中调试该工程、我的 CCS 版本为12.2。  我没有进行任何修改。 我发现 LINTD 和 LINRD 寄存器出错了。

当代码运行到 lin_sendData (Lina_base、txData)(下图中的代码)中的 for ()循环时、我发现 LINTD1寄存器的数据有问题。  

当第一个 for ()循环结束时、寄存器的值显示如下、TD5和 TD7都被指定值0xEF。

循环2-4次后、寄存器和存储器浏览器显示如下:

2 μ A:

3 μ:

4 μ:

我在 TRM 中看到只有低32位对 LINTD1有效、所以看起来在高32位写入的值无效。  我不确定是否清楚说明了、我的意思是应该在内存浏览器中为 LINTD1分配值9AAB CDEF 0000、而不是 CDEF 9AAB 9AAB。 LINRD1和 LINTD1具有相同的问题。

您能帮助检查一下吗? 谢谢!

此致、

朱莉娅

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

    尊敬的 Julia:

    您是否可以通过直接读取寄存器并存储在变量中来检查这是否只是"存储器浏览器"问题? 我经常看到 LIN 寄存器视图不正确、即使实际器件中的数据是正确的。 有时它会发生漂移。

    此致、

    文斯

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

    您好、Vince。

    我发现、无论我在 lin.c 中的 ffor 循环 lin_sendData 中更改了什么代码、寄存器都会显示相同的结果。 如下图所示、您可以看到我对写入 LINTD0寄存器的代码做了注释、但寄存器仍在写入值。 并且未处于正确的位置。

    我尝试读取寄存器的值、但不知道它为什么一直显示0。下面是我的配置。

    但我可以读取该地址、

    您能否尝试调试这段代码、看看能否对其进行复制? 现在、客户渴望解决这个问题。 谢谢!

    此致、

    朱莉娅

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

    Julia:

    您正在读取的地址错误。 请使用以下内容(如果您使用的是 LINB、则更改为 LINB_BASE):

    // using a driverlib function, this is preferred:
    uint16_t rxData[8] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
    LIN_getData(LINA_BASE, rxData);
    
    // -OR- manually reading values
    uint16_t *pData;
    *pData = HWREGB(base + LIN_O_RD0 + ((uint32_t)i ^ 3U))

    此致、

    文斯