TODOPIC
Otros Microcontroladores / Dispositivos programables => Microcontroladores ARM => Mensaje iniciado por: pablolode en 23 de Octubre de 2010, 18:09:03
-
Hola amigos estoy iniciando practicas con LPCXpreso ,vengo de las PICs y es como empesar de 0¡¡¡
estoy analiszando las librerias que trae como practicas y algunas lineas no comprendo muy bien estoy con el proyecto de comfiguracion de puertos GPIO.
static __INLINE void GPIOSetDir( uint32_t portNum, uint32_t bitPosi, uint32_t dir )
{
if(dir)
LPC_GPIO[portNum]->DIR |= 1<<bitPosi; /// ESTA LINEA en concreto
else
LPC_GPIO[portNum]->DIR &= ~(1<<bitPosi);
}
-
Por lo visto los puertos los trabaja mediante arreglos de estructuras, donde uno de sus elementos es la dirección (Entrada o salida). Lo único que hace es seleccionar el puerto como indice, luego accede al elemento DIR y modifica un bit aplicando una mascara para forzar su valor a 0 o a 1. ( | o & )
bitPosi indica el bit del puerto a modificar y lo utiliza para rotar hasta esa posición el 0 o 1 y formar la mascara a implementar.
Saludos!
-
static __INLINE void GPIOSetDir( uint32_t portNum, uint32_t bitPosi, uint32_t dir )
{
if(dir)
LPC_GPIO[portNum]->DIR |= 1<<bitPosi; /// ESTA LINEA en concreto
else
LPC_GPIO[portNum]->DIR &= ~(1<<bitPosi);
}
Espera que le envies el nro de puerto, la posicion del bit y la direccion del mismo, lo que hace la linea que señalas es "correr" un 1 tantas veces como el nro de la posicion. Es confuso para el que viene de pic pero mucho mas claro para los de avr o otras arquitecturas donde hubo ansi c desde el principio.
No desanimes que es una pavada y le vas a encontrar la logica muy pronto!
pd: parece que Suky y yo contestamos al mismo tiempo :)
-
ajah!!!!
entonces con la funcion
**********************************************
/* use port0_1 as input event, interrupt test. */
GPIOSetDir( PORT0, 1, 0 );
//le digo que el puerto 0, el bit 1, y 0 que indica que es un pin configurado como salida
static __INLINE void GPIOSetDir( uint32_t portNum, uint32_t bitPosi, uint32_t dir )
{
if(dir)
LPC_GPIO[portNum]->DIR |= 1<<bitPosi; /// ESTA LINEA en concreto
else
LPC_GPIO[portNum]->DIR &= ~(1<<bitPosi);
}
**********************************************
entonces la funcion lo que hace es configurar el pin como salida???
escomo hacer un EN CCS con pic
bit_set(TRISB,0)// pongo b0 como entrada
-
Hola pablo.
Efectivamente eso es lo que hace. Muy similar a lo que mencionás en CCS.
-
Estas trabajando con las librerías, seria bueno que primero comenzaras con las definiciones del hardware lpc13xx.h para que te guíes con el pdf del micro si es posible usar asm. Y despues vas a la librerías.
-
Estas trabajando con las librerías, seria bueno que primero comenzaras con las definiciones del hardware lpc13xx.h para que te guíes con el pdf del micro si es posible usar asm. Y despues vas a la librerías.
uff¡¡, si tengo que arrancar con ASM esto es mas complicado de lo que pensaba, toy mas perdido que turco en la neblina :? no habra por ahi algun ejemplito sensillo de parpadear un led ,comunicacion rs232...?
-
Tranquilo. Hay que ir despacio para no entrar en pánico.
Con qué entorno estás trabajando? Imagino que será Code Red. Fijate que trae programitas de ejemplo.
Por las dudas primero andá al menú Windows -> Reset Perspective _> Ok.
Luego abajo a la izquierda aparece una solapa llamada "QuickStart". Su primer ítem es Import Example Project(s). Hacé click ahí, luego Browse y entrá a la carpeta LPC1000 y dirigite a la subcarpeta LPC13xx. Ahi dentro hay 3 carpetas. Dos de ejemplos y una del CMSIS(que es un conjunto de definiciones y convenciones estandarizadas en ARM para unificar el código aún estando ante distintas marcas de uC con core ARM).
La ruta del ejemplo mia es la siguiente: C:\nxp\lpcxpresso_3.4\Examples\LPC1000\LPC13xx\LPCXpresso1343.zip
el asistente te va a mostrar muchos ejemplos que hay en ese zip. Eleji el blinky, y destilda el resto, excepto el LPC13xx_Lib que creo que vas a necesitar para el blinky.
Cuando lo compiles y debuguees deberias ver el LED de la LPCxpresso parpadear...
Saludos.
-
ah¡¡ buenisimo :o¡¡¡¡ahora si se pone mas interesante la cosa¡¡¡¡¡¡¡¡
me surgen unas dudas
**********************
LED_TOGGLE_TICKS=100;
------------------------------
if ( (timer32_0_counter%LED_TOGGLE_TICKS) < (LED_TOGGLE_TICKS/2) ) ??????
****************************************************
1)aqui cada ves que el contador de tics pasa los 50 enciende o apaga el led, cual es la cuenta que hace esta comparacion??
2)seria lomismo hacer que cada ves que cuente 50 tics resetear el contador y encender o apagar??
-
Si.
La variable timer32_0_counter debe incrementarse dentro de la interrupcion del Timer0.
El resto son sólo cálculos. En ese caso lo que hace es determinar y aplicar el período(100 ticks del timer0) y duty de trabajo del mísmo, que es del 50% en ese caso.
Saludos.
-
ok ,gracias
sigo avansando con estos ejemplos ahora stoy con la usart que hace un eco desde el hiperterminal pero veo que si le agrego un
#include <stdio.h>
printf ("hola...\n");
no lo envia por hiperterminal sino a la consola de npxepreso???
y si desconecto eldebuger se cuelga,no es asi si solo lo trabajo como eco.
-
la funcion printf, solo funciona para la hiperterminal, ignoro si se puede cambiar desde el compilador, pero en ese mismo ejemplo, utilizan una funcion para imprimir en la uart, y si quieres las ventajas del printf, utilize el sprintf para convertir alguno numero a cadenas, saludos
-
mm..no entiendo por que no imprime una simple cadena de caracteres por el hiperterminal ???, en cambio si lo imprime en la consola del LPCExpreso...
he revisado el manual de ANSI C y es un programa muy simple,imprimir una caden de caracteres,
alguna sugerencia compañeros???
-
si envio la cadena mediante esta funcion UARTSend:
********************
UARTSend("hola",4);
*******************
la envia por la usart pero no me reconoce las comandos: \n,\r
sera que tengo que desarollar una funcion para esto??
-
hola, si quisieras mandar hola con el salto de carro, tendrias que enviar
UARTSend("hola\r",5);
-
Depende de compilador que uses de define la funcion de impresion del un caracter funcion comumente conocida putchar(...), y para keil se llama.
"int fputc(int ch, FILE *f)" para que funcione la funcion printf(...).
-
estoy usando directamente el LPCEXpreso para compilar y efectivamente con esta linea
UARTSend("hola\r\n",6);
hace un salto ,buenisimooo¡¡¡¡¡¡¡¡¡