You are on page 1of 66

Tema 6

INTERRUPCIONES

Microcontroladores: Tema 6

Interrupciones
Las interrupciones incrementan la eficiencia de un
sistema permitiendo que un dispositivo de
Entrada-Salida reclame un servicio cuando
requiere atencin inmediata. Los programas
pueden ser escritos sin necesidad de checar
continuamente sus puertos polling.
Ronald L. Baldrige
Interrupts and Power, Complexity to uC-System Design
EDN Vol. 22 No 14. August 5, 1977

Microcontroladores: Tema 6

Interrupciones
Una interrupcin es una llamada a una
subrutina iniciada por hardware interno o
externo
Las excepciones exceptions son
interrupciones provocadas por el CPU para
indicar una condicin extraordinaria como
una divisin entre cero etc..

Microcontroladores: Tema 6

Interrupciones: Ventajas sobre Polling


A

MAIN

A? B?

MAIN

A? B?

PROC
B

Tiempo

MAIN

A?

B?

PROC
A

MAIN

A? B?

Microcontroladores: Tema 6

Interrupciones: Ventajas sobre Polling


A

ISR
A

MAIN

Tiempo

MAIN

ISR
A

ISR
B

ISR
A

Microcontroladores: Tema 6

Porqu interrupcin?
Coordinacin de actividdades de entrada salida
Procesos crticos en tiempo como el salvamento de
variables en una falla de energa etc.
Aborto gracioso del programa bajo condiciones
anmalas de operacin
Realizar actividades perodicas como la
actualizacin de un RTC o el muestreo de una seal
analgica.

Enmascaramiento de
interrupciones

Microcontroladores: Tema 6

El enmascaramiento o masking permite


ignorar las interrupciones
El estado normal despues de un reset es
tipicamente tener las interrupciones inactivas
o deshabilitadas
Existes generalmente una interrupcin
individual por fuente de interrupcin y una
general que habilita o deshabilita todas las
interrupciones.
7

Microcontroladores: Tema 6

Prioridad
Si mas de una interrupcin ocurre al mismo
tiempo, la prioridad permite definir cual
interrupcin ser ejectudada primero.
La prioridad puede dedinir tambin si una
interrupcin en servicio puede ser
interrumpitda por una de menor prioridad.
El PIC18 maneja tres niveles:
Ninguna, alta y baja
8

Microcontroladores: Tema 6

Priorizacin de Interrupciones
Ocurrencia de eventos simultneos
EVENTO A
EVENTO B
PRIORIDAD: EVENTO A > EVENTO B
MAIN

MAIN
ISRA

ISRB
ISRA

ISRB
MAIN

ISRB
MAIN

Microcontroladores: Tema 6

Servicio de la interrupcin
El CPU le da servicio a la interrupcin
ejecutando una seccin de cdigo asociado a
la interrupcin.
Se le conoce como rutina de servicio de
interrupcin o ISR
Como al finalizar la interrupcin se debe de
regresar al flujo normal del programa, se
deben de realizar acciones especiales.
10

Microcontroladores: Tema 6

Acciones al ejecutar una interrupcin

11

Salvamento del contador del programa (PC)


Salvamento de registros especiales (como el
WREG o el registro de status) en la pila
(stack)
Indentificacin de la fuente de la
interrupcin
Resolver la direccin de inicio del cdigo
ISR
Ejecucin del ISR

Microcontroladores: Tema 6

Acciones al ejecutar una interrupcin


Restaurar el estado del CPU (regresando los
valores originales de los registros
importantes)
Restablecer el contador de programa despues
de la ltima instruccin ejecutada
Continuar con el flujo del ejecucin del
programa.

12

Microcontroladores: Tema 6

Vector de Interrupcin
El PIC18 utiliza el esquema de vector
predefinido.
Es una direccin de la memoria de programa
asignada a la interrupcin (o grupo de
interrrupciones) relacionadas
En el vector de interrupcin tipicamente se
almacena una instruccin de salto o la
direccin especfica donde reside la
subturina de servicio.
13

Microcontroladores: Tema 6

Vector de Interrupcin
El PIC18 utiliza el esquema de vector
predefinido.
Es una direccin de la memoria de programa
asignada a la interrupcin (o grupo de
interrrupciones) relacionadas
En el vector de interrupcin tipicamente se
almacena una instruccin de salto o la
direccin especfica donde reside la
subturina de servicio.
14

Microcontroladores: Tema 6

Vector de Interrupcin

15

Microcontroladores: Tema 6

Vector de Interrupcin
RESET

0X0000
0X0008

3
EVENTO

MAIN
5

ISR

16

Microcontroladores: Tema 6

Vector de Interrupcin
Varias interrupciones puede compartir el
mismo vector de interrupcin
Si este es el caso, en la subrutina de ISR se
identifica el origen de la fuente y se ejecuta
el proceso relacionado con esa interrupcin
en particular

17

Microcontroladores: Tema 6

Programacin de una interrupcin


Escritura del ISR
Es como cualquier otra subrutina pero se
recomienda sea lo ms corta posible (prender
una bandera, incremenar un contador o transferir
un dato)

Inicializar el vector de interrupcin


Habilitacin de interrupcin
Existen bandeas para habiliar en forma
individual las interrupciones y una bandera de
habilitacin general
18

Microcontroladores: Tema 6

Latencia de interrupcin
A

MAIN

MAIN

Li

ISR
A

Latencia
Tiempo
19

Lf

Microcontroladores: Tema 6

Reset
Es una forma de interrupcin que coloca al
procesador en un estado conocido
incluyendo el contador de programa
Las fuentes de reset son
Maual mediante seal RESET
POR
Otros

20

Microcontroladores: Tema 6

Interrupciones
Se cuenta con 13 registros para controlar la
operacin de las interrupciones:

21

Microcontroladores: Tema 6

Interrupciones
En general las interrupciones tienen
asociados 3 bits para controlar su operacin
Flag Bit: Indica que el evento de interrupcin
ocurri
Enable Bit: Permite que el control del programa
brinque al vector de interrupcin cuando la
bandera est encendida.
Prority Bit: Para seleccionar si es de alta o baja
prioridad
22

Microcontroladores: Tema 6

Interrupciones SIN prioridad


Para tener compatibilidad con dispositivos de
rango medio, al apagar el bit IPEN (registro
RCON) todas las interrupciones tendrn la
misma prioridad y brincarn al vector
localizado en la direccin 0x0008

23

Microcontroladores: Tema 6

Interrupciones CON prioridad


Se activa encendiendo el bit IPEN (registro
RCON)
Las de alta y baja prioridad pueden ser
habilitdas y deshabilitdas por grupo de
prioridad aparte de en forma individual
Para alta prioridad el vector es 0x0008
Para baja prioridad el vector es 0x0018
24

Microcontroladores: Tema 6

Operacin de interrupciones
Cuando se responde a una interrupcin,
automticamente se deshabilitan en forma
global el resto de las interrupciones pero
puede volverse a habilitar por cdigo.
Las interrupciones de alta prioridad pueden
interrumpir a las de baja priorida
Las interrupciones de baja prioridad no son
procesadas mientras se ejecute una de alta
prioridad
25

Microcontroladores: Tema 6

Operacin de interrupciones
La direccin de retorno se almacena en el
stack (pila)
El contador de programa (PC) es cargado
con la direccin 0x0008 o 0x0018
Una vez dentro del ISR se puede determinar
el causante especfico de la interrupcin
indagando las banderas en los registros
INTCONx y PIRx
26

Microcontroladores: Tema 6

Operacin de interrupciones
La bandera que gener la interrupcin debe
de ser limpiada por el usuario para evitar que
la interrupcin se vuelva a ejecutar al salir
del ISR
La instruccin RETFIE (Return From
Interrupt) re-habilita las interrupciones )
Par eventos externos (INTx o PORTB) la
latencia de la interrupin ser de entre dos o
tres ciclos de instruccin
27

Microcontroladores: Tema 6

Inportante

28

Microcontroladores: Tema 6

Lgica de interrupcin

29

Microcontroladores: Tema 6

Registros
INTCON: Contienen bits de habilitacin,
prioridad y banderas de interrupcin
PIR: Banderas de interrupcin de los
perifricos (PIR1 a PIR5)
PIE: Bits de habilitacin de las
interrupciones de los perifricos
IPR:Contienen los bits de control de
prioridad (cuando activo IPEN)
30

Microcontroladores: Tema 6

31

Microcontroladores: Tema 6

32

Microcontroladores: Tema 6

33

Microcontroladores: Tema 6

34

Microcontroladores: Tema 6

35

Microcontroladores: Tema 6

36

Microcontroladores: Tema 6

37

Microcontroladores: Tema 6

38

Microcontroladores: Tema 6

39

Microcontroladores: Tema 6

40

Microcontroladores: Tema 6

41

Microcontroladores: Tema 6

42

Microcontroladores: Tema 6

Interrupciones en PIC18
Tres asignadas a un puerto, seales son INT0
a INT2. Se puede configurar con flanco
positivo o negativo
FALLING
EDGE

43

RISING
EDGE

Microcontroladores: Tema 6

Interrupciones en PIC18
Cambio en cualquiera de las seales
asociadas al puerto PORTB/C cuando esas
seales han sido configuradas como entrada
Interrupciones del temporizador TMR0
Interrupciones generadas por los perifricos
internos del microcontrolador, la mayora de
los perifricos tienen asociada una
interrupcin.
44

Microcontroladores: Tema 6

Programacin de interrupciones
en lenguaje C (Compilador C18)
La declaracin de la interrupcin de manejo
de la interrucin se realiza por medio de
#pragma
Debido a que exisen interrupciones de alta y
baja prioridad se requiere hacer las
siguientes declaraciones:
El #pragma antecede a un directivo de compilador que
es particular a un CPU determinado o sistema
operativo
45

Microcontroladores: Tema 6

46

Microcontroladores: Tema 6

47

Microcontroladores: Tema 6

goto startup
goto high_priority_ISR
goto low_priority_ISR

0x0008
0x0018

main

high_priority_ISR

low_priority_IS
R

48

Microcontroladores: Tema 6

Salvamento de contexto
Al ocurrir una interrupcin el PIC18 salva
automticamente WREG, BSR y STATUS y se
puede definir su restauracin al retornar de un ISR
Cuando una interrucin de baja prioridad es
interrumpida por una de baja prioridad los registros
se pueden corromper
Se pueden agregar directivos en el #pragma para
proteger casos de doble interrupcin (ver 6.6.3)

49

Microcontroladores: Tema 6

Programacin de Interrupcin
compilador XC8
El compilador XC8 facilita la definicin de las
rutinas de interrupcin.
Basta declarar dos funciones con la siguiente
estructura para la atencin de alta y baja prioridad

50

Microcontroladores: Tema 6

Reset

51

Microcontroladores: Tema 6

Reset

52

Microcontroladores: Tema 6

Reset

53

Microcontroladores: Tema 6

Supervisorios de voltaje

54

Microcontroladores: Tema 6

Watch dog timer

55

Microcontroladores: Tema 6

Supevisorio mixto

56

Microcontroladores: Tema 4

Banda Transportadora
TORRETA
SENSOR

CONTENEDOR

MOTOR

BOTON DE
ARRANQUE
CONTROLADOR
BASADO EN PIC18
57

Microcontroladores: Tema 4

Banda Transportadora
El programa de control deber de realizar lo
siguiente:
Esperar el botn de arranque
Contar el nmero de cajas
Si el nmero llega a un MAXIMO parar la
banda transportadora
Encender una torreta
Esperar de nuevo el botn de arranque.
58

Microcontroladores: Tema 4

Banda Transportadora
Seales en sensores y actuadores (las
entradas sern configuradas como
interrupcin).
DETECTAREMOS
TRANSICIN
POSITIVA

RB0 (INT0)

RD0

BOTON
PRESIONADO

MOTOR
ENCENDIDO

1
0
RB2 (INT2)

0
RD1

SENSOR
CAJA PRESENTE

TORRETA
ENCENDIDA

1
0
59

Microcontroladores: Tema 6

Ejemplo
INCIO

INICIALIZAR

ISR INT2
(CAJAS)

ISR INT0
(BOTN)

DEBOUNCE

DEBOUNCE

CUENTA=
CUENTA + 1

ENCENDER MOTOR
APAGAR TORRETA

FIN

FIN

No

CUENTA =
MAXIMO ?

APAGAR MOTOR
ENCENDER TORRETA

CUENTA = 0

60

Microcontroladores: Tema 6

Ejemplo
Configurar INT0 para generar interrupcin
en transicin positiva (termin de pasar la
caja)
Configurar INT2 para generar interrupcin
en transicin positiva (depresin del botn)
Asuma que no existe ninguna otra
interrupcin dada de alta en el sistema

61

Microcontroladores: Tema 6

Compilador C8

62

Microcontroladores: Tema 6

63

Microcontroladores: Tema 6

64

Microcontroladores: Tema 6

65

Microcontroladores: Tema 6

66