interrupciones arduino

7
INTERRUPCIONES Galileo es una tarjeta electrónica, basada en un microcontrolador Intel Quark SoC X1000 que bien podría considerarse un sistema Pentium de 32 bits, compactado todo en un chip. Lo mejor es que la arquitectura de este chip es compatible con los shields para Arduino (versión Uno R3), a nivel pin a pin. ¿Qué es una interrupción? Una interrupción es un mecanismo que permite ejecutar un bloque de instrucciones interrumpiendo la ejecución de un programa, y luego restablecer la ejecución del mismo sin afectarlo directamente. De este modo un programa puede ser interrumpido temporalmente para atender alguna necesidad urgente del computador y luego continuar su ejecución como si nada hubiera pasado. Ya que un procesador no puede procesar simultáneamente varios trozos de información (procesa un trozo de información por vez), un programa que está siendo ejecutado puede, gracias al pedido de interrupción, ser momentáneamente suspendido mientras se produce una interrupción. El programa interrumpido puede continuar ejecutándose luego. Existen 256 direcciones de interrupción diferentes. Una interrupción se convierte en una interrupción de hardware cuando es solicitada por uno de los componentes de hardware del equipo. En efecto, existen varios periféricos en un equipo. Estos periféricos necesitan generalmente utilizar los recursos del sistema aunque sólo sea para comunicarse con el sistema mismo. Tipos de interrupciones Interrupción interna de hardware Son generadas por ciertos eventos que surgen durante la ejecución de un programa. Este tipo de interrupciones son manejadas en su totalidad por el hardware y no es posible modificarlas. Un ejemplo claro de este tipo de interrupciones es la que actualiza el contador del reloj interno de la computadora, el hardware hace el llamado a esta interrupción varias veces durante un segundo para mantener la hora actualizada.

Upload: erick-ramirez

Post on 09-Jul-2016

39 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: interrupciones arduino

INTERRUPCIONES

Galileo es una tarjeta electrónica, basada en un microcontrolador Intel Quark SoC X1000 que bien podría considerarse un sistema Pentium de 32 bits, compactado todo en un chip. Lo mejor es que la arquitectura de este chip es compatible con los shields para Arduino (versión Uno R3), a nivel pin a pin.

¿Qué es una interrupción?

Una interrupción es un mecanismo que permite ejecutar un bloque de instrucciones interrumpiendo la ejecución de un programa, y luego restablecer la ejecución del mismo sin afectarlo directamente. De este modo un programa puede ser interrumpido temporalmente para atender alguna necesidad urgente del computador y luego continuar su ejecución como si nada hubiera pasado.

Ya que un procesador no puede procesar simultáneamente varios trozos de información (procesa un trozo de información por vez), un programa que está siendo ejecutado puede, gracias al pedido de interrupción, ser momentáneamente suspendido mientras se produce una interrupción. El programa interrumpido puede continuar ejecutándose luego. Existen 256 direcciones de interrupción diferentes.

Una interrupción se convierte en una interrupción de hardware cuando es solicitada por uno de los componentes de hardware del equipo. En efecto, existen varios periféricos en un equipo. Estos periféricos necesitan generalmente utilizar los recursos del sistema aunque sólo sea para comunicarse con el sistema mismo.

Tipos de interrupciones

• Interrupción interna de hardware

Son generadas por ciertos eventos que surgen durante la ejecución de un programa.

Este tipo de interrupciones son manejadas en su totalidad por el hardware y no es posible modificarlas.

Un ejemplo claro de este tipo de interrupciones es la que actualiza el contador del reloj interno de la computadora, el hardware hace el llamado a esta interrupción varias veces durante un segundo para mantener la hora actualizada.

• Interrupción externa de hardware

Las interrupciones externas las generan los dispositivos periféricos, como pueden ser: teclado, impresoras, tarjetas de comunicaciones, etc. También son generadas por los coprocesadores.

No es posible desactivar a las interrupciones externas.

Estas interrupciones no son enviadas directamente a la UCP, sino que se mandan a un circuito integrado cuya función es exclusivamente manejar este tipo de interrupciones.

• Interrupciones de software

Page 2: interrupciones arduino

Pueden ser activadas directamente por el ensamblador invocando al número de interrupción deseada con la instrucción INT.

El uso de las interrupciones nos ayuda en la creación de programas, utilizándolas nuestros programas son más cortos, es más fácil entenderlos y usualmente tienen un mejor desempeño debido en gran parte a su menor tamaño.

Este tipo de interrupciones podemos separarlas en dos categorías: las interrupciones del sistema operativo DOS y las interrupciones del BIOS.

¿Para Qué Sirven Las Interrupciones?

Para detectar cambios como un pulsador que ha sido presionado.

Para determinar cuándo se ha terminado de gestionar la memoria EEPROM o Flash.

A modo de despertador del controlador. Esta es una interesantísima funcionalidad de tu placa que te permite mantener el consumo al mínimo dejando en standby hasta que suceda algún evento. Con ello podrás hacer que tus baterías duren mucho más.

Como el complemento ideal a los módulos digitales de sonido, temperatura… que disponen de un potenciómetro que regula cuándo se activa la salida digital. Así puedes, por ejemplo, realizar un montaje simple en el que ocurra alguna acción cuando se supere un cierto umbral de sonido o una cierta distancia.

Ventajas

Utilizando las interrupciones puedes tener tu código ejecutando las instrucciones que sean y, sólo cuando esa interrupción se active, tu programa se va al código que has asociado a esa interrupción, lo ejecuta y luego vuelve a donde estaba (a la parte del código que estaba ejecutando cuando se activó la interrupción).

Señales de interrupción

Las señales de interrupción son las siguientes:

• cli (): desactiva las interrupciones globales

• sei(): activa las interrupciones

• Esto afectará al temporizador y a la comunicación serial. La función delayMicroseconds() desactiva las interrupciones cuando se ejecuta.

Las interrupciones son acontecimientos que provocan la desviación del flujo de control de la CPU, que abandona el programa principal y pasa a ejecutar una rutina que atiende la causa que la ha originado.

Para manejar las interrupciones los dsPIC30F disponen de una tabla de vectores de interrupción llamada IVT. La tabla IVT tiene 62 entradas distintas, es decir, 62 vectores para atender cada una de las interrupciones. La IVT reside en la memoria del programa comenzando en la dirección 00000004 H. los 8 primeros vectores (0-7) de la IVT están reservados para interrupciones no mascarables, los 54 restantes (8-62) para interrupciones mascarables.

Page 3: interrupciones arduino

El tratamiento de las interrupciones lo lleva una rutina de servicio de interrupción, ISR que se pone en marcha cuando la CPU atiende una interrupción

Las interrupciones admiten 16 niveles de prioridad, del nivel 0 al 15. Para poder inicializar el proceso la causa o fuente que llama a la CPU debe tener un nivel de prioridad mayor que el de la CPU. Inicialmente el nivel de la CPU será el más bajo de todos, el nivel 0.

Los 16 niveles se dividen en dos grupos:

Del 0 al 7: interrupciones externas (periféricos). La CPU tiene uno de estos niveles.

Del 8 al nivel 15: excepciones internas, no mascarables, que se tienen que atender en el momento que se producen.

Todas las interrupciones se pueden deshabilitar poniendo los bits de IPL=111, con lo se deshabilitaran las interrupciones externas. El bit IPL3 nos indica si son mascarables o no.

Cada interrupción externa es asignada a uno de los 7 niveles de prioridad por el usuario estas prioridades empiezan en el nivel 1(nivel más bajo) y acaban en el 7 (nivel más alto).

El motivo de haber dos formas de asignar niveles de prioridad se debe a que el usuario puede asignar a distintas fuentes de interrupciones niveles de prioridad iguales; cuando estas interrupciones se produzcan, en el mismo instante, la CPU no sabrá a cual atender, y entonces están en juego las prioridades naturales; en este caso se atenderá la que mayor prioridad natural posee. La prioridad natural viene dada por el orden de colocación dentro de la tabla de vectores de interrupciones, cuando menor sea el número de vector mayor prioridad tendrá.

Interrupciones (Triggers)

● mraa_gpio_edge_t

➢ Tipo de dato para definir si la interrupción se activa con el flanco de subida, baja o con ambos

● mraa_gpio_isr (mraa_gpio_context, mraa_gpio_edge_t, void(*fptr)(void *), void *args)

➢ Asigna al puerto digital una rutina para ejecutarla cuando se active la interrupción

● mraa_result_t mraa_gpio_isr_exit (mraa_gpio_context)

➢ Elimina la rutina asignada al puerto, para que no quede la funcionalidad asignada

Interrupciones (Triggers) (ejemplo de aplicación)

Page 4: interrupciones arduino

Uso de interrupciones con galileo

Ejemplo Integrador

Page 5: interrupciones arduino
Page 6: interrupciones arduino