martes, 8 de mayo de 2012

Interrupciones en sistemas integrados

¿Qué son las interrupciones?

Los microcontroladores deben de proporcionar en tiempo real una respuesta a los acontecimientos en el sistema integrado que estamos controlando, por lo que algunas veces suceden eventos que el sistema debe de interrumpir por ejemplo el suspender el procesamiento de una instrucción que se está haciendo y empezar otra instrucción de interrupción que realice algo antes de volver a la instrucción original.

Por lo que, podemos decir que las interrupciones son las cosas que van a suceder cuando el microcontrolador no esta listo para hacer alguna otra función, o cuando este sistema integrado estaba ocupado, y no puede comprobar que es lo que se esta haciendo, entonces las interrupciones causan que se detenga lo que se esta haciendo para manejar una tarea de alta prioridad, para luego remontar a lo que se estaba haciendo antes.


Tipos de Interrupciones.
  • Hardware
  • Software
Existen dos tipos de interrupciones en los sitemas integrados, los son basados en hardware y los que son basados en software, las interrupciones de software son llamados desde un código, mediante comandos especializados, en cambio de los de hardware que son provocados por dispositivos periféricos que son externos al microcontrolador, entonces por ejemplo, tenemos un sistema en donde tengamos un temporizador que envia pulsos contando cada segundo y cuando de alguna forma el microcontrolador recive alguna pulsación activaria una señal de interrupción.


Rutinas de interrupción [ISR]

Las rutinas de servicio de interrupción o en inglés Interrupt Service Routines (ISR) son partes de código en un programa en el cual se tienen solicitudes de interrupción, por lo que cuando una de estas interrupciones se activa, ya sea basadas en hardware o basadas en software, el microprocesador se aparta o se separa de la tarea que esta actualmente realizando y mueve el puntero de la pila de instrucciones a la parte del código de la ISR, y entonces empieza estas lineas de instrucciones para luego, al momento de terminar y completar esto, vuelva a la ejecución en la cual la dejamos inconclusa.

Muchos de los sistemas integrados son llamados sistemas impulsados por una interrupción, ya que la mayor parte del procesamiento se produce en el ISR, y el sistema integrado pasa la mayor parte del tiempo utilizando bajos consumos.

Algunas veces, el ISR puede se puede dividir en dos partes, la mitad superior, llamado tambien como el fast interrupt handler o el primer nivel de interrupciones, y la parte inferior de la mitad, llamado tambien el slow interrupt handler o segundo nivel de interrupciones, por lo que la mitad superior es más rápida del ISR que rapidamente se debe almacenar la información mínima en la interrupción y el segundo nivel, para un momento posterior.


Tabla de vectores de interrupción

Las tablas de vectores de interrupción son listas en donde se guardan todas las rutinas de servicio de interrupción o ISR, y se encuentra muchas veces en una ubicación fija en la memoria del programa, en donde algunos microcontroladores esperan la tabla de vectores de interrupción y hacer como una seride de llamadas a las instrucciones y algunos otros solamente seleccionan una instruccion de esa tabla, depende de como lo programemos y de que se trata nuestro proyecto.


Interrupciones en Arduino

Para utilizar interrupciones en Arduino se utiliza la función attachInterrupt(interrupcion, funcion, modo) en donde especificamos la función ISR que necesitamos invocar remplazando cualquier función previa.


Es importante saber que las placas de Arduino (incluyendo Arduino BT) tienen dos interrupciones externas:
Las número 0 (en el pin digital 2)
Las número 1 (en el pin digital 3)



Y en el Arduino Mega se tienen 4 interrupciones externas:
Las número 2 (pin 21)
Las número 3 (pin 20)
Las número 4 (pin 19)
Las número 5 (pin 18)

Espero que esta entrada nos pueda ayudar a entender las interrupciones, como funcionan y en que nos pueden ayudar para nuestro proyecto de Arduino.

Referencias.
AttachInterrupt Función
Embedded Systems - Interrupts.

1 comentario: