STM32F4 ¿Cómo se utilizan las prioridades de prioridad y las prioridades secundarias?

0

He comenzado a trabajar con microcontroladores basados en ARM.

No entiendo subprioridad y prioridad preeemption. Por ejemplo:

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;

¿Por qué usaríamos estos?

    
pregunta ziyad

3 respuestas

2

La Prioridad de prioridad permite que una ISR sea precedida (interrumpida) por otra interrupción de mayor prioridad. Cuando se completa la interrupción de mayor prioridad, la interrupción de menor prioridad continúa desde donde se detuvo.

La subprioridad, por otra parte, no tiene nada que ver con la prevención. Digamos que tiene dos interrupciones de la misma prioridad que están pendientes. El manejador de interrupciones elegirá cuál de ellos atenderá primero, en función de su subprioridad. Una vez que se complete el primero, comenzará el segundo.

Puede parecer poco probable que dos interrupciones puedan suceder al mismo tiempo. Una situación común donde esto podría suceder es si tiene una rutina de servicio de interrupción que lleva mucho tiempo. Durante esta rutina, pueden haber tenido lugar otros desencadenantes de interrupción. Si es así, la subprioridad determinará cuál se maneja a continuación.

Finalmente, tenga en cuenta que a medida que la prioridad real aumenta , el valor de prioridad disminuye . Es decir, Priority=1 recibirá servicio antes que Priority=2 .

    
respondido por el bitsmack
0

De stm32f4-discovery.net

  

NVIC_IRQChannelPreemptionPriority
  Con este parámetro se establece   prioridad de interrupción, número de 0x00 a 0x0F. Digamos que tenemos que usar   USART recibe la interrupción y la conversión ADC finaliza la interrupción. USART   es más importante que ADC, por lo que USART tendrá un número menor que ADC.

     

NVIC_IRQChannelSubPriority
Con este parámetro configuras la interrupción   prioridad, número de 0x00 a 0x0F. Digamos que tienes 2 USARTs   habilitado, pero USART1 es más importante que USART2. Así que USART1 tendrá   número más bajo que USART2.

o STM32 Interrupt Service Routine Priority

  

NVIC_IRQChannelPreemptionPriority se utiliza para determinar si hay una interrupción   que se produce después de que puede superar la interrupción anterior que se está   mantenido

     

NVIC_IRQChannelSubPriority se utiliza para determinar la prioridad si   Dos interrupciones ocurren al mismo tiempo. (Si NVIC_IRQChannelSubPriority   no se determina, la posición en la tabla NVIC se utiliza para determinar   la prioridad.)

    
respondido por el Blair Fonville
0

El núcleo M3 o M4 admite hasta 240 interrupciones.

Necesitarás prioridad para ser asignado a las interrupciones. En lugar de definir 240 niveles de prioridad, la arquitectura agrupa un grupo de ellos.

Entonces, una intuición será

12 grupos principales (grupo A, B, C, ...) y cada grupo tiene, por ejemplo, 10 fuentes de interrupción ...

Entonces, si ya hay una interrupción que se está revisando en el grupo A, entonces, otra interrupción en el mismo grupo A no se revisará hasta que la primera interrupción se repare por completo. Por el contrario, mientras se sirve la primera interrupción, si se produce otra interrupción de un grupo de mayor prioridad, entonces el servicio de interrupción actual se pausará ...

La prioridad secundaria ayuda cuando se producen dos interrupciones desde el mismo grupo al mismo tiempo. Luego, la prioridad secundaria entrará en juego para elegir qué ISR ejecutar.

    
respondido por el Umar

Lea otras preguntas en las etiquetas