You are on page 1of 14

INSTITUTO TECONOLGICO DE CIUDAD JUREZ

LABORATORIO DE INGENIERA MECATRNICA


MICROCONTROLADORES

Prctica: 6

Interrupts

Alumno: David Adolfo Serrano Martnez.

Maestro: Ing. Maximiliano Manuel Ariza Ampudia.

Nombre del equipo: XTHING

Fecha de entrega: 28 de Noviembre del 2017

Ciudad Jurez, Chihuahua a 28 de Noviembre del 2017


NDICE

I. Objetivo ............................................................................................................................ 1
1.1 Material y equipo utilizado ........................................................................................................... 1
II Introduccin terica .............................................................................................................. 1
III Desarrollo ........................................................................................................................... 3
Cuestionario .............................................................................................................................................. 3
Preguntas generales de interrupcin ..................................................................................................... 3
Rutina de servicio de interrupcin ........................................................................................................ 4
Lab 5a Push Your Button ...................................................................................................................... 6
Lab 5b Can you make a Watchdog Blink? .......................................................................................... 10
IV Conclusin .......................................................................................................................... 11
V Bibliografa.......................................................................................................................... 11
1

I. Objetivo

Crear un proyecto CCS que use una interrupcin para alternar el LE5 cuando se presiona un botn.
Esto requiere que crees: Cdigo de configuracin que habilita la interrupcin GtLO y GtLO LSR
para el botn pulsador, tambin se crear el cdigo para manejar todos los vectores de interrupcin.

1.1 Material y equipo utilizado

1 Computadora
1 MCU MSP430FR4133 LauchPad Development Kit
Code Composer Studio (con MSPWARE, libreras proporcionadas en el workshop del MSP430).

II Introduccin terica

Las prioridades de interrupcin son fijas y definidas por la disposicin de los mdulos en la cadena
de conexin, como se muestra en la Figura 1-2. Las prioridades de interrupcin determinan en qu
interrupcin se acta cuando ms de una interrupcin est pendiente simultneamente.

Hay tres tipos de interrupciones:

Reinicio de sistema

(No) enmascarable

Mscara
2

Los vectores de interrupcin se encuentran en el rango de direcciones 0FFFFh a 0FF80h, para un


mximo de 64 fuentes de interrupcin. Un vector es programado por el usuario y apunta a la
ubicacin de inicio de la rutina de servicio de interrupcin correspondiente. La Tabla 1-1 es un
ejemplo de los vectores de interrupcin que estn disponibles. Consulte la hoja de datos especfica
del dispositivo para ver la lista completa de vectores de interrupcin.

Dentro de initGPIO () hemos resaltado otras tres funciones relacionadas en rojo:

GPIO_setAsInputPinWithPullUpResistor () es necesario para configurar el pin como entrada.


En Launchpad, el hardware requiere una resistencia pull-up para completar el circuito
correctamente. Efectivamente, esta funcin configura nuestra interrupcin de "fuente".

GPIO_interruptEdgeSelect () debe usarse para configurar qu transicin de frontera (de menor


a mayor o de mayor a menor) activar una interrupcin. Esto establece bits en el registro IES del
puerto, que se dejan sin inicializar despus del reinicio.

GPIO_clearInterruptFlag () elimina el bit IFG asociado a nuestro pin (por ejemplo, P1.1). Esto
no es necesario, pero se usa comnmente justo antes de una llamada para "habilitar" una
interrupcin. Limpiara el IFG antes de configurar IE si desea ignorar cualquier evento de
interrupcin anterior; en otras palabras, por supuesto la bandera primero si solo te importan las
interrupciones que sucedern ahora o en el futuro.

Finalmente, una vez que haya habilitado cada interrupcin individual, la interrupcin global debe
estar habilitada. Esto se puede hacer de varias maneras. Los dos mtodos ms comunes usan
funciones de compilacin intrnsecas:

__bis_SR_register (GIE) ordena al compilador que establezca el bit GIE en el registro de estado
3

- bis = bit set

- SR = registro de estado

- GIE = qu bit para configurar en la SR

__enable_interrupts (void) le dice al compilador que habilite las interrupciones. El compilador


usa las instrucciones de ensamblaje EINT que ingresan 1 en el bit GIE.

III Desarrollo

Cuestionario
Preguntas generales de interrupcin

1. Cuando su programa no est en una rutina de servicio de interrupcin, qu cdigo es?


usualmente ejecutndose? Y, qu 'nombre' le damos a este cdigo?

main functions while{} loop. a menudo llamamos procesamiento de "fondo"

2. Por qu mantener el ISR corto (es decir, no hacer mucho procesamiento en ellos)?

No queremos bloquear otras interrupciones, pero esto es INEFFICIENTE. Interrumpa el


procesamiento de while {}loop ... o use el kernel TI-RTOS.

3. Qu hace que el MSP430 salga de un modo de bajo consumo (LPMx)?

Las interrupciones.

4. Por qu generalmente se prefieren las interrupciones que al polling ?

Son mucho ms eficientes. polling empata la CPU; lo que es peor, consume energa esperando
que ocurra un evento.

Flujo de interrupcin

5. Nombre 3 fuentes ms de interrupciones?

Timer A , GPIO, Watchdog interval timer, convertidor anlogo y muchos mas

6. Qu significa que ha ocurrido una interrupcin?

Se establece un bit flag.

Cul es el acrnimo de este tipo de "bits"?


4

IFG

7. Escribe el cdigo para habilitar una interrupcin GPIO para el Port.Pin listado?
PIN GPIO para usar: FR4133 = P1.2.

GPIO_setAsInputWithPullUpResistor(GPIO_PORT_1, GPIO_PIN2);

GPIO_InterruptEdgeSelect(GPIO_PORT_P1,GPIO_PIN2,GPIO_LOW_TO_HIGH_TRANSIST
ION);

GPIO_ClearInterruptFlag (GPIO_PORT_1, GPIO_PIN2);

GPIO_enableInterrupt (GPIO_PORT_1, GPIO_PIN2);

Rutina de servicio de interrupcin

8. Escriba la lnea de cdigo requerida para activar las interrupciones de forma global:

_bis_SR_set(GIE); // habilitar interrupciones globales (GIE)

Dnde, en nuestros programas, es el lugar ms comn donde vemos a GIE habilitado?

A la derecha antes de while{}loop en main().

Prioridades y vectores de interrupcin

9. Verifique la interrupcin que tiene mayor prioridad:

FR4133

GPIO Puerto 2: int36

WDT Interval Timer: int49

Digamos que su CPU est en el medio del GPIO Port 2 ISR, puede ser interrumpido por
una nueva interrupcin de temporizador de intervalo WDT? Si es as, hay algo podras
hacer con tu cdigo para permitir que esto suceda?

No, es por default, Los interruptores MSP430 son deshabilitados cuando se ejecuta un ISR. para
habilitar esto, puede configurar el anidamiento de interrupcin (aunque esto no se recomienda).

10. Dnde encuentras el nombre de un "vector de interrupcin"?

Su definicin en el archivo de encabezado especfico del dispositivo, por ejemplo:

msp430fr4133.h
5

11. Cmo se escribe el cdigo para configurar el vector de interrupcin?

// Establece la direccin ISR en el vector para el Puerto 1

#pragma vector=PORT1_VECTOR

interrupt void pushbutton_ISR (void)

{GPIO_toggleOutputOnPin (GPIO_PORT_P1, GPIO_PIN0); }// Activa / desactiva el LED

Qu pasa con el puerto GPIO ISR?

Los puertos del GPIO son interruptores agrupados. Es mejor para leer el registro P1IV que puede
encargarse de multiples pines de interrupcin usando estados de switch/case.

12. Cmo transfiere un valor a (o sale de) e interrumpe la rutina de servicio (ISR)?

Los interruptores no pueden pasar argumentos, necesitas usar una variable global.

Como aprendimos anteriormente, la mayora de las interrupciones MSP430 estn agrupadas. Por
ejemplo, las interrupciones del puerto GPIO estn todas juntas.

13. Para interrupciones dedicadas (como el temporizador de intervalo WDT), la CPU borra
el indicador IFG al responder a la interrupcin. Cmo se borra un bit IFG para
interrupciones grupales?

Ya sea manualmente, o cuando lees el registro IV(como P1IV).

14. Crear ISR para interrupciones agrupadas es tan fcil como seguir una 'plantilla'.

Alternar P1.0 cuando se presiona el botn. F5529 / FR5969 usa P1.1;

#pragma vector=PORT1_VECTOR

__interrupt void pushbutton_ISR (void) {

switch(__even_in_range( P1IV, 0x10 ))

// Cw 4311 uses t1.2 for button:

case 0x02: break; // Pin 0

case 0x04: break; // Pin 1


6

Lab 5a Push Your Button


7

Anteriormente se mostr el cdigo implementado para la configuracin inicial de las


interrupciones a utilizar que en este caso es un solo push button (P1.2), por lo que para estar seguros
que nuestra configuracin fue la correcta primeramente se agregan 2 breakpoints como se mostr
anteriormente en el cdigo finalmente al compilar y depurar el cdigo al presionar el botn el
programa se detiene en el primer breakpoint y al presionar por segunda vez al segundo breakpoint
pero llega un punto en el cual entra en un ciclo infinito que con unas modificaciones posteriores
se corregir.

Ahora bien si no estamos seguros de lo que est pasando, nos vamos a los registros donde
podremos ver si en verdad se est detectando una interrupcin observando los valores de P1IE y
GIE cambiando su valor de 0 a 1 al haber una interrupcin.
8

Enseguida se modifica la funcin: __interrupt void pushbutton_ISR (void), esto con el fin de
manipular que hacer al detectar una interrupcin por el mismo botn, el codigo modificado es el
siguiente:
9

Finalmente quitamos todos los breakpoints, compilamos, depuramos y damos click en run, para
posteriormente presionar el botn y visualizamos que el LED prende y al presionar nuevamente,
el LED se apaga.
10

Lab 5b Can you make a Watchdog Blink?


Al importar correctamente el proyecto como se mostr en el workshop, se obtuvo el codigo main
siguiente:

Compilamos, depuramos y damos click en run y visualizamos que el LED prende y apaga en un
intervalo de tiempo que puede ser modificado con los clockdivider dentro del cdigo.
11

IV Conclusin

Al realizar esta prctica se aplicaron conocimientos de configuracin de interrupcin para la


optimizacin de energa que con ms detalle se vern en las posteriores prcticas, pero cabe
destacar que lo ms relevante que se obtuvo fue el dejar de utilizar polling para aligerar al CPU
para que cuando se hagan programas ms extensos al implementar interrupciones se cuente con un
tiempo de respuesta rpido del CPU.

V Bibliografa
www.ti.com

Datasheet.
Users guide.
Workshop.

You might also like