You are on page 1of 7

GPIO

Villalobos Resendez Sofa Danah

14100297
Resumen del mdulo

MDULO GPIO

Sus siglas en ingls son General Purpose Input-Output lo que en espaol


significa Entrada-Salida de Propsito General.

Este mdulo se utiliza para programar pines genricos en ciertos chips, por
medio de la programacin podemos definir varias caractersticas del pin,
como s ser utilizado como entrada o como salida.

Los pines GPIO no tienen ningn propsito especial definido, y no se utilizan


de forma predeterminada. La idea es que a veces, para el diseo de un
sistema completo que utiliza el chip podra ser til contar con un puado de
lneas digitales de control adicionales, y tenerlas a disposicin ahorra el
tiempo de tener que organizar circuitos adicionales para proporcionarlos.

EN LA FRDM KL25

El mdulo GPIO en la tarjeta de desarrollo KL25 comunica al procesador con


el core a travs de una interfaz que por lo general est en estado de espera
para lograr obtener el mayor rendimiento del pin.

Los registros de GPIO aceptan accesos de 8 bits, 16 bits y 32 bits. El mdulo


GPIO est sincronizado con el reloj del sistema (system clock).

Los registros data direction y data output register controlan la direccin


y el dato de salida cuando el pin est configurado con GPIO respectivamente,
el registro data input register permite saber cul es el dato de entrada en el
pin configurado con GPIO. Siempre y cuando est habilitado el mdulo de
control correspondiente para ese pin.
Para un manejo eficiente de un pin con GPIO, se establecen funciones como:

Clear, que manda un 0 a ese pin (borrar).


Set, que manda un 1 al pin (establecer).
Toggle, que cambia el valor a su contrario (complemento).

Estas funciones se encuentran en registros que solo son de escritura y hay un


registro para cada uno de los puertos.

Los puertos A, B, C, D y E con sus pines del 0 al 31 pueden configurarse con el


mdulo GPIO como entradas o salidas.

Los registros para configurar GPIO son:

GPIOX_PDDR permite la configuracin del puerto como salida o


entrada se escribe 1 para salida y 0 para entrada (registro de lectura y
escritura)
GPIOX_PDOR permite leer o escribir datos en el puerto cuando se usa
como salida (registro de lectura o escritura)
GPIOX_PCOR vuelve los datos del puerto a 0 lgico (registro solo de
escritura)
GPIOX_PSOR vuelve los datos del puerto a 1 lgico (registro solo de
escritura)
GPIOX_PTOR vuelve los datos del puerto a su complemento (registro
solo de escritura)
GPIOX_PDIR permite leer los datos del puerto cuando se usa como
entrada (registro solo de lectura)

*X se refiere a cualquier puerto A, B, C, D o F

Hay un registro de cada uno para cada puerto y se pueden configurar los
pines del puerto 1 por 1, es muy importante recalcar que como la KL25 es
una tarjeta de low power lo cual quiere decir que se intenta requerir de la
menor energa para trabajar, algunos mdulos entre ellos el GPIO estn en
modo ahorro de energa por lo que no se podrn utilizar s no programamos
antes de las configuraciones de GPIO que se habilite el reloj en los puertos.
Descripcin del programa

El programa realizado para la prctica consiste en preguntar al usuario qu


color del LED RGB que se encuentra en la tarjeta de desarrollo desea
encender segn la letra ingresada (R, r para LED ROJO. G, g para LED VERDE.
B, b para LED AZUL) por medio de TERATERM, de no ser alguna de las letras
indicadas deber imprimirse un error y el LED no se apagar hasta que el
usuario ingrese de nuevo la letra correspondiente al LED.

Primero se configurar el clock gating de los puertos a utilizar (PORTB y


PORTD que son los puertos donde se encuentran conectadas las terminales
del LED RGB), despus se deber configurar el mdulo GPIO de cada uno de
los puertos (s es entrada o salida, s estar en 0 o 1), especficamente de los
pines a usar (PB18, PB19 y PD1) inicialmente se tendr un estado lgico a la
salida de 1 para que ningn LED encienda, luego se utilizar el comando
printf para preguntar al usuario y especificar qu letra ser para cada color,
seguido del comando scanf para recuperar la letra que ha indicado el usuario,
despus se deber comparar la letra ingresada para saber qu LED se deber
encender o apagar segn sea el caso para ello anteriormente se pusieron los
pines en 1 lgico para que no encendiera ninguno, una vez que el usuario
comienza a ingresar datos, la salida se complementar usando un toggle.
Diagrama de flujo
Cdigo

//PRCTICA 1
unsigned char letra[2];
SIM->SCGC5|=SIM_SCGC5_PORTB_MASK;
//Se manda clock al puerto B
PORTB->PCR[18]=PORT_PCR_MUX(1);
//Se configura como MUX el pin 18 del puerto B
GPIOB->PDDR|=(1<<18);
//Se asigna direccion de salida al pin 18 puerto B
GPIOB->PSOR|=(1<<18);
//Se pone en SET el pin 18 puerto B para asegurar que no se encienda el LED ROJO

PORTB->PCR[19]=PORT_PCR_MUX(1);
//Se configura como MUX el pin 18 puerto B
GPIOB->PDDR|=(1<<19);
//Se asigna pin como salida
GPIOB->PSOR|=(1<<19);
//Se pone en SET el pin para asegurar que no encienda el LED VERDE

SIM->SCGC5|=SIM_SCGC5_PORTD_MASK;
//Se manda clock puerto D
PORTD->PCR[1]=PORT_PCR_MUX(1);
//Se configura como MUX el pin 1 puerto D
GPIOD->PDDR|=(1<<1);
//Se asigna pin como salida
GPIOD->PSOR|=(1<<1);
//Se pone en SET el pin para asegurar que no encienda el LED AZUL

for(;;){ //Ciclo infinito


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);}
//Se Togglea el pin conectado al LED

else if ((letra[0] == 'G')|(letra[0] == 'g')){


PRINTF("Elegiste VERDE\n\r"); //LED VERDE
GPIOB->PTOR|=(1<<19);}
//Se Togglea el pin conectado al LED

else if ((letra[0] == 'B')|(letra[0] == 'b')){


PRINTF("Elegiste AZUL\n\r"); //LED AZUL
GPIOD->PTOR|=(1<<1);}
//Se Togglea el pin conectado al LED
else {PRINTF("ERROR\n\r");}}
Conclusiones

En esta prctica se logr realizar el programa requerido, aunque al inicio se


tuvieron ciertos problemas al reconocer el caracter de entrada debido a que
teraterm cuando se ingresa un dato por medio del teclado nos regresa
siempre el dato seguido de un caracter nulo por lo que nunca entraba a la
comparacin para saber de qu LED se hara el Toggle, una vez resuelto este
inconveniente el IDE no me permiti hacer el Debug con la tarjeta en todo lo
que rest de la clase por lo que le tuvo que entregar otro da.

You might also like