You are on page 1of 8

Interrupciones

Prctica No. 2
Villalobos Resendez Sofa Danah
14100297
Resumen del mdulo

NVIC Nested Vectore Interrupt Control

Dependiendo de la aplicacin que utiliza el fabricante de silicio, el NVIC


puede soportar hasta 240 interrupciones externas con hasta 256 niveles de
prioridad diferentes que se pueden re-priorizados dinmicamente. Es
compatible con fuentes tanto nivel y de interrupcin del pulso.

El estado del procesador se guarda automticamente por el hardware de


entrada de interrupcin y se restaura al salir de interrupcin. El NVIC tambin
apoya la cola en cadena de interrupciones.

La tabla de vectores de Cortex-M contiene la direccin de los manipuladores


e ISR de excepcin.

Las interrupciones son utilizadas para minimizar los recursos del sistema, es
decir, la aplicacin est a la espera de que se produzca un determinado
evento para interrumpir la misma y realizar una serie de funciones
especficas. Las funciones se proporcionan para habilitar y deshabilitar las
interrupciones, para el registro de los controladores de interrupcin y para
establecer su prioridad.

Cuando el procesador responde a una interrupcin, el NVIC suministra


directamente la direccin de la interrupcin al procesador, por lo que se
elimina la necesidad de un controlador de interrupciones global que consulte
al controlador de interrupciones la causa de la misma y el desvi de esta
hacia el controlador adecuado, ahorrando as, tiempo de respuesta del
sistema.

Todas las interrupciones por defecto tienen asignada la prioridad 0, que


equivale a la mxima prioridad. Si se asigna el mismo nivel de prioridad a dos
o ms interrupciones, su prioridad ser dada de forma hardware, es decir,
segn su posicin en el vector de interrupciones. Por ejemplo, si el GPIO del
Puerto A y B estn configuradas con el mismo nivel de prioridad 1, entonces
el GPIO del Puerto A ser considerado como la de mayor prioridad.

Interrupciones

La tarjeta de desarrollo KL25 cuenta con 48 fuentes de interrupcin, de las


cuales 16 se reservan para el core y las 32 restantes para los perifricos,
estos ltimos pueden generar seales de IRQ.

Los registros de configuracin de una interrupcin son los siguientes:

ISER Interrupt Set Enable (Habilita la interrupcin)


ICER Interrupt Clear Enable (Deshabilita la interrupcin)
ISPR Interrupt Set Pending Register (Forza al NVIC a la interrupcin)
ISCPR Interrupt Clear Pending Register (Limpia la bandera)
IABR Interrupt Active Bit Register (Indica interrupciones activas)
IP Interrupt Priority (Prioridad de la interrupcin)
STIR Software Trigger Interrupt Register (Habilita interrupciones por
software)

Referencias:

http://cidecame.uaeh.edu.mx/lcc/mapa/PROYECTO/libro20/25_el_nvic_y_el
_control_de_interrupcin_nested_vectored_interrupt_controller.html

Reference Manual KL25


Descripcin del programa

Con interrupciones por medio de vectores de interrupcin se hace toggle al


LED azul del RGB con el que cuenta la tarjeta y se pregunta al usuario qu LED
desea encender con una interfaz serial como es Teraterm por medio de tres
letras distintas R, G y B para LED rojo, LED verde y LED azul respectivamente.
El programa principal debe ser interrumpido durante el menor tiempo
posible. Se habilitan y configuran las dos interrupciones necesarias, en este
caso ambas son externas. Se crean las rutinas de interrupcin. Se deja el
programa ciclado con su cdigo especfico, esperando porque una condicin
se cumpla y por las interrupciones.
Diagrama de flujo

Programa principal
Interrupcin 1

Interrupcin 2

Cdigo del programa


//PRACTICA 2

unsigned char letra[2]; //Variable que guarda la letra ingresada


unsigned char a; //Variable para control

int main(void)
{
/* Init board hardware. */
BOARD_InitPins();
BOARD_BootClockRUN();
BOARD_InitDebugConsole();

// Habilitacin y Configuracin como GPIO del puerto A


SIM->SCGC5 |= SIM_SCGC5_PORTA_MASK;
PORTA->PCR[13] = PORT_PCR_IRQC(0x0A) | PORT_PCR_MUX(1) | PORT_PCR_PE_MASK;
GPIOA->PDDR &= ~(1<<13);

// Habilitacin y Configuracin como GPIO del puerto D


SIM->SCGC5 |= SIM_SCGC5_PORTD_MASK;
PORTD->PCR[2] = PORT_PCR_IRQC(0x0A) | PORT_PCR_MUX(1) | PORT_PCR_PE_MASK;
GPIOD->PDDR &= ~(1<<2);

EnableIRQ(30); //Habilita interrupcin externa en puerto A


EnableIRQ(31); //Habilita interrupcin externa en puerto D

SIM->SCGC5|=SIM_SCGC5_PORTD_MASK;
PORTD->PCR[1]=PORT_PCR_MUX(1);
GPIOD->PDDR|=(1<<1); //Habilitacin y Configuracin pin LED AZUL
GPIOD->PSOR|=(1<<1);

SIM->SCGC5|=SIM_SCGC5_PORTB_MASK;
PORTB->PCR[19]=PORT_PCR_MUX(1);
GPIOB->PDDR|=(1<<19); //Habilitacin y Configuracin LED VERDE
GPIOB->PSOR|=(1<<19);

PORTB->PCR[18]=PORT_PCR_MUX(1);
GPIOB->PDDR|=(1<<18); //Habilitacin y Configuracin LED ROJO
GPIOB->PSOR|=(1<<18);

while(1){ //Ciclo infinito


if(a==1) //Condicin para interrupcin 2
{ //Cdigo de pregunta para encender LED interrupcin 2

PRINTF("Dame una letra: R, G o B\n\r");


SCANF("%s", &letra);

if ((letra[0] == 'R')|(letra[0] == 'r')){


PRINTF("Elegiste ROJO\n\r"); //LED ROJO
GPIOB->PTOR|=(1<<18);}
else if ((letra[0] == 'G')|(letra[0] == 'g')){
PRINTF("Elegiste VERDE\n\r"); //LED VERDE
GPIOB->PTOR|=(1<<19);}
else if ((letra[0] == 'B')|(letra[0] == 'b')){
PRINTF("Elegiste AZUL\n\r"); //LED AZUL
GPIOD->PTOR|=(1<<1);}
else {PRINTF("ERROR\n\r");}

a=0;
}
}
}
void PORTA_IRQHandler (void) //Rutina de interrupcin toggle de LED
{
GPIOD->PTOR|= (1<<1); //Toggle LED azul
PORTA->ISFR |= (1<<13); //Apagado de bandera
}
void PORTD_IRQHandler (void) //Rutina de interrupcin pregunta LED
{
a=1; //Cambio variable de control
PORTD->ISFR |=(1<<2); //Apagado de bandera }
Conclusiones

En esta prctica se logr la configuracin y habilitacin de interrupciones


externas, que con el reference manual fue en lo personal muy sencillo,
adems de conocer la importancia de limpiar la bandera de interrupcin para
que el programa no se quede por siempre en la interrupcin, si no
nicamente cuando se presion alguno de los dos push buttons, en general la
prctica me pareci fcil, una aplicacin para las interrupciones externas
podra ser la utilizacin de sensores infrarrojos para la cuenta de las personas
que entran y salen de un saln y as tener un control de ello.

You might also like