You are on page 1of 6

Unidad Profesional Interdisciplinaria de Ingeniera Campus Zacatecas Alumnos: Gael G. Manzanares Quiones, Alan M. Martnez Lpez, Cristian A.

Hernndez Orozco.

Arquitectura de Computadoras
Ingeniera en Sistemas Computacionales.

Practica 3: Interrupciones.
Objetivo general El alumno demostrar el manejo bsico de los puertos 1 y 2 con rutinas de interrupcin ISR implementadas con ciclos repetitivos e instrucciones condicionales en el microcontrolador MSP430G2553 de TI mediante un lenguaje de alto nivel C. Adicional: Utilizar las ventajas del depurador de programas del entorno de desarrollo para realizar la inspeccin de variables y registros en la zona de memoria. Preguntas gua/ trabajo previo. Asegrate de poder responder a las siguientes preguntas antes de comenzar con el desarrollo de la prctica. a) Por qu se dice que los microcontroladores son sistemas electrnicos potentes ya que su filosofa de uso es en base a la utilizacin de rutinas ISR? Porque de esta manera el procesador puede interrumpir una tarea actual para realizar otra de mayor importancia, para despus regresar a su estado actual, de igual manera se pueden evitar que mediante un ciclo infinito se est verificando constantemente una entrada, y esto a su vez utilizando constantemente los recursos del microcontrolador innecesariamente. b) Cuntos tipos de interrupciones tiene el MSP430 y cul es su jerarqua? 3 tipos: System Reset - las de ms alta jerarqua Non-maskable - jerarqua media Maskable - que varan entre media y baja. c) Nombre los principales registros de configuracin de interrupcin para los puertos 1 y 2 del MSP430G2553. A. PxIE (interrupt enable) habilita interrupciones en el puerto x, 0 deshabilitado. 1 habilitado. B. PxIES (interrupst edge select) cambia la transicin utilizada para la interrupcin. 0 bajo->alto, 1 alto->bajo C. PxIFG (interrupt flag register) es la bandera que se registra cuando ocurre la interrupcin en el pin correspondiente. d) Nombre 2 aplicaciones con microcontrolador que sea recomendable utilizar la filosofa de programacin por ISR para lograr eficiencia energtica. Si por ejemplo se quiere implementar una alarma que mediante un sensor detecte un movimiento, se puede utilizar un interrupcin para verificar cuando nicamente haya un cambio en el sensor o mande una seal para activar la alarma. Otro caso muy comn es las interrupciones que se efectuar al presionar un botn o el estado lgico de una entrada de mayor importancia, mediante una interrupcin ISR solo se atender dicha entrada cuando se efectu dicho cambio.

Pgina 1 |

14/10/2013

Unidad Profesional Interdisciplinaria de Ingeniera Campus Zacatecas Alumnos: Gael G. Manzanares Quiones, Alan M. Martnez Lpez, Cristian A. Hernndez Orozco.

Marco terico. Consultar los materiales de clase (tutorial 9) y el manual de la familia de microcontroladores MSP430gx2xx disponible en www.TI.com/launchpad. para dominar los procesos de programacin y depuracin de los programas en C. Analicemos el mtodo de programacin que venimos utilizando en tutoriales anteriores con el MSP430; Para realizar alguna tarea en funcin del estado lgico de una entrada, (o conjunto de entradas) utilizamos un bucle de consulta secuencial infinito. Este mtodo obliga al microprocesador a no hacer nada til mientras tanto no ocurra un cambio en la entrada consultada. Y tal vez peor, el procesador sigue trabajando al mximo poder sin hacer nada ms que esperar para ver si tiene un trabajo que hacer. Una mejora a este mtodo es tener una seal o seales como aviso para interrumpir al microprocesador (de su tarea actual o su estado latente) para realizar la tarea predeterminada y luego permitir que el microprocesador regrese a su estado original o a lo que estaba haciendo. Esta capacidad o filosofa de trabajo se conoce como implementacin de una rutina de servicio de interrupcin (ISR nombre muy apropiado) o simplemente manejo de interrupciones. Los microcontroladores son sistemas electrnicos potentes ya que su filosofa de uso es en base a la utilizacin de rutinas ISR. As como en otros microcontroladores, el MSP430 tambin viene provisto de interrupciones por hardware que permiten realizar diversas aplicaciones segn la caracterstica de la interrupcin que utilicemos. Podemos usar las interrupciones por ejemplo para los siguientes casos: Tareas urgentes que deben ser atendidas inmediatamente y con mayor prioridad que el cdigo principal. Tareas de poca frecuencia, como el manejo de un teclado. Esto nos libera de realizar un cdigo con bucle infinito (bucle para evaluar constantemente en el orden de microsegundos una entrada lgica). Despertar el CPU del modo Sleep. Esto es muy importante en el MSP430, ya que por lo general se lo utiliza la mayor parte del tiempo en modo de bajo consumo (low-power mode) y puede volver al modo activo (AM mode) con una interrupcin. Cuando es necesario realizar una tarea especfica con un perifrico en base a lo que ocurre en general con entradas externas y seales de control del propio perifrico.

El procedimiento de manejo de interrupciones tiene jerarquas con el fin de controlar las diferentes fuentes de interrupcin de los perifricos del MSP430 una a la vez, y de la de mayor prioridad a la de menor prioridad. Si revisamos el datasheet del MSP430x2xx, en la pgina 31, est plasmada una tabla con todas las interrupciones que soporta el microcontrolador.

Pgina 2 |

14/10/2013

Unidad Profesional Interdisciplinaria de Ingeniera Campus Zacatecas Alumnos: Gael G. Manzanares Quiones, Alan M. Martnez Lpez, Cristian A. Hernndez Orozco.

Debemos observar en esta tabla, que existen 32 posiciones de memoria tambin llamados vectores de interrupcin reservados para almacenar la direccin de los ISR correspondientes a la interrupcin que los define (tambin conocidos como los interrupt handler). Como pueden apreciar en dicha tabla, estn plasmados los 3 tipos de interrupciones del MSP430, separados por tipo y en orden descendente, donde dicho orden indica as mismo el rango de prioridad de las interrupciones, es decir la interrupcin con prioridad 31 en la posicin de memoria 0xFFFEh correspondiente con el System Reset tiene la prioridad ms alta de toda la tabla. Materiales. Tarjeta de desarrollo Launchpad de Texas Instruments revisin 1.5. 3 Resistencias de 1K y 3 Resistencias de 47K. 3 pulsadores normalmente abiertos de tipo push button. Cables para conexin a protoboard. Tablilla de prototipos protoboard. Fuente regulada de 3.3 volts y Multmetro Desarrollo. Copia el cdigo del ejemplo de clase llamado interrupciones en un nuevo proyecto de CCS IAR y Recorra el cdigo con el depurador para asegurarse de que funciona. Trate de ver el registro P1IN como cambia con el valor de la entrada y anote sus conclusiones en el reporte.

1. 2. 3.

//ejemplo interrupciones no enmascarables #include <msp430.h> #include < intrinsics.h>

Pgina 3 |

14/10/2013

Unidad Profesional Interdisciplinaria de Ingeniera Campus Zacatecas Alumnos: Gael G. Manzanares Quiones, Alan M. Martnez Lpez, Cristian A. Hernndez Orozco.
4. 5. 6. 7. 8. 9. #define LED0 BIT0 #define LED1 BIT6 #define BUTTON BIT3 int main(void){ WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer

10. P1DIR |= (LED0 + LED1); // Set P1.0 to output direction 11. P1DIR &= ~ BUTTON; // configurar la entrada

12. P1OUT &= ~(LED0 + LED1); // set P1.0 to 0 (LED OFF) 13. P1IE |= BUTTON; // P1.3 interrupt enabled 14. P1IFG &= ~BUTTON; // P1.3 IFG cleared 15. __enable_interrupt(); // enable all interrupts 16. for(;;) 17. {} 18. } 19. // Port 1 interrupt service routine 20. #pragma vector=PORT1_VECTOR 21. __interrupt void Port_1(void) 22. { 23. P1OUT ^= (LED0 + LED1); // P1.0 = toggle 24. P1IFG &= ~BUTTON; // P1.3 IFG cleared 25. P1IES ^= BUTTON; // toggle the interrupt edge, 26. // the interrupt vector will be called 27. // when P1.3 goes from HitoLow as well as 28. // LowtoHigh 29. }

En el siguiente cdigo la funcin principal es que al ejecutar la interrupcin cambia el estado lgico de los leds y del mismo botn que manda llamar la interrupcin, as pues su comportamiento es que mientras el botn este presionado se encender los leds y al soltarlo se apagaran. Las observaciones que se tuvieron es que se tuvo que implementar una resistencia de 1k externa entre el pin de alimentacin (VCC) y el p1.3 que esta configurado al botn de la placa, ya que de lo contrario con el tan solo hecho de tocar los pines cercanos al del botn se introduca ruido analgico y esto hacia que el comportamiento de los pines de salida en este caso los leds, se comportaran de una manera inestable.

Despus de implementar y depurar el ejemplo de clase proponga un nuevo programa que realice una accin sencilla como parpadeo de los leds un cierto nmero de veces controlado por una seal externa, que puede ser el botn integrado en la placa o con algn otro pulsador implementado en el puerto 1. Anote sus conclusiones en el reporte. Para todos los programas: Un interruptor cerrado representa un 0 lgico. Pgina 4 | 14/10/2013

Unidad Profesional Interdisciplinaria de Ingeniera Campus Zacatecas Alumnos: Gael G. Manzanares Quiones, Alan M. Martnez Lpez, Cristian A. Hernndez Orozco.

Un interruptor abierto representa un 1 lgico. Un led prendido representa un 1 lgico Un led apagado representa un 0 lgico.

1. 2. 3. 4. 5. 6. 7. 8. 9.

//ejemplo interrupciones no enmascarables #include <msp430.h> #include <intrinsics.h>

#define LED0 BIT0 #define LED1 BIT6 #define BUTTON BIT3 unsigned int i = 0; //Variable contador int main(void){

10. WDTCTL = WDTPW + WDTHOLD; // Desactivar el perro guardian. 11. P1DIR |= (LED0 + LED1); // Poner 12. P1DIR &= ~ BUTTON; P1.0 en la direccion de salida... Configurar como salida. // configurar la entrada

13. P1OUT &= ~(LED0 + LED1); // set P1.0 to 0 (LED OFF) 14. P1IE |= BUTTON; // P1.3 interruptor habilitado 15. P1IFG &= ~BUTTON; // P1.3 IFG limpiado 16. 17. //P1REN &= ~BUTTON; 18. 19. __enable_interrupt(); // habilitar todas las interrupciones. 20. for(;;) 21. { 22. for(i=0; i<20000; i++); 23. P1OUT ^= LED0 + LED1; 24. } 25. } 26. // Port 1 interrupt service routine 27. #pragma vector=PORT1_VECTOR 28. __interrupt void Gael(void) 29. { 30. P1OUT ^= (LED0 + LED1); // P1.0 = toggle 31. for(i=0; i<50000; i++); //Los leds perneceran inversamente durante 3 segundo en el estado logico 32. for(i=0; i<50000; i++); //en que los leds se encontraban al momento de ejecutar la interrupcin. 33. for(i=0; i<50000; i++); 34. for(i=0; i<50000; i++); 35. for(i=0; i<50000; i++); 36. for(i=0; i<50000; i++); 37. P1IFG &= ~BUTTON; // P1.3 IFG cleared 38. 39. } //Invertir el estado logico de las salidas.

Pgina 5 |

14/10/2013

Unidad Profesional Interdisciplinaria de Ingeniera Campus Zacatecas Alumnos: Gael G. Manzanares Quiones, Alan M. Martnez Lpez, Cristian A. Hernndez Orozco.

En el siguiente cdigo se modifico el comportamiento de cdigo anterior en el cual se efectuara constantemente un parpadeo de leds, y al momento de efectuar la interrupcin permanecer durante tres segundos en un estado lgico inverso al que se encontraban los leds al momento de efectuar la interrupcin. Conclusiones Con la siguiente prctica se concluyo el uso eficiente de las interrupciones como una manera optima de utilizar los recursos del microcontrolador MSP430. Y con esto implementar tarea de mayor importancia cuando lo sea necesario con el uso de interrupciones, sin preocuparnos en el estado o las tareas que est realizando el microcontrolador en ese instante, para as una vez de atender la llamada a la interrupcin contine con su estado actual de proceso de tareas.

Pgina 6 |

14/10/2013

You might also like