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.

[参考译文] TMS320F28P650DK:LIN:SCI 多缓冲区模式不能正常工作

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1301498/tms320f28p650dk-lin-sci-multibuffer-mode-doesn-t-work-properly

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

您好、专家!

我 在 "lin_ex2_sci_loopback"示例中进行了以下更改以测试多缓冲模式:

1.使用"LIN_enableMultibufferMode"而非"LIN_disableMultibufferMode"来启用多缓冲器模式;

2.将宏定义"FRAME_LENGTH"更改为4

3.使用"LIN_writeSCICharBlocking"连续发送4个字节

然后、我遇到了以下问题:

1.  未触发 RxIsr;

2. 当我单步执行寄存器配置时,我发现无论设置了什么值,SCIFORMAT.length 都始终等于 SCIFORMAT.char 的设置值,而不是我期望的值

我漏掉了什么东西或出了什么问题?  期待您的帮助。

肖恩

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

    大家好、Shawn、

    感谢您的提问。

    Unknown 说:
    1.   未触发 RxIsr;

    这部分的发生是因为你在#2中提到的。 如果.length 设置不正确、则在达到.length (您说已设置为8)之前不会触发中断。

    Unknown 说:
    2.  当我单步执行寄存器配置时、我发现无论设置了什么值、SCIFORMAT.length 都始终等于 SCIFORMAT.char 的设置值、而不是我期望的值[/引号]

    这有点奇怪。 您能否单步执行代码、并在进入"LIN_setSCIFrameLength"函数之前/之后的值"FRAME_LENGTH"是多少? 然后进入该函数、看看它是否没有正确写入? 您可以单步执行代码、看看"Register View"窗口中会发生什么情况、看看它是否设置不正确、或者变量本身是否在代码中的某个位置被覆盖。

    此致、

    文斯

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

    您好、Vince

    我浏览了代码、发现 寄存器值没有按预期变化。

    1.在 LIN_setSCICharLength 之前、length 和 char 全部为0

    2.在  LIN_setSCICharLength 之后、两者都更改为7、这是 char 的预期值

    3.在 LIN_setSCIFrameLength 之后、两个 值均为7、长度未更改为3

    这是另一个问题、在 LIN_enableIntLoopback 后、未设置 SCIFCR1.loopback。 我不知道回送是否真的起作用。

    我直接修改了原始例程、不知道是否漏掉了任何东西。 期待您的帮助。

    肖恩

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

    您好、Vince、

    我尝试以不同的方式查看寄存器的值、发现无法通过 表达式 视图或寄存器视图正确读取寄存器的高位、但我可以通过内存浏览器看到整个64位的内容、  发现映射方法与其他外设略有不同。

    请检查 CCS 表达式和寄存器显示是否存在问题、或者我是否可以调整任何东西来使 CCS 正确显示?

    此致、

    肖恩

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

    您好、Vince

    我做了一些调整,该方案目前正在运作, 以下问题仍然存在:

    1. CCS 观察到的寄存器值与实际寄存器值不匹配、调试过程中会带来不便、 是否可以解决该问题?

    2.在多缓冲模式下、 似乎没有办法观察到3位计数器的值、我只能通过 RXRDY 判断接收状态以及相关的中断、对吗?

    3.如果我想在接收过程中发生异常时复位多缓冲功能、尤其是3位计数器、是否可以使用 SCIGCR1.SWnRST?

    此致、

    肖恩

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

    尊敬的 ShawnYu:

    1.  CCS 观察到的寄存器值与实际寄存器值不匹配、这在调试过程中会带来不便、 是否可以处理它?

    这是一个已知错误、将在下一版 C2000Ware 中纠正。

    2. 在多缓冲模式下, 似乎没有办法观察到3位计数器的值,我只能通过 RXRDY 判断接收状态和相关中断,那是正确的吗?

    是的。

    3. 如果我想在接收中发生异常时复位多缓冲功能、尤其是3位计数器、是否可以使用 SCIGCR1.SWnRST?

    是的、您应该能够使用 SWnRST。

    此致、

    文斯

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

    您好、Vince、

    我很清楚上述问题、感谢您的回答。

    肖恩