Vous êtes sur la page 1sur 6

Computadoras Digitales Juan Navarro 20-70-1999

Cdigo 6314 Giacomo Echevers 8-878-1829


Laboratorio N8
Introduccin a las Interrupciones en C

Pre-Lab
Como primer paso en la realizacin de este laboratorio nos enfocamos en realizar las partes de las guas
que nos ayudaran a resolver los ejercicios propuestos en laboratorio.

Estimular 1
1. D tres ejemplos de dispositivos de E/S para los que las interrupciones se podran utilizar para
sincronizar el microcontrolador con las E/S.
Tres ejemplos seran: dispositivos seriales de E/S, convertidores de Anlogos-Digitales y
controladores para motores paso a paso.

2. Suponga que usted est diseando sistemas de microcontrolador a utilizar en una aplicacin
automotriz. Da tres ejemplos de eventos importantes que se prestan a ser implementadas en un
microcontrolador utilizando un sistema de interrupcin.
Tres eventos importantes seran: despliegue de las bolsas de aire, sistema de frenos antibloqueo
y el control de inyeccin de combustible.

Explora 1
1. Dnde en la documentacin podemos encontrar los lugares vectoriales (o direcciones de
vectores) para las interrupciones?
En el captulo 1 del Manual de Referencia para Usuarios MC9S12C, especficamente la seccin
de la revisin de dispositivos. Las direcciones de los vectores est dado por las siguientes tablas:

2. Como su microcontrolador
a. permite que ocurran eventos asncronos y que sean reconocidos?
A travs de la comprobacin de banderas y seales externas que indican que se ha
producido un evento. Esto se hace antes de que la siguiente instruccin sea buscada en la
secuencia normal.
b. pasa a la rutina de servicio de interrupcin correcta?
Se utiliza un sistema de vectores donde cada fuente de interrupcin tiene un lugar de
memoria especfica en la cual la direccin de la ISR (interrupcin) es guardada.
Computadoras Digitales Juan Navarro 20-70-1999
Cdigo 6314 Giacomo Echevers 8-878-1829
c. vuelve al programa interrumpido en el punto en que se interrumpi?
Antes que la interrupcin (ISR) sea ingresada, el contador de programa es empujado hacia
la pila de retorno. Este contador contiene la direccin de la siguiente instruccin.
d. permite al programador globalmente habilitar y deshabilitar todas las interrupciones?
Una mscara de bits es usada para habilitar o deshabilitar todas las fuentes de interrupcin.
e. permite que el programador active y desactive las alarmas seleccionadas?
Esta activacin o desactivacin se da gracias a que existe un bit de habilitacin para cada
subsistema de interrupcin.
f. desactiva subsecuentes interrupciones por lo que el primero puede dar mantenimiento sin
ser interrumpido?
Cuando una interrupcin ocurre todas las dems interrupciones son deshabilitadas con la
mscara de bit correspondiente.
g. hace frente a las mltiples fuentes de interrupciones?
Mltiples fuentes pueden ser manejadas por cada fuente que tiene su propio vector, es decir,
cada fuete tiene su vector propio con el cual se trabaja.
h. hace frente a mltiples interrupciones simultneas?
Mltiples fuentes simultaneas pueden ser manejadas a travs de un sistema de prioridad.

3. Qu puede causar una interrupcin pendiente?


Una interrupcin pendiente puede ser causada por la aceptacin de una seal de interrupcin
antes de las dems interrupciones sean deshabilitadas a travs de las mscaras, es decir, ocurre
cuando no se hayan reseteados las banderas en la ISR.

4. Cmo se inicializa una bandera que caus una interrupcin?


La mayora de las banderas de interrupcin son inicializadas o reseteadas al escribirle un 1 a la
bandera correspondiente.

5. Qu sucede si usted no inicializa la bandera en la rutina de servicio de interrupcin?


Si la bandera de interrupcin est todava activa (seteada) cuando la interrupcin est
deshabilitada, entonces esto causar que inmediatamente otra peticin de interrupcin y por lo
tanto la ISR entrar sin haber regresado antes al programa interrumpido, es decir, seguir en la
subrutina de interrupcin.

Explora 2
1. Revise la documentacin de su microcontrolador y haga una tabla que muestre todas las fuentes
de interrupcin. Un buen lugar para buscar esto ser en la tabla de vectores de interrupcin.
Incluya en su tabla una indicacin de si la fuente es una solicitud generada de una interrupcin
interna o externa. Tambin incluya la direccin del vector.

La siguiente tabla fue extrada de un documento basado en el manual de referencia de usuarios,


descrito anteriormente.
Computadoras Digitales Juan Navarro 20-70-1999
Cdigo 6314 Giacomo Echevers 8-878-1829

Estimular 2
1. Siempre hay un retraso entre la solicitud de interrupcin y cuando la CPU comienza a ejecutar la
rutina de servicio de interrupcin. Esto se conoce como la latencia de interrupcin. D tres
componentes que provocan la latencia de interrupcin.
Tres procesos que causan una interrupcin que a su vez genera latencia son: empujar registros a
la pila de retorno, la determinacin de la direccin de la ISR, y la bifurcacin que ocurre hacia el
ISR.

2. Cmo la CPU determina la direccin de retorno despus que la ISR se ha completado?


La direccin de la siguiente instruccin a ejecutar siempre la determina o la provee el contador
de programa, y est es a su vez empujada a la pila de retorno, para despus extraerla y pasar a la
instruccin siguiente.

3. Su microcontrolador empuja todos los registros en la pila al entrar en una rutina de servicio de
interrupcin?
Casualmente, el HCS12 si empuja todos los registros a la pila antes de entrar al ISR.

4. Dar una ventaja y una desventaja de empujar automticamente registros en la pila.


La ventaja es que el usuario no debe preocuparse por salvar los datos en general de la maquina al
ocurrir una interrupin. La desventaja es que agrega latencia (retrasos) al sistema ya que existen
registros que no son modificados en el ISR.
Computadoras Digitales Juan Navarro 20-70-1999
Cdigo 6314 Giacomo Echevers 8-878-1829

Explora 3
1. Cmo hace su sistema de desarrollo de software para inicializar el vector de interrupcin que se
va a utilizar?
En el simulador CodeWarrior, el cual es el software que usamos para trabajar con el
microcontrolador HCS12, la direccin de la rutina de servicio de interrupcin (ISR) se establece
justo en el tiempo del enlace y la localizacin del vector se establece en un nmero o direccin
que se encuentra en el archivo de parmetros del enlace. Dicho archivo se usa para programar la
memoria flash que contiene las direcciones correctas en las locaciones de vectores correctas.

Explora 4
1. Su compilador soporta rutinas de interrupcin de servicio? Si es as, cmo se manifiesta al
compilador que una funcin se debe tratar como un manejador o rutina servicio de interrupcin?
Para el software CodeWarrior, si se pueden manejar rutinas de interrupcin de servicio, y
adems la palabra clave interrupt se usa en la definicin de la funcin para indicar que dicha
funcin debe manejarse como rutina de servicio de interrupcin.

2. Qu instruccin en C se utiliza para lo siguiente?


a. Desenmascarar interrupciones
La instruccin cli y tambin Enable Interrupts se utilizan para desenmascarar
interrupciones.
b. Enmascarar interrupciones
La instruccin sei se utiliza para enmascarar interrupciones.
c. Retornar de una rutina de servicio de interrupcin
La instruccin rti se utiliza para retornar desde la ISR.

Estimular 3
1. Qu hace que un manejador de interrupciones o rutina de servicio sea diferente a una funcin
"ordinario"?
Un manejador de interrupcin o un servicio de rutina son diferentes que una funcin ordinaria
por la necesidad de preservar el estado de la mquina, incluyendo registros, direcciones, etc y
por otra parte la necesidad de restaurar dicho estado despus que la rutina de interrupcin haya
finalizado. Tambin, toda la data transferida entre las funciones y el manejador de interrupcin
deben ser declaradas como data global.

Informe

Metas del Experimento


Las interrupciones son una parte importante de muchas aplicaciones embebidas. Aunque una
peticin de interrupcin es muy similar a una llamada de funcin de accionamiento de hardware,
se diferencia de una funcin de llamada "normal" de varias maneras importantes. En este
mdulo aprenderemos sobre la terminologa de interrupcin y comenzaremos a utilizar las
capacidades de interrupcin de su microcontrolador.

Procedimiento y Resultados
Se procedi a desarrollar las partes indicadas en la gua del laboratorio, usando la siguiente
figura.
Computadoras Digitales Juan Navarro 20-70-1999
Cdigo 6314 Giacomo Echevers 8-878-1829
Problema 1
Usted y su pareja de laboratorio deben demostrar que ustedes entienden cmo escribir software usando
las capacidades de interrupcin de su microcontrolador. Ustedes deben hacer esto en varios pasos,
porque cuando los estudiantes tratan de hacer demasiado en su primer programa de interrupcin, el
problema puede llegar a ser demasiado complejo y difcil de verificar y depurar.

1. La figura 1 muestra que hay dos partes del sistema de


interrupcin - trabajo en primer plano y el trabajo en segundo
plano. Usted probablemente ha hecho muchos programas tiles
que se pueden utilizar para demostrar una tarea en segundo
plano que puede ser interrumpida. Antes de hacer una tarea en
segundo plano complejo, sin embargo, es una buena estrategia
utilizar simplemente un bucle de giro (un bucle que no hace
nada) como tarea en segundo plano. Esto permitir que usted se
concentre en aprender cmo conseguir que trabaje la rutina de
servicio de interrupcin.
Se realizar un programa que consta de dos partes: el primer
plano donde se generar una onda cuadrada usando el Output
Compare para conmutar (encender y apagar) un led conectado al pin PT1; el segundo plano lo
constituye la rutina de servicio de interrupcin, la cual al detectar una interrupcin predefinida
incrementar el contador y dicho contador se mostrar a la salida del Puerto B, donde asumimos
que conectaremos leds.

2. Inspeccione su kit de aprendizaje para encontrar una interrupcin externa que se pueda controlar.
Su hardware podra tener un interruptor conectado a un pin IRQ o algn otro pin del puerto.
Cuando haya elegido una fuente de interrupcin, investigar la documentacin de su
microcontrolador para determinar que registros necesitan ser inicializados para permitir que las
interrupciones trabajen.
El HCS12 tiene dos interrupciones de hardware: IRQ y XIRQ. Se pueden utilizar como
interrupciones de hardware externos. El IRQ es una seal de entrada a la CPU que puede ser
enmascarado (ignorado) y desenmascarado a travs del uso de las instrucciones CLI y SEI. Sin
embargo, XIRQ, que es tambin una seal de entrada a la CPU, no puede ser enmascarado y
desenmascarado utilizando las instrucciones CLI y SEI y por sta razn se le una interrupcin no
enmascarable (NMI). Para nuestro caso usaremos la interrupcin IRQ.

3. Disee una rutina de interrupcin de un fondo que haga algo til y demostrar que cuando se hace
la solicitud de interrupcin se ejecuta la rutina de servicio de interrupcin.

4. Su siguiente tarea es disear una tarea en segundo plano que puede ser interrumpida.
Inspeccione su kit de aprendizaje de manera que la tarea en segundo plano puede hacer algo til
para que usted pueda demostrar que est funcionando correctamente y sin errores cuando ms
adelante aade una rutina de servicio de interrupcin o de trabajo en segundo plano.

5. Demostrar que su tarea en segundo plano funciona correctamente cuando no hay interrupciones.
(Qu vas a hacer en su programa para asegurarse de que no se produzcan interrupciones?)

6. Ahora combina la actividad en primer plano y la rutina de servicio de interrupcin. Demostrar


que ambos trabajan juntos.
Computadoras Digitales Juan Navarro 20-70-1999
Cdigo 6314 Giacomo Echevers 8-878-1829
El siguiente programa incluye la rutina de servicio de interrupcin y la ejecucin de un
programa, ambas descritas arriba y en el mismo cdigo respectivamente.

Conclusiones
Las interrupciones son eventos importantes que deben ser reconocidas y atendidas (llamada de servicio)
por nuestro programa. El microcontrolador cuenta con caractersticas de hardware y software que
permiten estos importantes eventos. Las interrupciones son un activo importante al escribir aplicaciones
de alto rendimiento. Usted puede utilizarlos en sistemas integrados para sincronizar el microcontrolador
con E/S lentas. En algunas aplicaciones con un sistema operativo en tiempo real, las interrupciones se
utilizan para llevar a cabo todas las tareas de procesamiento.

Para cada interrupcin, debe de haber una rutina de servicio de interrupcin (ISR), o un manejador de
interrupcin. Cuando una interrupcin es invocada, el microcontrolador corre la rutina de servicio de
interrupcin. Por cada interrupcin, hay una localidad fija en memoria que mantiene la direccin de
inicio de la ISR. Al grupo de localidades de memoria separadas para mantener las direcciones de los
ISRs se llama Tabla de Vectores de Interrupcin.

Informe Realizado por: Juan Navarro Giacomo Echevers

Vous aimerez peut-être aussi