Me esta sucediendo algo extraño con el puerto serie/PLL
Voy por pasos, pude adquirir este mini-modulo:
http://cgi.ebay.com/NXP-LPC2132-Mod...ltDomain_0?hash=item58860922e2#ht_2615wt_1242
Para la programacion del mismo utilizo el LPC2000 Flash utility v2.2.3 usando el puerto serie (Uart0), para lo cual use un max 232, y 2 pulsadores (1 para el reset y otro para la Eint1 - P0.14). A la hora de programarlo no tengo ningun inconveniente, el LPC2000 lo detecta e inclusive lo graba correctamente (o eso es lo que me indica al finalizar), tambien pude comprobar la integridad del programa comparando el cargado en la flash, con el que tengo en el dico rigido.
Pero mi inconveniente esta en que no puedo hacer funcionar bien el puerto serie en mi programa, a la hora de conectarme a traves del hyperterminal o el programita terminal, el codigo parece ejecutarse bien, pero los datos que recibo son malos, como si la velocidad del puerto estuvieran mal configurados, porque si pudo programar sin problemas usando el mismo puerto, solo queda que yo me haya equivocado en algo.
Entonces mi duda es si estara bien configurado el bendito PLL y como hago en todo caso para deshabilitarlo.
Este es mi codigo:
Como se ve, el codigo es simple e inclusive uso el puerto serie como pulling (para facilitar el ejemplo).
Si uso el debug del keil (en forma de simulacion), todo queda bien configurado y la simulacion es correcta. Si uso el proteus, la simulacion tambien es buena, aunque me tira un error de que el cclk estaria a 73MHz (13 MHz mas de lo que soportaria el uC), sin embargo la comunicacion la realiza 2400 baudios sin problemas.
Cuando lo hago en la practica, sucede el error antes mencionado, como si la comunicacion fuera a una velocidad incorrecta.
Voy por pasos, pude adquirir este mini-modulo:
http://cgi.ebay.com/NXP-LPC2132-Mod...ltDomain_0?hash=item58860922e2#ht_2615wt_1242
Para la programacion del mismo utilizo el LPC2000 Flash utility v2.2.3 usando el puerto serie (Uart0), para lo cual use un max 232, y 2 pulsadores (1 para el reset y otro para la Eint1 - P0.14). A la hora de programarlo no tengo ningun inconveniente, el LPC2000 lo detecta e inclusive lo graba correctamente (o eso es lo que me indica al finalizar), tambien pude comprobar la integridad del programa comparando el cargado en la flash, con el que tengo en el dico rigido.
Pero mi inconveniente esta en que no puedo hacer funcionar bien el puerto serie en mi programa, a la hora de conectarme a traves del hyperterminal o el programita terminal, el codigo parece ejecutarse bien, pero los datos que recibo son malos, como si la velocidad del puerto estuvieran mal configurados, porque si pudo programar sin problemas usando el mismo puerto, solo queda que yo me haya equivocado en algo.
Entonces mi duda es si estara bien configurado el bendito PLL y como hago en todo caso para deshabilitarlo.
Este es mi codigo:
Código:
#include <LPC213x.h>
#define TEMP (1<<6)
#define DEMP (1<<0)
#define PLOCK (1<<10)
void PLL_config()
{
VICIntEnable=0x0; // Deshabilito cualquier interrupcion
PLLCFG=0x60; // P=8 -- M=1 => Cclk=14,7465MHz*M=14,7465MHz Fcco=cclk*2*P=235,.. MHz - Segun el datasheet hasta aca iria bien la config.
PLLFEED = 0xAA;
PLLFEED = 0x55;
PLLCON = 0x01;
PLLFEED = 0xAA;
PLLFEED = 0x55;
while (!(PLLSTAT & PLOCK)); // Espero hasta que se asegure el PLL
PLLCON = 0x03; // Habilito el PLL
PLLFEED = 0xAA;
PLLFEED = 0x55;
VPBDIV=0x00; // FPclk=fosc/4
}
void serie_config()
{
U0LCR=0x83; // Dlab en 1 y 8 bits de datos
U0DLL=0x60; // usando cristal de 14,7465MHz, para obtener 2400 baudios => Divisor= 96 => 0x0060
U0DLM=0x00;
U0LCR=0x03; // Dlab en 0
}
int main(void)
{
unsigned char flag=0;
PLL_config();
PINSEL0=0x00000005; // PIN 0= TXD0 y PIN 1= RXD0
PINSEL1=0;
serie_config();
U0THR=0x61;
while(1)
{
if(U0LSR&DEMP)
{
if(U0RBR==0x73)
{
if(flag==1)
flag=0;
else
{flag=1; U0THR=0x61;}
}
}
if((U0LSR&TEMP)&&flag)
{
U0THR=0x61;
}
}
}
Como se ve, el codigo es simple e inclusive uso el puerto serie como pulling (para facilitar el ejemplo).
Si uso el debug del keil (en forma de simulacion), todo queda bien configurado y la simulacion es correcta. Si uso el proteus, la simulacion tambien es buena, aunque me tira un error de que el cclk estaria a 73MHz (13 MHz mas de lo que soportaria el uC), sin embargo la comunicacion la realiza 2400 baudios sin problemas.
Cuando lo hago en la practica, sucede el error antes mencionado, como si la comunicacion fuera a una velocidad incorrecta.