Utlización pines GPIO Edu-CIAA-NXP

631 views
Skip to first unread message

Mauricio Ludemann

unread,
Oct 22, 2015, 4:04:46 PM10/22/15
to CIAA-Firmware
Hola, les tengo otra consulta para alguien que tenga experiencia o pueda tener idea sobre esto

Queremos usar un pin GPIO como salida para controlar un dispositivo externo. Para esto, estuvimos leyendo en este grupo, y encontramos que para configurar el pin, necesitamos de estas dos funciones:


/*Por ejemplo, para poner el pin6_1 (GPIO0 en la placa) como salida, la configuración sería la siguiente*/
Chip_SCU_PinMux(
     6,1,
     SCU_MODE_INACT|SCU_MODE_INBUFF_EN|SCU_MODE_ZIF_DIS,
     SCU_MODE_FUNC0
   );
   Chip_GPIO_SetDir(LPC_GPIO_PORT, 6, 1, 1);

Estas funciones están definidas en "gpio_18xx_43xx.h"

Luego, para setear el estado del pin, usamos esta función:

Chip_GPIO_SetPinState(LPC_GPIO_PORT, 6, 1, flag);

El primer parámetro de esta función, es un puntero que lo encontramos en "chip_lpc43xx.h"
Ahora bien, sino lo incluimos como librería, nos tira obviamente un error porque no conoce LPC_GPIO_PORT.
Pero cuando lo incluimos, tira muchos errores en librerias que no estamos incluyendo, y que tienen que ver con I2C que claramente no estamos usando.

¿Cuál sería la forma correcta de hacer esto?

Copio parte del error que me tira

./externals/drivers/cortexM4/lpc43xx/inc/i2cm_18xx_43xx.h: In function 'Chip_I2CM_BusFree':
./externals/drivers/cortexM4/lpc43xx/inc/i2cm_18xx_43xx.h:292:15: error: 'LPC_I2C_T' has no member named 'CONSET'
  return !(pI2C->CONSET & I2C_CON_STO);
               ^
./externals/drivers/cortexM4/lpc43xx/inc/i2cm_18xx_43xx.h: In function 'Chip_I2CM_GetCurState':
./externals/drivers/cortexM4/lpc43xx/inc/i2cm_18xx_43xx.h:304:13: error: 'LPC_I2C_T' has no member named 'STAT'
  return pI2C->STAT & I2C_STAT_CODE_BITMASK;
             ^
./externals/drivers/cortexM4/lpc43xx/inc/i2cm_18xx_43xx.h: In function 'Chip_I2CM_Disable':
./externals/drivers/cortexM4/lpc43xx/inc/i2cm_18xx_43xx.h:315:6: error: 'LPC_I2C_T' has no member named 'CONCLR'
  pI2C->CONCLR = I2C_CON_I2EN;
      ^
make: *** [blinking.o] Error 1

Eric Pernia

unread,
Oct 23, 2015, 2:35:09 PM10/23/15
to Mauricio Ludemann, CIAA-Firmware
El tema es que hay que diferenciar entre los números en el nombre del pin y los números en el gpio que es, en el caso que tenés vos es:

Nombre del pin: P6_1

Configurando este pin con la Función del pin: FUNC0 corresponde al GPIO3[0]

Entonces la configuación es:

   pinNamePort = 6;
   pinNamePin  = 1;
   func        = FUNC0;
   gpioPort    = 3;
   gpioPin     = 0;

// Input
         Chip_SCU_PinMux(
            pinNamePort,
            pinNamePin,
            SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS,
            func
         );

// INPUT con PULLUP
         Chip_SCU_PinMux(
            pinNamePort,
            pinNamePin,
            SCU_MODE_PULLUP | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS,
            func
         );

// INPUT con PULLDOWN:
         Chip_SCU_PinMux(
            pinNamePort,
            pinNamePin,
            SCU_MODE_PULLDOWN | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS,
            func
         );

// INPUT con PULLUP y PULLDOWN:
         Chip_SCU_PinMux(
            pinNamePort,
            pinNamePin,
            SCU_MODE_REPEATER | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS,
            func
         );

// OUTPUT:
         Chip_SCU_PinMux(
            pinNamePort,
            pinNamePin,
            SCU_MODE_INACT | SCU_MODE_ZIF_DIS,
            func
         );

// Luego de elegir una de las de arriba para las 3 primeras va:

Chip_GPIO_SetDir( LPC_GPIO_PORT, gpioPort, ( 1 << gpioPin ), INPUT );

// Y si es salida

 Chip_GPIO_SetDir( LPC_GPIO_PORT, gpioPort, ( 1 << gpioPin ), OUTPUT );



Con eso está la configuración del pin.


Para leer o escribir:

// Escribir
   gpioPort    = 3;
   gpioPin     = 0;
   value     = 1;
Chip_GPIO_SetPinState( LPC_GPIO_PORT, gpioPort, gpioPin, value);

// Leer
   gpioPort    = 3;
   gpioPin     = 0;
value = Chip_GPIO_ReadPortBit( LPC_GPIO_PORT, gpioPort, gpioPin );



Más info:

 - Información del microcontrolador de la EDU-CIAA. <------ Datasheet del micro
 - Información de la EDU-CIAA.
 - Asignación de pines de la EDU-CIAA. <------ Mapeo de pines placa - micro, ayuda para configurar los pines.
 - Esquemático de la EDU-CIAA.


Saludos.
Eric.


--
Has recibido este mensaje porque estás suscrito al grupo "CIAA-Firmware" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a ciaa-firmwar...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/ciaa-firmware.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Eric Pernia

unread,
Oct 23, 2015, 2:37:22 PM10/23/15
to Mauricio Ludemann, CIAA-Firmware
incluyendo chip.h funciona todo:

#include "chip.h"

Pedro Araujo

unread,
Nov 13, 2016, 7:51:26 PM11/13/16
to CIAA-Firmware, mauril...@gmail.com, ericp...@gmail.com
Buenas!

Estaba siguiendo este hilo para el manejo de las GPIO. Cuando incluyo la libreria chip.h me salta este problema:



In file included from ./externals/drivers/cortexM4/lpc43xx/inc/cmsis.h:32:0,
                 from ./externals/drivers/cortexM4/lpc43xx/inc/chip.h:33,
                 from Proyecto\Robotica\src\Robotica.c:76:
./externals/drivers/cortexM4/lpc43xx/inc/lpc_types.h:205:0: warning: "INLINE" redefined
 #define INLINE inline
 ^
In file included from ./modules/rtos/inc/os.h:55:0,
                 from Proyecto\Robotica\src\Robotica.c:70:
./modules/rtos/inc/Types.h:97:0: note: this is the location of the previous definition
 #define INLINE
 ^
Makefile:491: fallo en las instrucciones para el objetivo 'Robotica.o'
make[1]: *** [Robotica.o] Error 1
make[1]: se sale del directorio '/cygdrive/c/CIAA/Firmware'
Makefile:943: fallo en las instrucciones para el objetivo 'all'
make: *** [all] Error 2



El error esta en Types.h.

Alguno sabe como arreglarlo?

Gracias
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a ciaa-firmware+unsubscribe@googlegroups.com.

Pablo Ridolfi

unread,
Nov 13, 2016, 8:45:27 PM11/13/16
to Pedro Araujo, CIAA-Firmware, mauril...@gmail.com, ericp...@gmail.com
Fijate de incluir los headers en este orden:
#include "chip.h"
#include "os.h"         /* <= operating system header */
#include "osek_blink.h" /* <= own header */


Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a ciaa-firmwar...@googlegroups.com.

Visita este grupo en http://groups.google.com/group/ciaa-firmware.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Has recibido este mensaje porque estás suscrito al grupo "CIAA-Firmware" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a ciaa-firmwar...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/ciaa-firmware.

Pedro Araujo

unread,
Nov 13, 2016, 8:54:45 PM11/13/16
to Pablo Ridolfi, CIAA-Firmware, mauril...@gmail.com, ericp...@gmail.com
Groso Pablo, ahí funcó! 

Muchas gracias!

Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a ciaa-firmware+unsubscribe@googlegroups.com.

Visita este grupo en http://groups.google.com/group/ciaa-firmware.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Has recibido este mensaje porque estás suscrito al grupo "CIAA-Firmware" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a ciaa-firmware+unsubscribe@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages