05.manejo de interrupciones

16
Sistemas Basados en Microprocesadores Manejo de Interrupciones

Upload: jonathan-ruiz-de-garibay

Post on 30-Nov-2014

4.989 views

Category:

Documents


2 download

DESCRIPTION

 

TRANSCRIPT

Page 1: 05.Manejo de interrupciones

Sistemas Basados en

Microprocesadores

Manejo de Interrupciones

Page 2: 05.Manejo de interrupciones

http://paginaspersonales.deusto.es/jonathan.garibay/

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…

Page 3: 05.Manejo de interrupciones

http://paginaspersonales.deusto.es/jonathan.garibay/

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.

Por compatibilidad, 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.

Page 4: 05.Manejo de interrupciones

http://paginaspersonales.deusto.es/jonathan.garibay/

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.

Page 5: 05.Manejo de interrupciones

http://paginaspersonales.deusto.es/jonathan.garibay/

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

Page 6: 05.Manejo de interrupciones

http://paginaspersonales.deusto.es/jonathan.garibay/

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.

Page 7: 05.Manejo de interrupciones

http://paginaspersonales.deusto.es/jonathan.garibay/

Interrupciones (continuación…)

Los habilitadores globales se ponen a 0 cuando se

produce una interrupción.

Si no hay prioridades sólo el bit GIE.

Si hay prioridades, el bit GIEH o el GIEL, dependiendo de

la prioridad de la interrupción generada.

Los flags 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.

Se pone a 1 con la

instrucción retfie

Page 8: 05.Manejo de interrupciones

http://paginaspersonales.deusto.es/jonathan.garibay/

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

interrupción de alta prioridadGIEH

Hay prioridades y se ha generado una

interrupción de baja prioridadGIEL

Page 9: 05.Manejo de interrupciones

http://paginaspersonales.deusto.es/jonathan.garibay/

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.

Page 10: 05.Manejo de interrupciones

http://paginaspersonales.deusto.es/jonathan.garibay/

Interrupciones de E/S (continuación…)

Trabajo personal:

Diferenciar entre la E/S programada y la E/S por

interrupción.

Page 11: 05.Manejo de interrupciones

http://paginaspersonales.deusto.es/jonathan.garibay/

Registros de Manejo de Interrupciones

Depende del valor

del bit IPEN

FlagsHabilitadores

individualesHabilitadores

globales

Page 12: 05.Manejo de interrupciones

http://paginaspersonales.deusto.es/jonathan.garibay/

Registros de Manejo de Interrupciones (Continuación…)

Prioridades

Bits de configuración

específicos de una

interrupción

Page 13: 05.Manejo de interrupciones

http://paginaspersonales.deusto.es/jonathan.garibay/

Registros de Manejo de Interrupciones (Continuación…)

Page 14: 05.Manejo de interrupciones

http://paginaspersonales.deusto.es/jonathan.garibay/

Ejemplo de funcionamiento

org 0x00

0x0000 inicio goto inicio

0x0008 btfss INTCON,RB0IF

0x000A retfie

0x000C bcf INTCON,RB0IF

0x000E incf PORTA, F

0x0010 retfie

0x003A inicio clrf TRISA

0x003C movlw 0xF0

0x003E movwf TRISB

0x0040 clrf PORTA

0x0042 bsf INTCON,RBIE

0x0044 bcf INTCON,RBIF

0x0046 bsf INTCON,GIE

0x0048 bucle goto bucle

PCPila

31

30

29

0

INTCON

PORTA PORTB

Page 15: 05.Manejo de interrupciones

http://paginaspersonales.deusto.es/jonathan.garibay/

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.

Page 16: 05.Manejo de interrupciones

http://paginaspersonales.deusto.es/jonathan.garibay/

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.