Blinky – Parpadeo del led de la placa

Bien, vamos a darle aspecto visual al asunto… así que vamos a aprovechar el led que viene en la placa y hacer el típico programa blinky para hacerlo parpadear. Introduce el siguiente código en el interior de tu bucle While que se ha creado al abrir un nuevo proyecto:

Board_LED_Toggle(0);       // blinking led
for(i=0;i<50000;i++);      // retardo

Ya sólo tienes que construir el proyecto y grabarlo en el micro. Si no lo has hecho todavía, conecta la tarjeta al USB del PC por medio del conector miniUSB del lado del LPC-Link. Ahora pulsa en el icono del martillo “Build project” y a continuación en el icono del chip “Program flash”. Busca el archivo .axf y cárgalo.

blinky 100ms

¡Enhorabuena! ya tienes tu primer programa blinky cargado en el micro y el led parpadeando. Ha sido fácil, ¿verdad? 😉

Bueno, ahora que ya has bautizado tu fantástica placa LPCXpresso, vamos a conocer mejor cómo tratar las entradas/salidas.
En la arquitectura ARM Cortex, hay que configurar cada pin de I/O como entrada o salida para trabajar con él. Una vez asignado podremos darle un valor (si es salida) o leerlo (tanto si es entrada como si es salida).
La función para configurar el sentido del pin es la siguiente:

Chip_GPIO_WriteDirBit(LPC_GPIO_PORT, PUERTO, PIN, VALOR);

En nuestro caso tenemos 2 puertos, el P0 (valor 0) y el P1 (valor 1).
En cada puerto tenemos 32 bits, esto es: Px_0 a Px_31 (valores de 0 a 31). En la placa que nos ocupa no tenemos accesibles todos los pines así que seleccionaremos los que vayamos a utilizar en función de nuestra tarjeta y de la funcionalidad interna que tenga (consultar el datasheet).
El VALOR será 0 si queremos configurarlo como entrada y 1 si queremos que sea una salida.

La función para asignar un valor a un pin de salida será de la siguiente forma:

Chip_GPIO_WritePortBit(LPC_GPIO_PORT, PUERTO, PIN, VALOR);

PUERTO y PIN se escriben igual que hemos visto para la dirección.
VALOR será 0 si queremos 0V (nivel bajo) en la salida y 1 si queremos 3.3V (nivel alto).

La función para leer un pin de entrada será:

Chip_GPIO_ReadPortBit(LPC_GPIO_PORT, PUERTO, PIN);

Nos devolverá el valor del pin correspondiente.

También podremos asignar entradas/salidas a los puertos y valores a los pines en una única instrucción con las siguientes funciones:

Chip_GPIO_SetDir(LPC_GPIO_PORT, PUERTO, PINES, VALOR);

PINES: pondremos un valor binario de 32bits con 1 en los pines que queremos asignar y 0 en los que no vamos a modificar. Normalmente lo escribiremos en hexadecimal y queda de esta forma: 0x9F800000. Con este valor, los pines que estaríamos configurando serían: 10011111100000000000000000000000. Es decir pines 0, 3, 4, 5, 6, 7 y 8.
VALOR: 0 para ponerlos como entradas y 1 para salidas.

Para poner a 1 varios pines de salida de un puerto, utilizaremos la siguiente función:

Chip_GPIO_SetValue(LPC_GPIO_PORT, PUERTO, VALOR);

VALOR: por ejemplo, si ponemos 0x00E00010 (en binario sería 111000000000000000010000) estaremos poniendo a nivel alto los pines 0, 1, 2 y 27.

Si lo que queremos es poner a 0 varios pines de salida de un puerto, utilizaremos la siguiente instrucción:

Chip_GPIO_ClearValue(LPC_GPIO_PORT, PUERTO, VALOR);

Para leer un puerto completo utilizaremos la instrucción:

Chip_GPIO_ReadValue(LPC_GPIO_PORT, PUERTO);

Con estas sencillas instrucciones ya podemos manejar de manera simple las I/O. Recuerda, primero configurar la dirección del puerto (entrada o salida) y luego el valor del pin.