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.

[参考译文] TMS320C6748:从空闲状态中断唤醒?

Guru**** 2587365 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/593639/tms320c6748-interrupt-wake-up-from-idle

器件型号:TMS320C6748

我有几个中断、它们都可以正常工作、并且希望在处理器等待以太网时使其空闲一秒钟。  在我的中断中输入断点表示 中断在我到达 IDLE 指令之前正常工作。  中断设置为5、6、7和8。  如果我在进入 IDLE 指令后暂停调试器、IFR 会显示位被置位。 在进入 IDLE 指令之前调用中断。  我以为当发生中断时处理器会唤醒、但事实并非如此。  在空闲前是否需要翻转一些其他位、以便实现这一点?

 

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

    Mike、

    [引用 user="Mike Rosing"]我认为处理器在发生中断时唤醒[/引用]

    这就是它的工作方式。 从技术上讲、CPU 正在执行一个多周期 NOP、但是当一个中断发生时、它将脱离空闲状态。

    [报价用户="Mike Rosing"]是否有其他位需要在空闲前翻转才能发生这种情况?

    我很确定需要启用 GIE、但中断不需要单独启用。 这至少是它在早期 C6000器件上的工作方式、因此应该已经被移植到更新的 C674x 内核中。

    我找不到有关脱离空闲状态的其他详细信息、但您应该能够设置一些受控测试、使其正常工作。 首先在测试中、我要确保在到达空闲状态之前 IFR=0x0000、确保您处于监控器模式而不是用户模式、确保 GIE=1、然后在到达空闲状态后、让一个已启用的中断被触发。

    您是使用简单的中断选择器还是通过事件组合器?

    触发4个中断的是什么? GPIO 等外部事件? 您是否正在使用其中一个内部计时器?

    此致、
    RandyP

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

    您好、Randy、

    我使用的是 RTC、timer2以及 EMAC TX 和 Rx。  我没有查看用户与监控器模式位、这是一个很好的线索、我应该检查一下。  Timer2以1毫秒连续模式运行、因此我希望空闲时间每毫秒中断一次。  我将使用 RTC 递增计数器、因此它应该在它脱离循环之前进行大约1000次测试。  下面是我得到的结果:

    void sleep (int n)
    {
    Int Then;
    
    然后= epocsec + n;
    while (epocsec < then)__asm (" idle");
    } 

    epocsec 在 RTC 中断中递增。  调试器在进入空闲状态时挂起、因此我按下"pause"按钮、然后看到 epocsec 为27、"then "为14。  因此、中断仍在发生、但比较从未发生。  它就像返回到 IDLE 指令而不是检查循环。  如果我在 RTC 中放置一个断点、它也不会中断、但在硬件调试器、软件中断和空闲模式之间可能会发生一些事情。  但是、它仍然应该执行代码、然后进入无限 nop 模式、直到满足条件。  然后它应该离开例程。

    这就是我感到困惑的原因。  但我将检查监控器模式位是否在某个位置翻转。

    Mike

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

    我猜的是 epocsec 未定义为"volatile"、因此编译器在 while 循环中看不到它可以更改值的方法。 对编译器而言、这意味着只需测试一次条件、再也不会测试一次。

    RTC ISR 内部中断失败是另一个问题。 我已经看到在中断内部命中断点、因此这也是一种奇怪的行为。 如果您的空闲问题得到解决、那么也值得尝试解决这个问题。

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

    好的猜测! 来解决它。   我怀疑它也会修复 ISR 中的中断、但由于 ISR 起作用、没有理由继续超越我的头。  RTC 每秒递增一次 epocsec、这就是要检查的内容、因此它都可以正常工作。

    谢谢!!!

    Mike