2. Interrupciones
Una interrupción es un evento que es identificado
por el µcontrolador, y que interrumpe el proceso
normal de un programa.
Cuando finaliza la atención de la interrupción se continua
en el punto donde se había interrumpido el programa.
Los
eventos o fuentes de interrupción son muchos y
muy variados:
Interrupción externa por flanco, por cambio de estado,
por fin de temporización…
http://paginaspersonales.deusto.es/jonathan.garibay/
3. Interrupciones (continuación…)
Los µcontroladores PIC incluyen un sistema de
interrupciones basado en dos niveles de prioridad.
Una interrupción de alta prioridad puede interrumpir el
tratamiento de una de baja prioridad pero no a la inversa.
Porcompatibilidad, el sistema de interrupciones con
prioridades está desactivado por defecto de forma
que se trabaja sin prioridades.
El bit IPEN del registro RCON habilita (1) o no (0) el
sistema de prioridades de los PIC18.
http://paginaspersonales.deusto.es/jonathan.garibay/
4. Interrupciones (continuación…)
Cuando se produce una interrupción, se realiza una
llamada automática a la rutina de interrupción.
Las rutinas de interrupción tienen una posición específica
dentro de la memoria de programa.
0x0008 para la rutina de interrupción de alta prioridad.
0x0018 para la rutina de interrupción de baja prioridad.
Si no se usan prioridades, sólo existe un único vector y está
situado en la posición 0x0008.
http://paginaspersonales.deusto.es/jonathan.garibay/
5. Interrupciones (continuación…)
Cada fuente de interrupción se controla por medio
de 3 bits:
Bit de prioridad: permite asignar a cada fuente de
interrupción una prioridad alta (1) o baja (0).
Siempre se llama xxIP (donde “xx” es el nombre de la fuente de
interrupción).
Bit de habilitación: permite habilitar (1) o no (0) cada
fuente de interrupción.
Siempre se llama xxIE
Bit de señalización o “Flag”: informa que se ha detectado
(1) o no (0) una interrupción.
Siempre se llama xxIF
http://paginaspersonales.deusto.es/jonathan.garibay/
6. Interrupciones (continuación…)
Las interrupciones tienen un habilitador global
además del habilitador individual de cada fuente de
interrupción:
El bit GIE/GIEH del registro INTCON:
Si se usan prioridades (bit GIEH). habilita las interrupciones
configuradas como de alta prioridad.
Si no se usan prioridades (bit GIE), habilita todas las
interrupciones que tenga su habilitador individual activado.
El bit PEIE/GIEL del registro INTCON:
Si se usan prioridades (bit GIEL), habilita las interrupciones
configuradas como de baja prioridad.
Si no se usan prioridades (bit PEIE), habilita las interrupciones
relacionadas con periféricos del µcontrolador.
http://paginaspersonales.deusto.es/jonathan.garibay/
7. Interrupciones (continuación…)
Loshabilitadores globales se ponen a 0 cuando se
produce una interrupción.
Se pone a 1 con la
Si no hay prioridades sólo el bit GIE. instrucción retfie
Si hay prioridades, el bit GIEH o el GIEL, dependiendo de
la prioridad de la interrupción generada.
Losflags individuales se ponen a 1 cuando se
produce su interrupción correspondiente.
Es necesario ponerlos a 0 manualmente para que no
salte de nuevo la interrupción (sin haberse producido).
Aunque la interrupción no esté habilitada, el flag se pone
a 1 cuando sucede el evento, pero no salta la
interrupción.
http://paginaspersonales.deusto.es/jonathan.garibay/
8. Interrupciones (continuación…)
Instrucciones de control
retfie: regreso de interrupción con habilitación (pone a 1
los bits GIE, GIEH o GIEL según corresponda)
Tipo de evento Bits afectados
No hay prioridades GIE
Hay prioridades y se ha generado una
GIEH
interrupción de alta prioridad
Hay prioridades y se ha generado una
GIEL
interrupción de baja prioridad
http://paginaspersonales.deusto.es/jonathan.garibay/
9. Interrupciones de E/S
Hay dos tipos de interrupciones de E/S diferentes en
los PIC18:
3 interrupciones externas independientes (INT0 con la
línea RB0, INT1/RB1 e INT2/RB2).
Se produce al detectar un flanco, ascendente o descendente,
configurable por medio del bit INTEDGx.
Se puede utilizar para el control de interruptores, pulsadores o
cualquier dispositivo que genere un señal digital.
La interrupción INT0 no dispone del bit de prioridad, y se
considera siempre como de prioridad alta.
Interrupción por cambio de estado en <RB4:RB7>.
Se produce cuando cambia el estado (pasar de „0‟ a „1‟ o de „1‟
a „0‟) de cualquiera de las 4 líneas.
Se utiliza principalmente para el control de teclados matriciales.
http://paginaspersonales.deusto.es/jonathan.garibay/
10. Interrupciones de E/S (continuación…)
Trabajo personal:
Diferenciar entre la E/S programada y la E/S por
interrupción.
http://paginaspersonales.deusto.es/jonathan.garibay/
11. Registros de Manejo de Interrupciones
Habilitadores Flags
individuales
Habilitadores
globales
Depende del valor
del bit IPEN
http://paginaspersonales.deusto.es/jonathan.garibay/
12. Registros de Manejo de Interrupciones
(Continuación…)
Prioridades
Bits de configuración
específicos de una
interrupción
http://paginaspersonales.deusto.es/jonathan.garibay/
13. Registros de Manejo de Interrupciones
(Continuación…)
…
…
http://paginaspersonales.deusto.es/jonathan.garibay/
15. Resumen
Cuando se produce una interrupción:
Se pone a „1‟ el bit de flag de la interrupción causante.
Se pone a „0‟ el bit global de habilitación.
Si no hay prioridades, se pone a „0‟ el bit GIE.
Si hay prioridades, se pone a „0‟ el bit GIEH o GIEL, según
corresponda.
Se carga en el PC la dirección del vector de interrupción.
Si no hay prioridades, se carga la dirección 0x0008.
Si hay prioridades, se carga la dirección 0x0008 o 0x0018,
según corresponda.
http://paginaspersonales.deusto.es/jonathan.garibay/
16. Resumen (Continuación…)
Para atender una interrupción:
Se busca la interrupción causante mirando el bit de flag.
Se va a la rutina de interrupción específica:
Se pone a „0‟ el bit de flag de la interrupción.
Se atiende la interrupción.
Se finaliza la rutina con la instrucción retfie.
Si no se encuentra la interrupción se finaliza la rutina con
la instrucción retfie.
Si se da este caso, esto
nos indica que hay un
error en la programación.
http://paginaspersonales.deusto.es/jonathan.garibay/