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.

[参考译文] TMS320F28033:"CPU write"当"CPU write""CLA read"同时访问 CPUtoCLARam 区域时丢失数据

Guru**** 2535750 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/895976/tms320f28033-cpu-write-data-lost-when-cpu-write-and-cla-read-access-to-cputoclaram-area-simultaneously

器件型号:TMS320F28033

您好、专家、

客户遇到这样一个问题:当"CPU 写入" 和 "CLA 读取"同时访问 CPUtoCLARAM 区域时、"CPU 写入"数据丢失。

如下图所示、 "CPU 写入"操作位于 dccpu_ISR 循环中、而 "CLA 读取"操作位于 Cla1Task3循环中。 两个环路都由 120kHz 的 PWM_CTR_ZERO 中断触发、CPU 和 CLA 带宽足以供代码使用。     

测试步骤是

  1. 首先从"MdlCurrent LoadSwitch>2048L"跳转到"MdlCurrent LoadSwitch<1024L"条件、"uiDcdcVoltK3/4/5 "变量的值将被更改;
  2. 在 "MdlCurrent LoadSwitch<1024L"条件下、如果变量值等于以下一组测试结果、例如(17168/426/3130)、系统将跳转至 "1024L <MdlCurrLoadSwitch<2048L" condition.
  3. 然后、在 "1024L <MdlCurrLoadSwitch<2048L" condition, the variables value keep unchanged and same with the value in step2. 中

在步骤2中、如果 同时进行"CPU 写入" 和 "CLA 读取"访问 、则可接受 dccpu_ISR 循环中的变量值与变量值不同。

但是、在步骤3中、变量保持不变、这意味着"CLA 读取"后会忽略或丢失"CPU 写入"。 这种行为是否正确?  

不过、它似乎与下面的 E2E 链接不一致、该链接" CPU 读取不会被忽略、但会被挂起、并且在 CLA 访问完成后提供访问。"

http://e2e.ti.com/support/microcontrollers/c2000/f/171/t/690722?TMS320F28035-Question-about-CPU-and-CLA-try-to-access-cla-to-cpu-message-RAM-at-the-same-time-issue

测试结果:

答:

uiDcdcVoltK3_CpuToCla = 17168;

uiDcdcVoltK4_CpuToCla = 426;

uiDcdcVoltK5_CpuToCla = 3130

 B:

uiDcdcVoltK3_CpuToCla =  17168

uiDcdcVoltK4_CpuToCla = 168;

uiDcdcVoltK5_CpuToCla = 3130;

C:

uiDcdcVoltK3_CpuToCla = 3298;

uiDcdcVoltK4_CpuToCla = 168;

uiDcdcVoltK5_CpuToCla =  16742

D:

uiDcdcVoltK3_CpuToCla =  3298

uiDcdcVoltK4_CpuToCla = 426;

uiDcdcVoltK5_CpuToCla = 16742;  

此致

Rayna

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

    您好、Rayna、

    您提到的另一个 e2e 线程讨论'CLA 到 CPU 消息 RAM'、而您的查询则是'CPU 到 CLA 消息 RAM'。 请注意、两个存储器的优先级方案存在差异。

    如 TRM 中所示、在'CPU 到 CLA 消息 RAM'的情况下、CLA 读取的优先级高于 CPU 写入。 您很可能会发现 CLA 在 CPU 完成写入前已开始读取 uiDcdcVoltK3/4/5变量。 您能否检查情况是否如此?

    此致、
    Praveen

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

    您好 Praveen、

    是的、您答对了。  我提到的 RAM 与其他 e2e 链路不同、但是、您是否认为 e2e 回复可以更改为"较低的操作不会被忽略、但会被挂起、并且在较高的操作完成后会提供访问"?

    "您很可能会发现 CLA 在 CPU 完成写入前已开始读取 uiDcdcVoltK3/4/5变量。"

    我理解您的意思、我也同意您所说的条件。 我还提到、在步骤2中、如果 同时进行"CPU 写入" 和 "CLA 读取"访问、结果是可以接受 的。

    也许最后一个信息不是很清楚地表达我的意见。 感谢您的分析、我尝试在下面再次进行解释、如果您有疑问、请告知我。

    • 调试过程从步骤1到步骤3、最后系统将在步骤3条件下继续运行。 当系统在步骤3条件下继续运行时、变量仍保持不变。  
    • 我们感到困惑的是、为什么变量值不会作为 dccpu_ISR 循环中的值发生更改、也就是说  、当代码在 "1024L <MdlCurrLoadSwitch<2048L" condition. 中持续运行时、CPU 不会在 CLA 完成读取后继续完成写入

    从上面的分析中、我们猜在"CLA 读取"之后"CPU 写入"会被忽略或丢失。 这不符合 "较低的操作不会被忽略、但会被挂起、并在较高的操作完成后提供访问"的要求。

    但是、我不确定分析是否合理。 请就此发表评论。 谢谢!

    此致

    Rayna

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

    您好、Rayna、

    较旧的 e2e 正在讨论特定的上下文、因此给出的解决方案是特定于该上下文的。 通常、最好参考 TRM 以了解通用行为。

    关于调试、您能帮助我更深入地了解代码/调试的流程吗?

    如何计算 MdlCurrent LoadSwitch 的值? 它是在 Cla1Task3循环内根据 uiDcdcVoltK3/4/5值计算的吗?

    2.您在哪里读取了测试结果 A/B/C/D 中列出的值? CPU 还是 CLA 端? 您能否列出在您单击"1024L <MdlCurrLoadSwitch<2048L" condition? 时从两侧读取的值

    此致、
    Praveen

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

    您好 Praveen、

    如何计算 MdlCurrent LoadSwitch 的值? 它是在 Cla1Task3循环内根据 uiDcdcVoltK3/4/5值计算的吗?

    • 该变量来自 ADC、通过 CLA 中的采样信号进行采样、然后按照上述代码内容转换为 CPU。

    2.您在哪里读取了测试结果 A/B/C/D 中列出的值? CPU 还是 CLA 端? 您能否列出在您单击"1024L <MdlCurrLoadSwitch<2048L" condition? 时从两侧读取的值

    • 实际上、客户找不到合适的方法来确认测试值处于同一周期。 但是、通过在代码中修复 A/B/C/D 值之一、它可能重复相同的异常现象。  

    此致

    Rayna

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

    Rayna、

    我建议进行几个实验:

    1. ‘确保没有数据丢失,请确保变量“uiDcdcVoltK3/4/5”仅在 ISR 内更新。 一旦确认这些变量未在其他地方被过度写入、在 ISR 结束时从 CPU 侧(可能通过调试器或通过 SW)读取变量几次迭代。 它应该只包含 ISR 中设置的值的一个组合。 如果是这种情况、则意味着没有数据丢失

    2. ‘避免在 CPU 写入变量之前 CLA 读取变量的任何情况,请确保在 ISR 完成时触发 CLA 任务(该任务消耗的是 uDcdcVoltK3/4/5’变量)。 这‘通过在 ISR 结束时执行任务的软件触发来实现。在该任务中,uDcdcVoltK3/4/5’被使用。 这可确保在 CLA 开始使用前、变量完全由 CPU 写入。 现在在您的设置中、使用这些变量的 CLA 任务是否与 Cla1Task3不同?

    此致、
    Praveen

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

    您好 Praveen、

    从测试结果中、客户发现问题可能会受到系统级因素的影响。

    但是、客户想知道 、如果"CPU 写入"数据在"CPU 写入" 和 "CLA 读取"同时访问 CPUtoCLARAM 区域时丢失。

    您能帮助解决这种困惑吗? 谢谢!  

    此致

    Rayna

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

    Rayna、

    很高兴知道这是由根引起的。

    关于数据丢失的问题、如果"CPU 写入"和"CLA 读取"在与 CPUtoCLAMsgRam 同时发生的同一周期发生、如 TMS320F28033 TRM 第10.3.1.1节中所列、它进入仲裁逻辑、并且"CLA 读取"操作首先发生、然后是"CPU 写入"。 不会丢失任何数据。

    我将此主题标记为已解决、如果您有任何疑问、请重新打开。

    此致、
    Praveen