diferencia entre FIQ e IRQ

0

Ahora estoy trabajando en procesadores basados en TI y tienen 2 tipos de configuración de Interrupción (FIQ o IRQ). He visto tales interrupciones antes cuando estaba haciendo un proyecto de hobby con un LPC1778, pero como no usaba interrupciones no me importaban . Necesito usarlos ahora para un proyecto y es esencial que descubra la diferencia para poder usarlos adecuadamente. Ambas son interrupciones, pero ¿qué las hace diferentes para que se identifiquen con dos nombres separados?

Cualquier ayuda sería genial.

Gracias.

    

2 respuestas

5

La FIQ es una segunda instancia de la lógica de interrupción. Las diferencias clave son:

  1. entrada de baja latencia, baja fluctuación de fase

    La entrada para el FIQ está al final de la tabla vectorial, por lo que no se limita a una sola instrucción, lo que le permite comenzar el controlador de interrupciones directamente en este punto.

    Además, se garantiza que el tiempo entre la confirmación de la FIQ y la ejecución de la primera instrucción en el manejador de la FIQ será fijo, por lo que es posible implementar un procesamiento exactamente cronometrado aquí. Si la instrucción actual necesita varios ciclos para completarse (por ejemplo, una instrucción ldm ), se cancela y reinicia después de que se complete el controlador.

    Además, el modo FIQ tiene registros de sombra para r8 a r14 , mientras que los otros modos especiales ( IRQ , SVC , ABT , UND ) solo tienen r13 y r14 shadowed, por lo que es posible mantener el estado local entre ejecuciones en registros, lo que a su vez acelera el inicio del controlador.

  2. lógica de habilitación / deshabilitación separada

    La FIQ puede permanecer habilitada mientras se ejecutan las IRQ (la lógica de la FIQ deshabilita las interrupciones, por lo que la FIQ tiene una prioridad más alta), lo que nuevamente es un guiño a las aplicaciones en tiempo real.

El Cortex-M implementa un manejo de prioridad dentro del controlador de interrupción, garantiza un tiempo constante para ingresar cualquier interrupción y elimina los registros ocultos, ya que ingresar el controlador de interrupciones requiere múltiples accesos a la memoria de todos modos.

Esto significa que la latencia de interrupción es significativamente más alta en Cortex-M, pero aún así es de baja fluctuación. Para interrupciones de alta frecuencia, esto es una desventaja significativa.

Por ejemplo, implementar un puerto serie de software en un controlador FIQ es fácil:

fiq_setup:
    MOV r0, #MODE_FIQ
    MOV cpsr, r0          // switch mode to FIQ
    MOV r8, #GPIO_BASE    // address of GPIO controller
    MOV r9, #2            // Tx line high
    MOV r0, #MODE_SVC
    MOV cpsr, r0          // switch back to SVC mode

Esto prepara los registros r8 y r9 para cuando se ejecuta el controlador FIQ

fiq_handler:
    str r9, [r8]
    ldr r9, [r8]
    // handle the bit read from the Rx line
    // prepare the next bit for Tx
    subs r15, r14, #-4

Si la rutina es lo suficientemente corta, puede configurar un temporizador con varios cientos de KHz que active una FIQ y seguir utilizando un porcentaje de un solo dígito de tiempo de CPU solamente.

    
respondido por el Simon Richter
1

LPC17xx es Cortex M, que tiene su propio manejo de interrupciones a través de NVIC que es diferente de otros procesadores ARM (más grandes). No hay FIQ en Cortex M, y el manejo de interrupciones / fallas es diferente porque no hay registros almacenados excepto SP.

    
respondido por el Turbo J

Lea otras preguntas en las etiquetas