arm спящий режим вход и выход различия WFE, WFI
Я достаточно новичок в архитектуре ARM, и я пытаюсь обернуть голову вокруг механизма пробуждения.
поэтому, прежде всего, мне трудно найти хорошую информацию об этом. Документация ARM кажется очень лаконичной по этой теме.
Для справки, я также проконсультировался с следующий:
- какова цель инструкций WFI и WFE и сигналов событий?
- почему процессор переходит в режим ожидания при использовании инструкции WFE, но не при использовании инструкции WFI?
документы в инструкциях 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) Во первых, может кто-то пожалуйста уточнить разницу между:
a) регистры приоритетов системного обработчика
B) регистры приоритета прерывания. Просто b) предназначены для прерываний, которые не связаны с системой, например pendSv?
теперь для некоторых сценариев. Действительно, я хотел бы понять, как сценарии управляются: NVIC IRQ включить NVIC ожидании PRIMASK
влияет на вход и выход WFE и WFI.
таким образом, различные комбинации этих битов 8 различных сценариев {Nvic_irq включить, 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?
2 ответов
основным механизмом пробуждения, который вы увидите на Cortex-M, является прерывание, следовательно, WFI (ожидание прерывания). Во всех реализациях, которые я видел, это приводит к тактовой синхронизации ядра, хотя более глубокий сон/более высокие режимы задержки иногда доступны, если дизайн поддерживает его.
WFE более уместно в дизайнах мультипроцессора.
Что касается вопросов - 1. Прерывания и обработчики системы очень похожи в кортекс-м, отличаясь в первую очередь тем, как они запускаются. Архитектура различает их, но на практике они одинаковы.
для ваших битовых таблиц, они действительно не имеют смысла. Каждая реализация Cortex-M имеет свою собственную интерпретацию того, что происходит во время WFI. Он может варьироваться от основных часов стробирования до режимов глубокого сна. Обратитесь к документации микропроцессора для реальной истории.
PRIMASK не влияет на пробуждение от сна.
мой ответ на ваш вопрос о различии между WFI и WFE основан на ARM Cortex-A9 MPcore, пожалуйста, взгляните на эту ссылку ARM cortex-A9 MPcore TRM.
в основном, есть четыре режима работы процессора, режим ожидания,спящий режим, режим выключения.
различия для WFI и WFE-это способ привести CPU в режим запуска.
wfe can работает с выполнением инструкции SEV на любом процессоре в многопроцессорной системе, и также работает с утверждением входного сигнала EVENTI.
У WFI нет этих двух.
также то, как они справляются с причинами.
WFI должен работать с IRQ_Handler, WFE не должен.