Aplicación y precauciones de la interrupción Cortex-M en RTOS

Sigue la cuenta pública + star y nunca te pierdas contenido interesante

e4385337b3b191282f99120784cc5aba.gif

Autor | más fuerteHuang

Cuenta pública de WeChat | Columna incrustada

¿Te imaginas lo que pasaría si la CPU no se interrumpiera?

Es solo un bucle while y no puede interrumpir el procesamiento de tareas oportunas, y mucho menos el RTOS actual (RTOS también requiere la implementación de interrupciones).

Hablemos de la aplicación y precauciones de las interrupciones Cortex-M en RTOS.

Acerca del procesador Cortex-M

Aquí primero presentamos algunos contenidos relacionados con el procesador Cortex-M. Este artículo lo describirá junto con el STM32 cuyo núcleo es Cortex-M3.

STM32 pertenece a la serie de procesadores Cortex-M en ARM , tales como: STM32F1 datos Cortex-M3, STM32F7 datos Cortex-M7.

088839f87b0f4f7c87e32bf0238ec0db.jpeg

Puede consultar el artículo que compartí antes " Comprensión de los procesadores ARM de Cortex-M a Cortex-A " para conocer los tipos de procesadores ARM.

Este artículo utiliza principalmente el procesador de la serie STM32F1 bajo Cortex-M3 como ejemplo para describir los contenidos relevantes del control de interrupciones. Otras series Cortex-M u otras series STM32 tienen contenido similar sobre interrupciones.

Cortex-M3 es solo un núcleo de STM32F1. Por otro lado, STM32F1 es un chip que añade algunos periféricos (como USART, AD, etc.) basados ​​en Cortex-M3.

Control de interrupciones Cortex-M

NVIC : Controlador de interrupciones vectoriales anidadas, es decir, controlador de interrupciones vectoriales anidadas.

Estamos familiarizados con NVIC en STM32. Al programar, configuraremos NVIC mediante interrupciones.

El NVIC en STM32F1 es parte del Cortex-M3 , no un periférico agregado por STM32.

El controlador de interrupción vectorial NVIC es una parte inseparable del Cortex-M3, está estrechamente relacionado con la lógica del núcleo CM3 y parte de él incluso está integrado.

Entonces, los registros relacionados con NVIC están en el manual de Cortex-M . Para hablar del control de interrupciones de STM32, tenemos que comenzar con el NVIC de Cortex-M3.

1. Tabla de vectores de entrada de interrupción

El NVIC de Cortex-M3 admite de 1 a 240 entradas de interrupción, como xxxIRQ en STM32, que es la tabla de vectores de interrupción . El valor específico lo determina el fabricante del chip al diseñar el chip.

Por ejemplo, la tabla de vectores de interrupción y excepción de STM32F1:

889fe6bf01209af843c911ce63b3fe91.jpeg

c9ca13b84c9026316d42c89ac267aad4.jpeg

2. La diferencia entre interrupción y excepción

¿Muchos principiantes no saben qué es una interrupción? ¿Qué es una excepción? Algunas personas incluso se refieren a las interrupciones y excepciones como "interrupciones" en general.

Las interrupciones y las excepciones son en realidad diferentes y están relacionadas. Las interrupciones de las que hablamos a menudo en realidad incluyen excepciones. Las excepciones pueden entenderse como MCU o el programa se encuentra en algún estado anormal.

Distingámoslo de esta manera: mirando la escala de arriba, la parte superior con fondo gris es anormal y la parte inferior con fondo blanco es una interrupción .

Las excepciones son parte del núcleo Cortex-M3 , mientras que las interrupciones son parte de la MCU (STM32) (determinada por el fabricante).

entonces:

1. Desde la perspectiva del núcleo Cortex-M3 , las interrupciones como USART en STM32 son interrupciones externas.

2. Desde la perspectiva de STM32 , las interrupciones de pines externos EXTI son interrupciones.

3.Prioridad

Para Cortex-M3, cada interrupción externa tiene un registro de prioridad correspondiente.

Cada registro ocupa 8 bits , pero solo se permiten los 3 bits más altos, los 4 bits superiores se usan en STM32F1. (Es decir, podemos dividirlo en 16 prioridades)

La prioridad se puede dividir en dos segmentos, alta y baja, que son prioridad de preferencia y prioridad secundaria (respuesta) .

b3385145fa57c50d3c5c89e514ed4e78.jpeg

pista:

1. Cuanto menor sea el valor de prioridad de interrupción STM32 , mayor será la prioridad .

2. Agrupación de prioridades: Cortex-M3 y M4 tienen funciones de agrupación, es decir, hay prioridades de preferencia y prioridades de respuesta, como se muestra a continuación:

6f1503659tarifa845cfd4efc0c817bd4a8.jpeg

Algunos núcleos no lo tienen, como por ejemplo Cortex-M0.

3.Materiales de referencia

Puede consultar la "Guía definitiva de Cortex-M3"

Manual de programación del núcleo STM32:

http://www.st.com/stonline/products/literature/pm/15491.pdf

Configuración de prioridad de interrupción RTOS

Esta sección describe el problema de configuración de la prioridad máxima de interrupción de FreeRTOS, que se encuentra en el archivo de configuración FreeRTOSConfig.h:

configMAX_SYSCALL_INTERRUPT_PRIORITY

0e062df57698138cc1bcb3f98e25026d.jpeg

¿Conoce el significado de los valores de configuración? Esto debe entenderse en conjunto con el contenido relacionado con NVIC.

Como se mencionó anteriormente, en STM32, se usan los 4 bits altos de prioridad NVIC , y necesitamos configurar los 4 bits altos al configurar (los 4 bits bajos no se usan).

5e94c2585018982ffd31fd81c192f7ee.jpeg

Mira la imagen de arriba, ¿entiendes? El valor de arriba es 95, pero representa una prioridad de 5.

El significado de este valor de configuración significa aproximadamente: la prioridad de la interrupción (como USART1_IRQn) utilizada en su código debe ser mayor que 5 para que sea factible .

Como se configura a continuación, no funcionará si la prioridad es 2 (por supuesto, la agrupación también implica problemas de agrupación).

23c4520a67dfb8689c671879ac123089.jpeg

Para obtener información sobre la configuración de prioridad máxima de FreeRTOS, consulte:

https://www.freertos.org/RTOS-Cortex-M3-M4.html

Finalmente, otro recordatorio:

La prioridad de la tarea es cuanto mayor es el valor, mayor es la prioridad , que debe distinguirse de la prioridad de interrupción CM3.

------------  FIN  ------------

4b6ce888fb12e413477dbdbf7c14caba.gif

●Columna "Herramientas integradas "

●Columna "Desarrollo integrado"

●Columna "Tutorial de Keil"

●Tutoriales seleccionados de columnas integradas

Siga la cuenta oficial y responda " Agregar grupo " para unirse al grupo de intercambio técnico de acuerdo con las reglas, y responda " 1024 " para ver más contenido.

513fa1d209566b982039b3d52da6327c.jpeg

58fd2dae4096c76b79a721d6e795c770.png

Haga clic en " Leer el texto original " para ver más contenido compartido.

Supongo que te gusta

Origin blog.csdn.net/ybhuangfugui/article/details/133285299
Recomendado
Clasificación