arm interrupt cortex-m

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:

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.