arm - diferencias de entrada y salida del modo de suspensión del brazo WFE, WFI
interrupt cortex-m (2)
El mecanismo principal de activación que verá en un Cortex-M es una interrupción, por lo tanto, WFI (espera de la interrupción). En todas las implementaciones que he visto, eso da como resultado la activación del reloj en el núcleo, aunque a veces hay modos de espera más profundos / mayor latencia disponibles si el diseño lo admite.
WFE es más relevante en diseños multiprocesador.
Con respecto a las preguntas: 1. Las interrupciones y los controladores del sistema son muy similares en el Cortex-M, y difieren principalmente por cómo se disparan. La arquitectura los distingue, pero en la práctica son lo mismo.
Son para sus tablas de bits, realmente no tienen sentido. Cada implementación de Cortex-M tiene su propia interpretación de lo que sucede durante WFI. Puede variar desde el reloj básico a los modos de sueño profundo. Consulte la documentación de su microprocesador para conocer la historia real.
PRIMASK no afecta la vigilia del comportamiento del sueño.
Soy bastante nuevo en las arquitecturas ARM y estoy tratando de entender el mecanismo de despertarme.
Entonces, antes que nada, encuentro difícil encontrar buena información sobre esto. La documentación de ARM parece ser muy escueta sobre el tema.
Lo que me gustaría entender es cuándo se despertara el Cortex (particularmente el M0 ya que es con lo que estoy trabajando).
Como referencia, también he consultado lo siguiente:
- ¿Cuál es el propósito de las instrucciones WFI y WFE y las señales de eventos?
- ¿Por qué el procesador entra en modo de espera cuando se usa la instrucción WFE pero no cuando se usa la instrucción WFI?
Los documentos en las instrucciones de WFE son:
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
El 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
Entonces, algunas preguntas:
1) En primer lugar, ¿alguien puede aclarar la diferencia entre:
a) Registros de prioridad del controlador del sistema
b) Registros de prioridad de interrupción. ¿Es solo que b) son interrupciones que no están relacionadas con el sistema, como pendSv?
Ahora para algunos escenarios. Realmente me gustaría entender cómo los escenarios gobernados por: NVIC IRQ permiten a NVIC en espera de PRIMASK
afectar la entrada y salida de WFE y WFI.
Por lo tanto, las diversas combinaciones de estos bits producen 8 escenarios diferentes {NVIC_IRQ enable, NVIC pending, PRIMASK}.
Ya he agregado mi comprensión vaga hasta ahora. Por favor, ayúdame con esta mesa.
- 000 - Sin prevención de entrada de WFE o WFI, pero tampoco condición de activación
- 001 - como 000
- 010 - ¿Cómo afecta la entrada pendiente al modo de suspensión para WFE y WFI?
- 011 - ¿Supongo que la respuesta aquí es como 010 pero con posiblemente diferentes condiciones de activación?
- 100 - Supongo que WFE y WFI entran en el modo de baja potencia y salen del modo de bajo consumo sin problemas.
- 101 - ¿Desea salir del modo de ahorro WFE y WFI aquí?
- 110 - ¡No tengo idea!
- 111 - ¡No tengo idea!
Estoy excluyendo las prioridades aquí ya que todavía no estoy demasiado preocupado por el orden de manejo de excepciones.
Excluyendo SEV y las señales de eventos, ¿WFE se comporta igual que WFI si SEVONPEND es 0?
Mi respuesta a su pregunta acerca de la diferencia entre WFI y WFE se basa en ARM Cortex-A9 MPcore, por favor, eche un vistazo a este enlace ARM cortex-a9 MPcore TRM .
Básicamente, hay cuatro modos de ejecución de modo de CPU, modo de espera, modo latente, modo de apagado.
Las diferencias para WFI y WFE son la forma de llevar la CPU al modo de ejecución.
WFE puede trabajar con la ejecución de una instrucción SEV en cualquier procesador en el sistema multiprocesador, y también funciona con una aserción de la señal de entrada EVENTI.
WFI no tiene estos dos.
También la forma en que manejan las causas.
WFI debe trabajar con IRQ_Handler, WFE no tiene que hacerlo.