Различия при входе и выходе из спящего режима WFE, WFI

Я достаточно новичок в архитектурах ARM и пытаюсь осмыслить механизм пробуждения.

Так что, во-первых, мне трудно найти хорошую информацию по этому поводу. Документация ARM кажется очень краткой по этой теме.

Я хотел бы понять, когда Cortex (особенно M0, с которым я работаю) проснется.

Для справки я также проконсультировался со следующим:

Документация по инструкциям WFE:

    3.7.11. WFE
    Wait For Event.
    Syntax
    WFE
    Operation
    If the event register is 0, WFE suspends execution until 
      one of the following events occurs:
    an exception, unless masked by the exception mask registers or the current
      priority level
    an exception enters the Pending state, if SEVONPEND in the 
      System Control Register is set
    a Debug Entry request, if debug is enabled
    an event signaled by a peripheral or another processor in a 
      multiprocessor system using the SEV instruction.
    If the event register is 1, WFE clears it to 0 and completes immediately.
    For more information see Power management.
    Note
    WFE is intended for power saving only. When writing software assume 
      that WFE might behave as NOP.
    Restrictions
    There are no restrictions.
    Condition flags
    This instruction does not change the flags.
    Examples
        WFE  ; Wait for event

WFI:

    3.7.12. WFI
    Wait for Interrupt.
    Syntax
    WFI
    Operation
    WFI suspends execution until one of the following events occurs:
    an exception
    an interrupt becomes pending, which would preempt if PRIMASK was clear
    a Debug Entry request, regardless of whether debug is enabled.
    Note
    WFI is intended for power saving only. When writing software assume 
    that WFI might behave as a NOP operation.
    Restrictions
    There are no restrictions.
    Condition flags
    This instruction does not change the flags.
    Examples
        WFI ; Wait for interrupt

Итак, несколько вопросов:

1) Во-первых, может кто-нибудь пояснить разницу между:

а) Регистры приоритета системного обработчика

б) Регистры приоритета прерывания. Это просто b) для прерываний, не связанных с системой, таких как pendSv?

Теперь несколько сценариев. На самом деле я хотел бы понять, как сценарии регулируются: NVIC IRQ включить NVIC в ожидании PRIMASK

влияют на вход и выход из WFE и WFI.

Таким образом, различные комбинации этих битов дают 8 различных сценариев {NVIC_IRQ enable, NVIC pending, PRIMASK}.

Я уже добавил свое смутное понимание. Пожалуйста, помогите мне с этой таблицей.

  • 000 - Нет предотвращения входа в WFE или WFI, но и нет условия пробуждения
  • 001 - as 000
  • 010 - Как ожидание влияет на переход в спящий режим для WFE и WFI?
  • 011 - Думаю, ответ здесь - 010, но с возможно другими условиями пробуждения?
  • 100 - Я предполагаю, что WFE и WFI без проблем переходят в режим низкого энергопотребления и выходят из режима низкого энергопотребления.
  • 101 - Есть ли разница между выходом из режима питания WFE и WFI?
  • 110 - Понятия не имею!
  • 111 - Понятия не имею!

Я исключаю здесь приоритеты, поскольку меня пока не слишком беспокоит порядок обработки исключений.

За исключением SEV и сигналов событий, ведет ли WFE то же самое, что и WFI, если SEVONPEND равен 0?


person Gregory Kuhn    schedule 28.11.2014    source источник
comment
Я не могу полностью понять ваш вопрос. Однако документация ARM довольно расплывчата, потому что разработчик SOC должен подключить эти сигналы к другой логике. Я не думаю, что это имеет отношение к NVIC (я знаю GIC лучше), так что, возможно, кто-то сможет напрямую ответить на ваш вопрос; однако вам следует обратиться к документации SOC, чтобы узнать, есть ли в ней что-нибудь об этом поведении. Например, у многих SOC есть регистр, который дополнительно уточняет, что происходит с WFI; приостановить только ЦП для выключения всех тактовых частот, но самообновление DDR 32 кГц.   -  person artless noise    schedule 28.11.2014
comment
Например, на некоторых SOC, влияет ли прерывание на WFI, настраивается через отдельный регистр, специфичный для SOC. Например, модуль UART может поддерживать асинхронную статическую логику, которая обнаруживает входящий символ. Вы можете настроить это так, чтобы выходить из режима самого глубокого сна. Так что регистры NVIC могут вообще не участвовать. Существует некоторый внутренний сигнал типа WFI_WAKE, который SOC направит в ядро.   -  person artless noise    schedule 28.11.2014
comment
Спасибо за эту информацию. Я не знал об этих дополнительных сигналах. Мой вопрос касается значений вышеупомянутых битов.   -  person Gregory Kuhn    schedule 01.12.2014


Ответы (2)


Основным механизмом пробуждения, который вы увидите на Cortex-M, является прерывание, следовательно, WFI (ожидание прерывания). Во всех реализациях, которые я видел, это приводит к тактовой синхронизации ядра, хотя иногда доступны более глубокие режимы сна / с большей задержкой, если дизайн это поддерживает.

WFE более актуален в многопроцессорных системах.

Что касается вопросов: 1. Прерывания и системные обработчики очень похожи в Cortex-M, различаются, прежде всего, тем, как они запускаются. Архитектура их различает, но на практике они одинаковы.

Для ваших битовых таблиц, они действительно не имеют смысла. Каждая реализация Cortex-M имеет собственную интерпретацию того, что происходит во время WFI. Он может варьироваться от базового стробирования до режимов глубокого сна. Обратитесь к документации вашего микропроцессора, чтобы узнать реальную историю.

ПРИМАСК не влияет на поведение при пробуждении от сна.

person Robert Sexton    schedule 11.01.2017

Мой ответ на ваш вопрос о различиях между WFI и WFE основан на ARM Cortex-A9 MPcore, пожалуйста, взгляните на эту ссылку ARM cortex-a9 MPcore TRM.

В основном, есть четыре режима ЦП: рабочий режим, режим ожидания, спящий режим, режим выключения.

Различия между WFI и WFE заключаются в способе перевода ЦП в рабочий режим.

WFE может работать с выполнением инструкции SEV на любом процессоре в многопроцессорной системе, а также работает с утверждением входного сигнала EVENTI.

В WFI этих двух нет.

Также как они справляются с причинами.

WFI должен работать с IRQ_Handler, WFE - не обязательно.

person Boknowswiki    schedule 06.03.2015