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/TMS320F28035:独立模式问题- ISR 触发延迟

Guru**** 2605735 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/673538/ccs-tms320f28035-standalone-mode-problem---delay-in-isr-trigger

器件型号:TMS320F28035

工具/软件:Code Composer Studio

您好!

我能够以独立模式运行。 但我有一个问题。
ePWM ISR 在独立模式下的运行速率低于在使用 JTAG 的闪存上的运行速率。
我已经将 EPWM ISR 复制到 RAM、但在独立模式下仍需要很长时间触发。

您能否解释原因是什么? 可能的解决方案是什么?

此致

Sagar Shah

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

    如果我理解正确、那么您的代码独立运行速度比仿真模式慢。 此外、它在闪存中的运行速度比 RAM 慢。 通常、RAM 是最快的执行速度、但您是否设置了闪存等待状态? 以下研讨会可能会帮助您:

    processors.wiki.ti.com/.../C2000_Archived_Workshops

    请参阅模块10和实验10练习(注意 flash.c 文件)。

    但愿这对您有所帮助。 如果您的问题得到了解答、请单击绿色的"验证答案"按钮。 谢谢。

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

    我已经根据实验10练习(flash.c)进行了更改。 那么、我的问题是、如何使它按照仿真模式速度运行。 我有时间关键型应用。 那么、您能建议我应该怎么做吗?
    我还向 #pragma 中添加了 ePWM ISR 、以将其复制到 RAM 函数。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    萨加尔

    除了只添加 flash.c 文件外、请务必遵循实验10中的其他步骤。 所有时间关键代码都应从闪存复制到 RAM 以以最快速度执行。

    但愿这对您有所帮助。 如果您的问题得到了解答、请单击绿色的"验证答案"按钮。 谢谢。

    - Ken
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、我已经向 RAM 添加了时间关键型部分! 但闪存和 ePWM 之间是否存在关系? 我是指触发延迟?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    萨加尔

    您能否提供有关如何使用 ePWM 模块触发 ISR 的更多详细信息? 谢谢。

    - Ken
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将 EPWM1Regs.TBPRD 设置为不同的 PWM 调制值。

    因此、我的观察结果是、对于独立模式下的同一代码、对于相同的 TBPRD 值、所花费的时间比在仿真模式下花费的时间要长近4-5倍。 我有 GPIO 来观察它。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    萨加尔

    如果我理解正确、您可以使用 ePWM 周期值来调制波形(而不是比较寄存器值)。 这是否意味着您在比较寄存器中有固定的值来更改输出引脚? 您使用什么为 ISR (CTR=PRD 等)生成中断?

    此外、我知道您已将 flash.c 文件添加到项目中。 但是,您是否向 main()添加了函数调用?

    //--初始化闪存和 OTP
    InitFlash();//初始化闪存

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

    是的,我已经添加了 InitFlash();函数调用到 main()。
    在 ePWM 中,我进行以下初始化,然后改变 TBPRD 值:-

    EPwm1Regs.TBSTS.All=0;
    EPwm1Regs.TBPHS.Half.TBPHS =0;
    EPwm1Regs.TBCTR=0;
    EPwm1Regs.CMPCTL.All=0x50;
    EPwm1Regs.CMPB=0;
    EALLOW;
    SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1;
    EDIS;
    EPwm1Regs.AQCTLA.ALL = 0x00;
    EPwm1Regs.AQCTLA.bit.ZRO = 0x02;
    EPwm1Regs.AQCTLA.bit.PRD = 0x00;

    EPwm1Regs.AQCTLA.bit.CAU = 0x01;
    EPwm1Regs.AQCTLB.All=0x09;

    //EPwm1Regs.AQCTLA.All=0x60;
    //EPwm1Regs.AQCTLB.All=0x09;
    EPwm1Regs.AQSFRC.All=0;
    EPwm1Regs.AQCSFRC.All=0;

    EPwm1Regs.ETSEL.All=0x0A;
    EPwm1Regs.ETPS.All=1;
    EPwm1Regs.ETFLG.All=0;
    EPwm1Regs.ETCLR.All=0;
    EPwm1Regs.ETFRC.All=0;

    EPwm1Regs.PCCTL.All=0;

    EPwm1Regs.TBCTL.ALL=0x0010+TBCTLVAL;
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我正在对此线程做出响应、因此我们没有重复的线程。

    您在该系统中是否有其他 ISR 具有相同的延迟问题? 当您说仿真模式时、这意味着什么? 您是指从 RAM 运行、还是与您在独立运行但仅在连接调试器的情况下运行的.out 完全相同?

    您能否在此 wiki 页面上查看 ISR 延迟的一些原因、并考虑您的代码中是否有任何原因?
    processors.wiki.ti.com/.../Interrupt_FAQ_for_C2000

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

    仿真意味着在没有独立模式的情况下从闪存运行。
    我查看过此链接、但不确定是否有任何原因。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    那么、您在仿真模式和独立模式下都使用相同的.out?

    惠特尼
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、我使用的是 same.h 文件。

    另外、我对更新 TBPRD 值有疑问。
    我在 ePWM ISR 结束时触发 ePWM ISR。 因此、当它在 TCNT = TBPRD 时触发、我将用新值更新我的 TBPRD 寄存器。
    那么、如果我尝试在 TCNT = 0时触发 ePWM ISR、它会产生什么影响吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

       我正在共享 Picoscope 的图像。

    图像1:闪存中具有不同 TBPRD 的 EPWM 脉冲(非独立)

    图2:独立模式下 TBPRD 不同的 EPWM 脉冲

    图3:   独立模式下具有恒定 TBPRD 的 EPWM 脉冲

    那么、您能否解释一下、当我在独立代码中改变 TBPRD 时、是否存在这种奇怪的行为?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Sagar -您能否获得以下图像:仿真模式下具有恒定 TBPRD 的 ePWM 脉冲(在闪存中,不是独立的)?
    您将 PLL 锁定在什么位置? 对于固定的 TBPRD、您是否在仿真或独立时看到了正确的脉冲频率?

    我想了解仿真(CCS、从闪存运行)和独立仿真(没有 CCS、从闪存运行)之间是否存在固定和变化的 TBPRD 结果问题。

    我假设在独立模式下、您没有连接 CCS、而只是引导至闪存应用、在仿真模式下、您正在从闪存运行、但连接了 CCS。


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

    您好 Santosh、

    您的假设恰好高于此值。
    "我假设在独立模式下、您没有连接 CCS、而只是引导至闪存应用程序;在仿真模式下、您从闪存运行、但连接了 CCS。 "

    在独立模式和仿真模式中、具有恒定 TBPRD 的 EPWM 脉冲的结果相似。

    我将检查 PLL 并发布它、但我认为我配置的 SYSCLOCK 为60MHz。

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

    [引用 user="sagar shah54">是的,我使用的是 same.h 文件。

    另外、我对更新 TBPRD 值有疑问。
    我在 ePWM ISR 结束时触发 ePWM ISR。 因此、当它在 TCNT = TBPRD 时触发、我将用新值更新我的 TBPRD 寄存器。
    那么、如果我尝试在 TCNT = 0时触发 ePWM ISR、它会产生什么影响吗?

    [/报价]

    Sagar-除了上述问题外,请在下面告知我们。

    我相信、惠特尼问您在独立运行和仿真运行中是否使用相同的.out 文件。 她不是在询问.h 文件、但感谢您提供的信息。

    您能否澄清 ePWM ISR 结束时触发的 ePWM ISR 的含义?  

    您可以在零或周期匹配时生成中断、也可以在两者之间生成中断、但在零和周期匹配选项之间、如果 PWM 计数器设置不变、则被触发的 ISR 的频率不应改变。  

    此致

    Santosh Athuru

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

    [引用 user="sagar shah54"]

    在独立模式和仿真模式中、具有恒定 TBPRD 的 EPWM 脉冲的结果相似。

    我将检查 PLL 并发布它、但我认为我配置的 SYSCLOCK 为60MHz。

    [/报价]

    萨加尔

    通过类似的结果、您能否说明您在独立运行和仿真运行之间看到了良好的结果或差异? 脉冲频率是否与计算结果匹配?

    此致

    Santosh Athuru

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

    我意味着当 Tcount = TBPRD 时、ePWM ISR 会在触发。
    在这个 ePWM ISR 内、当我为下一个 PWM 周期改变频率时、我更新 TBPRD 值。

    是的、我使用的是相同的.out 文件。 只需从仿真模式和独立模式切换即可

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在 TBPRD 的恒定值下找到良好的结果。 但是、如果我更改它、它在仿真模式下工作正常、在独立模式下不工作!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    萨加尔
    感谢您确认仿真和独立运行的 TBPRD 常量值的结果良好且相同。 这是有道理的、独立和针对您拥有的范围和环境运行的仿真之间应该没有区别。

    现在、对于不同的 TBPRD、您如何捕获和比较波形、您如何知道您在从加电或程序开始的同时查看波形? 由于这是一个在器件上电时以独立模式运行的程序、您如何知道独立模式下的示波器波形瞬间与仿真模式下的示波器波形的相同瞬间进行比较? 我想 TBPRD 的变化不是恒定的吗?


    此致
    Santosh Athuru
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当我启动 ePWM 脉冲时、我有一个 GPIO 被触发。
    我将其用作触发器、以便在示波器上进行记录。

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

    萨加尔

    谢谢。 您能告诉我、当您在连接 CCS 的情况下运行程序、但从闪存运行时、即使您已经刷写了应用程序、您也始终会在运行之前加载应用程序吗?

    您能在下面回答/检查/做什么  

    1.>器件看门狗已禁用目前、在示波器上获取 XRSn 信号、并查看是否在其上看到任何脉冲。 这可能表明器件是否由于某种原因在其中一种模式下复位。

    2.>在固定 TBPRD 实验中、是否像使用不同的 TBPRD 代码那样启用 ISR -您是否再次写入相同的 TBPRD、或者您初始化并且不会在该实验中触摸 TBPRD?

    3.>是否启用了 TBPRD 的影子加载?  

    4.>能否在 ISR 中切换 GPIO、在 ISR 进入时将其拉高、在 ISR 结束时将其拉低、并在示波器上获取该 GPIO。 这将告诉我们两次运行之间的 ISR 执行时间

    您能否尝试以下过程来在连接了仿真器的情况下运行您的应用。

    1. 使用不同的 TBPRD 应用刷写电路板(包括上面列表中的#4)
    2. 断电并断开 JTAG、然后加电并获取示波器图
    3. 关闭电路板电源
    4. 将引导模式引脚设置为等待引导
    5. 为电路板加电并连接 CCS、启动目标配置并连接到 CPU、请勿将应用加载到闪存中、因为它已加载。
    6. 执行调试复位将 EMUBOOT 选项设置为引导至闪存
    7. 单击"运行"
    8. 这将在闪存中运行您的应用程序
    9. 得到示波器图。

    比较2和9之间的示波器图?  

    此致

    Santosh Athuru

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

    我将在下周向大家介绍最新情况。
    谢谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您提到过使用 RAM,但是否确保调用'memcopy()'将关键代码复制到 RAM?

    如果您已经解决了问题、请告知我们。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    萨加尔

    我们上次听到您的声音已经过去了一周了。 因此、我们假设您能够解决您的问题。 如果情况并非如此,请拒绝此解决方案或回复此主题。 如果此主题被锁定、请制作一个描述问题当前状态的新主题。 谢谢你。

    - Ken
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我仍然有这个问题。 但我无法进行 Santosh 提到的测试、因为我现在正在进行其他一些项目。
    我将在我再次启动该项目时立即返回。