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.

[参考译文] CCS/TMS320F28069:ISR 服务程序堆栈时间

Guru**** 2581345 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/650363/ccs-tms320f28069-isr-service-program-stack-time

器件型号:TMS320F28069

工具/软件:Code Composer Studio

大家好,我想知道 C28x   和 CLA 之间的 ISR 服务器的寄存器推送时间。

然后、我放置"EPwm5Regs.AQSFRC.bit.OTSFB = 1;"来测试时间。 但结果与我从 汇编器中了解的情况不同。

PWM 设置  

EPwm5Regs.CMPA.half.CMPA = PRD_500k+1;
EPwm5Regs.CMPB = PRD_500k+1;

EPwm5Regs.AQCTLA.bit.ZRO = AQ_SET;
EPwm5Regs.AQCTLA.bit.CAU = AQ_CLEAR;
EPwm5Regs.AQCTLB.bit.ZRO = AQ_SET;
EPwm5Regs.AQCTLB.bit.CBU = AQ_CLEAR;

EPwm5Regs.AQSFRC.bit.ACTSFA = 1;
EPwm5Regs.AQSFRC.bit.ACTSFB = 1;
EPwm5Regs.AQSFRC.bit.RLDSF = 3;

然后、我看到 C28 汇编器如下所示、

00a000:761B ASP
00a001:FFF0按 RB
00a002:ABBD MOVL * SP++、XT
00a003:A0BD MOVL *SP++,XAR5
00a004:C2BD MOVL * SP++、XAR6
00a005:C3BD MOVL * SP++、XAR7
00a006:E20000BD MOV32 * SP++,STF
00a008:E20300BD MOV32 *SP++,R0H
00a00a:E20301BD MOV32 * SP++,R1H
00a00c:E20302BD MOV32 * SP++,R2H
00a00e:E20303BD MOV32 * SP++,R3H
00a010:E6300600 SETFLG RNDF32=1、RNDF64=1
00a012:2942 CLRC OVM|PAGE0
00a013:5616 CLRC AMODE

 它只需要14个指令集、加上 "EPwm5Regs.AQSFRC.bit.OTSFB = 1";8条指令 总共需要22个指令集。

但我测试的是 、它需要36组。

CLA 任务需要19组。

我的想法是否有问题? 或者 CPU 执行一些指令、但我无法从 CCS 调试窗口中看到它。  

谢谢你。

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

    您能否简单地澄清一下您的问题?  顶部的 C 代码与底部的汇编代码有何关系?

    汇编代码看起来像一个上下文保存、听起来好像你在尝试测量从中断触发器进入 ISR 的时间(未显示)。  可能 CPU 自动上下文保存会将测量中的差异考虑在内、这需要14个周期(请参阅附件:36 - 22 = 14)、但如果不知道您是如何触发中断、我无法确定。  此外、您使用 CLA 测量的是什么?  请详尽说明。

    谢谢你。

    此致、

    Richard

    e2e.ti.com/.../1351.C28x-Interrupt-Latency.pdf

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复! Richard
    我按照如下方式进行测试、EPWM5采用上数模式、EPWM5B 始终设置为高电平(Duty=1)、中断触发器是在 count =零时触发的、然后我在 ISR 的第一行中输入"EPwm5Regs.AQSFRC.bit.OTSFB = 1"以测试中断延迟。测试中断延迟所需的时间为400ns (39个周期)。 上述汇编代码是从 CCS 调试窗口复制的。 我很困惑、如果 ISR 只需要执行这些汇编代码(14个周期)和"EPwm5Regs.AQSFRC.bit.OTSFB = 1"(8个周期)、我预计的脉冲时间应为22个周期(244ns)。 但它的节拍为400ns。 当发生 ISR 但无法从 CCS 调试窗口中看到时、CPU 是否执行了一些指令集? 我在 CLA 中运行时的情况测试相同。 我希望在没有中断延迟的情况下有8个周期。 但它需要19个周期。 能不能帮我弄清楚我的 thoungt 有什么问题。
    谢谢你。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我想我可能理解 C28需要36个周期。 我找到这个

    那么、当 CPU 执行 ASP 时。 硬件显性1-6、还需要时间吗? 时间大约为14个周期?  

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

    不、我在上一篇文章中发送的图表中考虑了14个周期。  它包括清空管道和自动上下文保存(列表中的项目1)。  其他硬件东西并行发生。  如果测量的是36个周期、剩余的22可能是编译器插入的其他上下文保存指令。

    随附的是受硬件上下文保存保护的寄存器列表。  如果您在第一个帖子中查看汇编代码、您将看到这些寄存器都不受硬件保护-编译器正在保存它们。  在测量延迟的方法中、您将看到这些额外的节省、以及设置 OTSFB 位的几个周期。

    CLA 上没有中断的概念、因此我猜您会从 PWM5触发一个任务、然后 PWM5会设置 OTSFB 位。  您可以在任务开始时设置一条 MDEBUGSTOP 指令、然后单步执行汇编以查看其执行的操作。  CLA 有一个8级管线、当任务开始时、此管线必须被填充。

    此致、

    Richard  

    e2e.ti.com/.../C2000-auto-context-save-registers.pdf