Está en la página 1de 32

Programación

de Sistemas
Embebidos
Profesor: Msc. Ronald Solis M.
¿Sistema de Interrupciones ?
Sistema de Interrupciones
• Uno de los recursos de gran aplicación de los
procesadores embebidos son las interrupciones.
Éstas forman parte de un mecanismo de que
disponen los dispositivos e incluso los procesos
para hacerle saber a la CPU de la aparición de
alguna circunstancia que requiera su intervención.
De este modo, los dispositivos pueden provocar
que la CPU deje por el momento la tarea que
estaba realizando y atienda la interrupción. Una vez
atendida, seguirá con su labor anterior.
Sistema de Interrupciones
• Si no existiesen las interrupciones, el controlador
debería estar continuamente comprobando el
estado del dispositivo para atenderlo cuando éste
lo necesite. Todo el tiempo consumido por el
controlador en realizar el sondeo del estado de los
dispositivos, es tiempo que se desperdicia en la
realización de tareas principales de procesamiento,
disminuyendo así el rendimiento del sistema.
Sistema de Interrupciones
• Cuando al controlador le llega un pedido de interrupción, lo
atiende inmediatamente poniendo una pausa en la
ejecución del programa que está corriendo mientras ejecuta
una función de interrupción denominada rutina de servicio
de interrupción (ISR). Una vez terminado el tratamiento de la
interrupción, el controlador vuelve al lugar donde fue
interrumpido y retoma la ejecución. Para ello el
microcontrolador guarda el contenido del contador de
programa (PC) en una pila; y de esta forma, al terminar la
rutina de interrupción se restaura dicho valor.
Sistema de Interrupciones
Sistema de Interrupciones
Sistema de Interrupciones
• Problemas de no usar interrupciones:
– Consume CPU.
– Se pueden perder eventos.
– Se aumenta la frecuencia de consulta por eventos, impidiendo
realizar tareas intermedias.
– No hay prioridad, todos los dispositivos y eventos son tratados por
igual.
– Cuando hay necesidad de manejar gran cantidad de entradas, es
inviable consultar por tantos eventos.
Sistema de Interrupciones
• Las interrupciones evitan el consultar varias veces por un
evento en particular.
• Ventajas del uso de interrupciones:
– Ahorra tiempo de espera para la ejecución de eventos.
– Permite al procesador desarrollar varias funciones.
– No se pierden eventos.
– Permite tratar eventos de forma rápida evitando latencia.
– Simplifica el diseño de la aplicación.
– Se puede dar mayor prioridad a algunos eventos que
otros.
Tipos de interrupciones
Interrupciones por software
Son aquellas programadas por el usuario, es decir, el usuario decide
cuándo y dónde ejecutarlas.

Interrupciones por Hardware


Son aquellas que son provocadas por dispositivos externos al
procesador. Su característica es que no son programadas, por lo
tanto son asíncronas. Existen dos clases de interrupciones por
hardware:
Enmascarables: aquellas que el usuario decide si quiere o no ser
interrumpido. (Ej. Timer1 Overflow).
No enmascarables: aquellas que siempre interrumpen el programa.
(Ej. Vector reset).
Tipos de interrupciones
Un evento programado o Timer.
Son las interrupciones asociadas a los timers.

Excepciones.
Son aquellas que se producen de forma síncrona a la
ejecución del procesador típicamente causada por una
condición de error en un programa. Normalmente son
causadas al realizarse operaciones no permitidas tales como la
división entre 0, el desbordamiento, el acceso a una posición
de memoria no permitida, etc.
Causas de interrupción
• El Atmega328 puede ser interrumpido desde varias fuentes
de interrupción diferentes.
• Cada una de estas fuentes de interrupción tiene asociada
una dirección en el espacio de memoria del programa.
Estas direcciones se conocen con el nombre de vectores de
interrupción.
• La dirección más baja por defecto le corresponde al vector
de interrupción por RESET.
• Todas las interrupciones tienen asignadas un bit individual
de habilitación Para habilitar una interrupción dicho bit y el
bit Global Interrupt Enable (I) del Status Register (SREG)
debe estar en uno.
Causas de interrupción
• Existen 26 fuentes de interrupción del Atmega328.
• La lista está ordenada por nivel de prioridad. Cuanto menor
es la dirección de una interrupción mayor es su prioridad.
• Cuando ocurre una interrupción se pone a cero el bit I y
todas las interrupciones son deshabilitadas.
• El programador puede escribir un uno en el bit I durante la
ejecución de la ISR permitiendo el anidado de
interrupciones. Todas las interrupciones habilitadas pueden
entonces interrumpir la ISR en ejecución
Diversas Causas de Interrupción
Diversas Causas de Interrupción
Interrupciones

Registro: MCUCR

IVSEL:
Cuando el bit IVSEL es (0), el vector de interrupciones se ubica al
comienzo de la memoria Flash. Cuando es (1), el vector de interrupciones
es movido a la sección Boot Loader de la Flash.
IVCE:
El bit IVCE debe colocarse en 1 para habilitar el cambio del bit IVSEL. IVCE
se escribe en 0 por hardware después de los cuatro ciclos de haberse
escrito o cuando el IVSEL es escrito.
Interrupciones externas
• Las interrupciones externas se disparan con los pines INT0 e
INT1 o con cualquier pin PCINT23… PCINT0.
• Observar que, si están habilitados, las interrupciones
dispararán aun cuando dichos pines estén configurados
como salidas. Esta característica provee una forma de
generar una interrupción por software.
• El pin de interrupción por cambio PCI2 se disparará si
cualquier pin PCINT23… PCINT16 cambia de estado. El pin
de interrupción por cambio PCI1 se disparará si cualquier
pin PCINT14… PCINT8 cambia de estado. El pin PCI0 hará lo
mismo si algún pin PCINT7… PCINT0 cambia de estado.
Interrupciones externas
• Los registros PCMSK2, PCMSK1 y PCMSK0 controlan cuales
pines contribuyen a las interrupciones de cambio de
estado. Estas interrupciones son detectadas
asincrónicamente.
• Las interrupciones INT0 e INT1 pueden ser disparadas por
flanco ascendente, descendente, o nivel bajo.
• La interrupción de nivel bajo es detectada
asincrónicamente, no así para el caso de la detección por
flanco, ya que hace uso del I/O clock.
¿Qué pasa si 2 eventos de interrupción
ocurren a la vez?
• Siempre que las interrupciones globales
estén activas, la mascara correspondiente
este habilitada entonces la interrupción
puede ser procesada.
• Si hay mas de un “Flag”(bit que se enciendo
cuando el evento de interrupción ocurre)
activado el AVR procesa las interrupciones
por prioridad, según el número asignado en
la tabla de vectores de interrupción.
¿Qué pasa si 2 eventos de interrupción
ocurren a la vez?
• Cuando un evento ocurre cuando se esta
resolviendo una ISR, la nueva interrupción se
procesa en ese momento, es decir, ocurre
una interrupción dentro de otra. No olvidar
que las interrupciones globales deben estar
activas.
• Este es valido incluso si el evento de
interrupción es del mismo tipo que la ISR
que se está ejecutando.
¿Qué pasa si 2 eventos de interrupción
ocurren a la vez?
• Se recomienda reducir el código dentro de la
ISR para evitar este tipo de eventos en el
cual dos interrupciones puedan ocurrir al
mismo tiempo, ya que la pila es finita,
pudiendo llenarse y perder la ultima
dirección en la que ocurrió el evento.
Interrupciones

Registro: EICRA

Bit del 7…4: Reservados.

ISC0x: Control de censado de interrupción 0 Bit 1 y Bit 0.

ISC1x: Control de censado de interrupción 1 Bit 1 y Bit 0.


Interrupciones

Registro: EIMSK

INT1:
Cuando INT1 bit se coloca en (1) y el bit I del registro de estado (SREG) está
seteado, la interrupción externa queda habilitada.

INT0:
Cuando INT0 bit se coloca en (1) y el bit I del registro de estado (SREG) está
seteado, la interrupción externa queda habilitada.

SREG |= (1<<I);

//EIMSK=1; 0B00000001

EIMSK |= (1<< INT0);

MAIN
WHILE(1){
Interrupciones

Registro: EIFR

INTF1:
Cuando un flanco o un cambio de estado dispara un pedido de interrupción por
el pin INT1, INTF1 se pone en 1. Para poder observar este cambio el bit INT1 en
EIMSK y el bit I de SREG deben ser 1, el MCU saltará al correspondiente vector
de interrupción. La bandera se vuelve 0 cuando la rutina de interrupción se haya
ejecutado. Alternativamente, la bandera puede hacerse 0 escribiendo un uno
lógico en el mismo bit.
INTF0:
Cuando un flanco o un cambio de estado dispara un pedido de interrupción por
el pin INT0, INTF0 se pone en 1. Para poder observar este cambio el bit INT0 en
EIMSK y el bit I de SREG deben ser 1, el MCU saltará al correspondiente vector
de interrupción. La bandera se vuelve 0 cuando la rutina de interrupción se haya
ejecutado. Alternativamente, la bandera puede hacerse 0 escribiendo un uno
lógico en el mismo bit.
Interrupciones

Registro: PCICR

PCIE2:
Cuando el bit PCIE2 se coloca en (1) y el bit I del SREG es también (1), la
interrupción por cambio de estado en el pin se habilita. Cualquier cambio en
algún pin del PCINT23… PCINT16 causará una interrupción. Los pines PCINT23…
PCINT16 se habilitan individualmente en el registro PCMSK2.
PCIE1:
Cuando el bit PCIE1 se coloca en (1) y el bit I del SREG es también (1), la
interrupción por cambio de estado en el pin se habilita. Cualquier cambio en
algún pin del PCINT14… PCINT8 causará una interrupción. Los pines PCINT14…
PCINT8 se habilitan individualmente en el registro PCMSK1.
Interrupciones

Registro: PCICR

PCIE0:
Cuando el bit PCIE0 se coloca en (1) y el bit I del SREG es también (1), la
interrupción por cambio de estado en el pin se habilita. Cualquier cambio en
algún pin del PCINT7… PCINT0 causará una interrupción. Los pines PCINT7…
PCINT0 se habilitan individualmente en el registro PCMSK0.
Interrupciones

Registro: PCIFR

PCIF2:
Cuando un cambio lógico en cualquier pin del PCINT23… PCINT16 dispara un
pedido de interrupción , PCIF2 se convierte en uno lógico (1). Teniendo en
consideración que el bit I en SREG y el bit PCIE2 en PCICR deben ser (1), el MCU
saltará al vector de interrupción correspondiente. La bandera se clarea cuando se
haya ejecutado la rutina de interrupción. Alternativamente, se puede clarear
escribiendo un uno lógico en él.
PCIF1:
Cuando un cambio lógico en cualquier pin del PCINT14… PCINT8 dispara un
pedido de interrupción , PCIF1 se convierte en uno lógico (1). Teniendo en
consideración que el bit I en SREG y el bit PCIE1 en PCICR deben ser (1), el MCU
saltará al vector de interrupción correspondiente. La bandera se clarea cuando se
haya ejecutado la rutina de interrupción. Alternativamente, se puede clarear
escribiendo un uno lógico en él.
Interrupciones

Registro: PCIFR

PCIF0:
Cuando un cambio lógico en cualquier pin del PCINT7… PCINT0 dispara un pedido
de interrupción , PCIF0 se convierte en uno lógico (1). Teniendo en consideración
que el bit I en SREG y el bit PCIE0 en PCICR deben ser (1), el MCU saltará al vector
de interrupción correspondiente. La bandera se clarea cuando se haya ejecutado
la rutina de interrupción. Alternativamente, se puede clarear escribiendo un uno
lógico en él.
Interrupciones

Registro: PCMSK2

PCINTx: [23:16]
Cada bit PCINT23… PCINT16 selecciona si la interrupción se habilita para el pin
correspondiente de I/O. Si PCINT23… PCINT16 es 1 y el bit PCIE2 en PCICR es
también 1, la interrupción por cambio de estado de pin se habilita. Si PCINT23…
PCINT16 es 0, la correspondiente interrupción está deshabilitada.
Interrupciones

Registro: PCMSK1

PCINTx: [14:8]
Cada bit PCINT14… PCINT8 selecciona si la interrupción se habilita para el pin
correspondiente de I/O. Si PCINT14… PCINT8 es 1 y el bit PCIE1 en PCICR es
también 1, la interrupción por cambio de estado de pin se habilita. Si PCINT14…
PCINT8 es 0, la correspondiente interrupción está deshabilitada.
Interrupciones

Registro: PCMSK0

PCINTx: [7:0]
Cada bit PCINT7… PCINT0 selecciona si la interrupción se habilita para el pin
correspondiente de I/O. Si PCINT7… PCINT0 es 1 y el bit PCIE0 en PCICR es
también 1, la interrupción por cambio de estado de pin se habilita. Si PCINT7…
PCINT0 es 0, la correspondiente interrupción está deshabilitada.

También podría gustarte