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