Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| arm_interrupt_controllers [2023/06/22 23:28] – cnigri | arm_interrupt_controllers [2026/06/12 23:29] (actual) – cnigri | ||
|---|---|---|---|
| Línea 4: | Línea 4: | ||
| Antes de comenzar vale la pena recordar dos conceptos elementales: | Antes de comenzar vale la pena recordar dos conceptos elementales: | ||
| * Un controlador de interrupción es un módulo (IC, ASIC, FPGA, etc) que se encuentran entre las fuentes de interrupción (periféricos) y **los núcleos** ARM, el cual decide cómo gestionar (priorizar, habilitar, direccionar) las interrupciones. | * Un controlador de interrupción es un módulo (IC, ASIC, FPGA, etc) que se encuentran entre las fuentes de interrupción (periféricos) y **los núcleos** ARM, el cual decide cómo gestionar (priorizar, habilitar, direccionar) las interrupciones. | ||
| - | * El núcleo ARM acepta solo dos señales de entrada no programadas que manejan interrupciones de los sistemas externos: nIRQ y nFIQ. Como se debería saber si se recibe IRQ, el sistema ingresa al modo IRQ o FIQ, si se recibe | + | * El núcleo ARM acepta solo **dos señales** de entrada no programadas que manejan interrupciones de los sistemas externos: |
| Si bien dependiendo de las licencias ARM, es decir del fabricante de SoC, se decide el mecanismo para direccionar las señales de interrupción al núcleo, en este artículo se tratará el método estandarizado y más frecuentemente empleado, el [[https:// | Si bien dependiendo de las licencias ARM, es decir del fabricante de SoC, se decide el mecanismo para direccionar las señales de interrupción al núcleo, en este artículo se tratará el método estandarizado y más frecuentemente empleado, el [[https:// | ||
| Línea 13: | Línea 13: | ||
| {{ : | {{ : | ||
| - | Si bien el diagrama presenta la arquitectura para múltiples núcleos (processors), | + | Si bien el diagrama presenta la arquitectura para múltiples núcleos (processors), |
| Según la fuente, hay tres tipos principales de interrupciones definidas. | Según la fuente, hay tres tipos principales de interrupciones definidas. | ||
| Línea 40: | Línea 40: | ||
| ==== CPU Interface ==== | ==== CPU Interface ==== | ||
| - | Existe una instancia por núcleo de CPU disponible e interconecta la interfaz provista por el Distributor con el núcleo correspondiente. Cada interfase | + | Existe una instancia por núcleo de CPU disponible e interconecta la interfaz provista por el Distributor con el núcleo correspondiente. Cada interfaz |
| - | * Ítem de lista desordenadaÍtem de lista desordenadaDes/habilitar la señal de IRQ al procesador | + | * Des/habilitar la señal de IRQ al procesador |
| * Dar acuse de recibo de la interrupción | * Dar acuse de recibo de la interrupción | ||
| * Indicar que el procesamiento de la interrupción se ha finalizado | * Indicar que el procesamiento de la interrupción se ha finalizado | ||
| Línea 56: | Línea 56: | ||
| CPU Interface | CPU Interface | ||
| - | < | + | El valor especifico de la dirección base se brinda en la documentación especifica de cada fabricante ([[https:// |
| + | < | ||
| #include < | #include < | ||
| - | /*GIC Register Definitions | + | /*GIC Register Definitions*/ |
| - | #define ICCICR | + | #if defined(__PB_A8__) |
| - | #define ICDDCR | + | #define GIC0_CPU_BASE |
| - | #define ICDICTR | + | #define GIC0_DISTRIBUTOR_BASE |
| - | #define ICDISER(n) | + | #elif defined(i386) |
| - | #define ICDICER(n) | + | #define GIC0_CPU_BASE |
| - | #define ICDIPR(n) | + | #define GIC0_DISTRIBUTOR_BASE |
| - | #define ICDIPTR(n) | + | #endif |
| - | #define ICDICFR(n) | + | |
| + | #define ICCICR | ||
| + | #define ICCPMR | ||
| + | #define ICCBPR | ||
| + | #define ICCIAR | ||
| + | #define ICCEOIR | ||
| + | #define ICDDCR | ||
| + | #define ICDICTR | ||
| + | #define ICDISER(n) | ||
| + | #define ICDICER(n) | ||
| + | #define ICDIPR(n) | ||
| + | #define ICDIPTR(n) | ||
| + | #define ICDICFR(n) | ||
| </ | </ | ||
| Línea 138: | Línea 151: | ||
| ===== Caso de uso PB-A8 ===== | ===== Caso de uso PB-A8 ===== | ||
| - | A los fines de la placa empleada, para la resolución de la guía de trabajos prácticos del primer cuatrimestre, | + | A los fines de la placa empleada, para la resolución de la guía de trabajos prácticos del primer cuatrimestre, |
| En forma complementaría al código, en C, presentado anteriormente para la configuración del GIC, a continuación se brinda a modo de referencia básica el equivalente en ensamblador | En forma complementaría al código, en C, presentado anteriormente para la configuración del GIC, a continuación se brinda a modo de referencia básica el equivalente en ensamblador | ||
| Línea 213: | Línea 226: | ||
| {{ : | {{ : | ||
| - | --- // | + | --- // |