8

我想知道,因为它似乎是不同的(例如 WFI 和 WFE 是单独的指令),但我不能准确地指出这件事。

4

2 回答 2

13

几年后,我看到这个问题很受欢迎,同时我通过经验理解了答案。

事件被实现为进入 MCU ARM 内核的线路,沿着内存总线(实际上内核也可以生成事件,线路是单向和点对点专用,这不是总线),以便外围设备或其他内核可以提高这些行可以在任何内存总线管理或指令执行之外实时向内核传达信息,即使 MCU 中没有总线仲裁器(我猜它们是以总线频率计时的)。

然后这些事件由内核处理,一种使事件进入程序世界的方法是通过引发中断(更准确地说,将线路插入 NVIC,可以将其解释为中断),通过翻转一点核心寄存器之一,通过重新启动核心时钟,或者它们可以插入到 DMA 外设以启动或停止传输。内核中有一个专门用于事件管理的完整逻辑部分,用于屏蔽它们,将它们用作异常源或 DMA 操作的源。

事件列表由 MCU 实现者决定,他们可以决定使用 NVIC、DMA 或将它们连接到 PLD 逻辑(某些赛普拉斯 MCU 可以触发 DMA 或来自 PLD 部分的中断)。

处理事件最常见的方法是忽略它,其次最常见的是发送异常以执行某些代码。

于 2016-01-13T17:32:06.087 回答
3

这两个指令都用于电源管理/节省。虽然WFI应该暂停内核直到发生中断或异常,但WFE也会等待可以由SEV指令发送的“事件”。

它是实现定义的指令实现的级别,它们可能只是 NOP。因此,例如,您不能相信 WFE 返回时确实发生了中断或“事件”。

于 2013-05-03T07:25:57.850 回答