arm_interrupciones
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_interrupciones [2020/05/18 15:56] – mariano | arm_interrupciones [2020/05/27 21:01] (actual) – editor externo 127.0.0.1 | ||
---|---|---|---|
Línea 4: | Línea 4: | ||
El microprocesador se encuentra en un entorno donde existen otros componentes. La forma de comunicación más usual entre estos componentes y el microprocesador se denomina interrupción. Básicamente, | El microprocesador se encuentra en un entorno donde existen otros componentes. La forma de comunicación más usual entre estos componentes y el microprocesador se denomina interrupción. Básicamente, | ||
- | una rutina determinada. | + | una rutina determinada. |
+ | |||
+ | {{ : | ||
+ | |||
+ | Existen dos tipos de interrupciones: | ||
+ | - excepciones provocadas en la ejecución de alguna instrucción o error grave, o | ||
+ | - provocadas por la placa base o por cualquier tarjeta | ||
==== El sistema de interrupciones del ARM ==== | ==== El sistema de interrupciones del ARM ==== | ||
Línea 10: | Línea 17: | ||
Decimos que las interrupciones del ARM son autovectorizadas. Cada tipo de interrupción lleva asociado un número (que llamamos número de interrupción, | Decimos que las interrupciones del ARM son autovectorizadas. Cada tipo de interrupción lleva asociado un número (que llamamos número de interrupción, | ||
- | En la arquitectura ARMv6 todos los vectores de interrupción se almacenan en una zona de memoria llamada tabla de vectores de interrupción. Esta tabla comienza en la dirección física 0x00000000 (aunque puede cambiarse por 0xffff0000) y acaba en 0x0000001f y contiene en total 8 vectores de interrupción. Cuando termina de ejecutarse una RTI, el procesador continúa ejecutando la instrucción siguiente a la que se estaba ejecutando cuando se produjo la interrupción. | + | {{ : |
+ | |||
+ | En la arquitectura ARMv6 todos los vectores de interrupción se almacenan en una zona de memoria llamada tabla de vectores de interrupción. Esta tabla comienza en la dirección física 0x00000000 (aunque puede cambiarse por 0xffff0000) y acaba en 0x0000001f y contiene en total 8 vectores de interrupción. Cuando termina de ejecutarse una RTI, el procesador continúa ejecutando la instrucción siguiente a la que se estaba ejecutando cuando se produjo la interrupción. | ||
+ | |||
+ | {{ : | ||
- | Existen dos tipos de interrupciones: | ||
- | - excepciones provocadas en la ejecución de alguna instrucción o error grave, o | ||
- | - provocadas por la placa base o por cualquier tarjeta | ||
La lista del vector de interrupciones es la siguiente. | La lista del vector de interrupciones es la siguiente. | ||
Línea 27: | Línea 36: | ||
| IRQ | Interrupción | 0x18 | IRQ | | | IRQ | Interrupción | 0x18 | IRQ | | ||
| IRQ | Interrupción | 0x1X | IRQ | | | IRQ | Interrupción | 0x1X | IRQ | | ||
+ | **Vector de Interrupciones** | ||
+ | |||
+ | La última columna se refiere al //Modo de operación// | ||
+ | |||
+ | {{ : | ||
+ | '' | ||
+ | |||
+ | Cada modo tiene sus propios registros sp, lr y spsr (Saved Program Status Register) de tal forma que no alteramos la pila ni los flags de la secuencia de programa que interrumpimos. Incluso el modo FIQ tiene 5 registros generales propios (desde r8 hasta r12), de esta forma si los empleamos en nuestra rutina de tratamiento no tendremos que salvaguardarlos en pila. | ||
+ | |||
+ | ==== SWI ==== | ||
+ | SWI (Software Interrupt) provoca la excepción SWI | ||
+ | |||
+ | Sintaxis | ||
+ | |||
+ | SWI{< | ||
+ | |||
+ | Donde: | ||
+ | |||
+ | < | ||
+ | |||
+ | < | ||
+ | |||
+ | |||
+ | Operaciones principales realizadas por la instrucción: | ||
+ | |||
+ | Si pasa la condicíon(cond) | ||
+ | Luego | ||
+ | R14_svc | ||
+ | SPSR_svc | ||
+ | CPSR[4:0] = 0b10011 | ||
+ | CPSR[5] | ||
+ | CPSR[7] | ||
+ | PC = 0x00000008 | ||
+ | |||
+ | |||
+ | Ejemplo 1 : Fin de Programa. | ||
+ | |||
+ | mov r7, #1 // Indicamos salida del programa | ||
+ | swi 0 // Llamamos a la interrupción | ||
+ | |||
+ | |||
+ | Ejemplo 2 : Escribir en pantalla un mensaje. | ||
+ | |||
+ | .data | ||
+ | | ||
+ | | ||
+ | .text | ||
+ | | ||
+ | main: | ||
+ | mov r7, #4 // Indicamos salida por pantalla | ||
+ | mov r0, #1 // Indicamos que la salida es una cadena | ||
+ | mov r2, #30 // Tamaño de la cadena | ||
+ | ldr r1, =mensaje // Ubicación de la cadena | ||
+ | swi 0 // Llamamos a la interrupción | ||
+ | |||
+ | |||
+ | Ejemplo 3 : Leer input del usuario. | ||
+ | |||
+ | .data | ||
+ | | ||
+ | | ||
+ | .text | ||
+ | | ||
+ | main: | ||
+ | mov r7, #3 // Indicamos lectura por teclado | ||
+ | mov r0, #0 // Indicamos que el ingreso será una cadena | ||
+ | mov r2, #4 // Leer #4 caracteres | ||
+ | ldr r1, =cadena | ||
+ | swi 0 // Llamamos a la interrupción | ||
+ | |||
+ | |||
×
iphelper toolbox
you see this when javscript or css is not working correct
Untested
arm_interrupciones.1589817402.txt.gz · Última modificación: 2020/05/18 15:56 por mariano