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.

[参考译文] TMS320F28075:处理 CLA 中的 ISR 溢出

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/889309/tms320f28075-dealing-with-isr-overflow-in-cla

器件型号:TMS320F28075

大家好、

我正在支持我的客户测试他们处理 CLA 和 ADC 溢出的内部管理代码。 这是一个与 CLA 和复杂程序相关的问题、请随意邀请一些专家参与。

1.要创建溢出条件:

它们按用途产生溢出的方式是在 CLA 任务中重复一些简单的代码。 但是 、有一些有趣的发现:

1) 1)重复 EPwm1Regs.CMPA.bit.CMPA = 1;

在4级优化中、我们注意到如果重复此代码少于18次、CLA 任务执行时间不会改变。 但是、如果重复19次、则会发生溢出。  

2) 2)对地址指针执行相同的操作:

这一次、当它们重复代码2次时、会发生溢出。

3) 3)关闭"优化":

相同的代码可以重复50次、并且不会发生溢出

客户想知道这背后的优化原则是什么?

 

2.处理溢出:

1) 1)为了清除 ADC 和 CLA 溢出、客户在 CLA 中具有以下代码:

AdcdRegs.ADCINTOVFCLR.bit.ADCINT1 = 1;

AdcdRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;

__meallow();

Cla1Regs.MICROVF.bit。 INT1 = 1;

_medis();

  但我们注意到相关标志未清除、并且无法再输入 CLA 任务。

2) 2)如果我们尝试清除 PWM 中的溢出标志。 这两个标志都可以被清除、但是 CLA 任务不能被输入。

为什么我们无法清除 CLA 中的 oveflow 标志、CLA 任务无法进入? 欢迎您的到来。

此致、

Brian

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

    Brian、

    我不确定我是否理解客户想要实现的目标。  他们是否尝试在 CLA 状态寄存器中设置上溢/下溢标志?   

    我不清楚反复写入 CMPA 寄存器将如何实现这一点。  这些标志与 FPU 数学运算溢出和下溢有关。  

    请澄清。

    Lori

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

    您好、Lori、

    正如我在一开始所说的、客户只是尝试重现一个 CLA 溢出并验证他们的溢出处理程序。 因此、设置 PWM 比较只是为了扩展 CLA ISR 长度、从而产生溢出。  

    执行此测试的原因是在更改为新编译器版本后观察到的产品中的 CLA 和 ADC 溢出。 因此、他们根据不同的操作和优化进行了多次测试。 这是上一帖子中的第1点问题。

    溢出产生后、他们需要一个处理程序来确保即使发生溢出、下一个中断仍然可以被响应。 因此、他们进行了几次测试、就像我在第2点总结的那样。

    此致、

    Brian

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

    Brian、

    正如我在响应中所说的、CLA 溢出标志用于产生溢出的数学计算。  

    如果 CLA 任务长度仅受器件上 CLA 程序存储器大小的限制。  如果它们超过这个长度、那么任务将不起作用、这是因为部分任务将位于 CLA 无法访问的内存中。   链接器本身可以检测到这一点。

    如果我误解了客户的行为、请提供更多详细信息。  

    此致

    Lori

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

    作为数据表中 MIOVF 寄存器的说明:

    ”溢出标志寄存器中的每个位对应一个 CLA 任务。 当特定任务发生中断溢出事件时、该位被置位。 当从外设源接收到新的中断时,如果 MIFR 寄存器位已置位,则会发生溢出事件。”

    我认为我的客户所做的事情应该有意义。

    此致、

    Brian

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

    Brian、

    现在我了解了。  在我想到 MSTF 寄存器溢出标志时、我深表歉意。  感谢您澄清了哪个溢出标志。   

    对于项目(1)优化-我不确定发生了什么。  该寄存器是易失性的、因此编译器不应优化访问输出。  您能否在每种情况下发布反汇编的屏幕截图?  

    对于项目(2.1)、CLA 寄存器不能通过 CLA 本身访问。  这就是 CLA 无法清除标志和 C28x 能够清除的原因。  F2807x 数据表中的外设寄存器映射中缺少此信息、并且我已提出添加此信息的请求。  (F28004x 数据表对此进行了说明)

    对于项目(2.2)、是否仍为任务设置标志?  为了使任务再次开始运行、可能还需要清除此项。

    此致

    Lori

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

    您好、Lori、

    感谢您的善意回应。

    至于优化结果、我正在协调客户以向我们展示结果。 在我们获得结果后、会联系团队。

    实际上、客户进行这些复杂测试的原因是他们被 CLA 中的优化所迷惑。 启用优化后、即使对 CLA 代码进行了最小修改、也会发现它们可能会发生一些故障、例如溢出或无法触发任务。

    因此、客户有以下2个请求:

    1.他们想知道我们是否有任何关于优化工作方式的指导/培训。 将帮助他们确定造成这种混乱的根本原因。

    2.它们是否只能对 C28代码而不是 CLA 代码应用优化。 我们是否有任何命令告诉编译器不要优化代码的特定部分? 我对这项职能有一种印象,希望得到更多的细节。

    此致、

    Brian  

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

    [引用用户="Brian Wang0]1. 他们想知道我们是否有任何关于优化工作方式的指导/培训。 将帮助他们确定造成这种混乱的根本原因。[/引述]

    让我进行调查、下周周二结束前回来。  

    [引用用户="Brian Wang0">2. 它们能否仅对 C28代码而不是 CLA 代码应用优化。 我们是否有任何命令告诉编译器不要优化代码的特定部分? 我对该功能有一种印象、希望提供更多详细信息。[/引述]

    在 CCS 中、右键单击特定文件并选择属性。  在对话框中、客户可以选择将应用于特定文件的优化。  

    此致

    Lori

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

    这已离线关闭。

    溢出问题与 CLA 未使用的 RAM 大小密切相关。  

    根本原因是对 CMD 文件进行了修改、将 CLA RAM 分配给了 RAMD、CLA 不允许其运行。 因此、当 CLA 代码达到特定大小时、代码将被分配给 RAMD0、这很明显会导致问题。 由于工程师直接更改了 CMD 中存储器的原始地址和长度定义、因此很难注意到。 解决此问题后、代码运行良好。