Donar $20 Donar $50 Donar $100 Donar mensualmente
 


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
Ayuda UART1 LPC1769
Autor Mensaje
Stille Sin conexión
Empleado de Fotocopiadora
Sin estado :(
**

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 27
Agradecimientos dados: 1
Agradecimientos: 8 en 8 posts
Registro en: Mar 2011
Mensaje: #1
Ayuda UART1 LPC1769 Dudas y recomendaciones Informática II (Electrónica)
Hola buenos dias, les comento que para mi proyecto necesito usar la UART1 para enviar y recibir datos.
Lo que intento hacer es simplemente poner U1THR=0x47; o cualquier otro hexa, y que se me imprima el ascii en el hyperterminal, para ver si esta vivo.
La cuestión es que cuando debugeo la inicialización, aparentemente todas las variables se setean correctamente. Pero cuando quiero hacer U1THR=0x47, luego de esa linea U1THR sigue valiendo 0 y no 0x47 como deberia, aclaro que baje el DLAB=0 para que no me escriba en el registro de los Divisor latches sino en el THR propiamente dicho.
Jamás me llegan los datos al hyperterminal, configurado apropiadamente según entiendo. El hardware también lo esta (cable cruzado, masas unidas). Calculo que el problema será de soft por que no estoy pudiendo escribir el THR, alguna sugerencia?, adjunto el codigo de la función de inicialización.


void init_uart1(void)
{
pin_config(0,15,1); //TX de UART1
pin_config(0,16,1); //RX de UART1

PCONP|=0x01<<4; //enciendo la uart en el PCONP
PCLKSEL0&=~(0x03<<8); //seteo el PCLK en CCLK/4 (25Mhz)

U1LCR=0x083; //seteo DLAB=1, sin paridad, 1 bit de stop, 8bit de datos
U1DLM=0; //seteo el MSB del divisor latch en 0x00
U1DLL=0xA3; //seteo el LSB del divisor latch en 163, para un baudrate=9600
U1LCR=0x03; //DLAB=0
}


desde ya muchas gracias y saludos!.-
28-10-2013 12:19
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
AndresDemski Sin conexión
Militante
Ayudante Informatica 2
***

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 75
Agradecimientos dados: 1
Agradecimientos: 12 en 9 posts
Registro en: Aug 2011
Facebook
Mensaje: #2
RE: Ayuda UART1 LPC1769
Cuando leas el THR nunca vas a leer nada, ya que si te fijas la misma posicion de memoria esta compartida para la fifo de lectura y la de escritura. Cuestion, siempre vas a leer la de lectura.
Los problemas pueden ser varios:
1) Mala configuracion de velocidad (de los dos lados se debe tener el mismo baudrate)
2)Configuracion de paridad y stop bit. (Fijate que este bien bien en el hiperterminal tambien)
3) Hard: Si estsa trabajando con el integrado QFN (el dificil de soldar) tene cuidado que yo tenia problema en la pata de UartTx por ejemplo.
4) Iniciaste el PLL? sino la frecuencia de trabajo del uC esta en 4 mhz y el divisor de 4 te la deja en 1Mhz y con el DLM y el DLL se reduce mucho.
5) Cualquier cosa que no sea eso avisame que te tiro mi inicializacion.
28-10-2013 19:49
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Stille Sin conexión
Empleado de Fotocopiadora
Sin estado :(
**

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 27
Agradecimientos dados: 1
Agradecimientos: 8 en 8 posts
Registro en: Mar 2011
Mensaje: #3
RE: Ayuda UART1 LPC1769
Gracias por la respuesta, te comento que con "leer" me referia a ver el valor actual de la variable en el debuger, pero igual creo que para verlo hace una lectura del registro, asi que seguramente estes en lo cierto. Por todo lo demas, no uso el CP2102 sino el serie directo del max232 (tengo puesto el dip sw para ese) y el puerto serie nativo en la pc de escritorio. En el hyperterminal tengo seteado todo de forma identica a la cual lo setie en el uC. También tengo inicializado el PLL.
Ya me desespero no se que mas hacer (?) jjaja
28-10-2013 23:36
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
AndresDemski Sin conexión
Militante
Ayudante Informatica 2
***

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 75
Agradecimientos dados: 1
Agradecimientos: 12 en 9 posts
Registro en: Aug 2011
Facebook
Mensaje: #4
RE: Ayuda UART1 LPC1769
Aca te paso mi inicializacion, es para la uart 0:


void Init_UART0(uint32_t baudrate)
{
uint32_t Fdiv;

SetPinSel(U0TX,1);
SetPinSel(U0RX,1);

PCONP |= 0x01<<3;
PCLKSEL0 &= ~(0x03<<6); //25Mhz

UART0.LCR = (uint8_t) 0x83; /* 8 bits, no Parity, 1 Stop bit */
Fdiv = ( 25000000 / 16 ) / baudrate ;
UART0.DLM = Fdiv / 256;
UART0.DLL = Fdiv % 256;

UART0.LCR = 0x03; /* DLAB = 0 */

UART0.LCR = (uint8_t) 0x03;
UART0.FCR = 0x07; /* Enable and reset TX and RX FIFO. */
UART0.IER = 0x03; /*Habilito irq*/
NVIC_IrqEnable(IRQ_UART0); /*La avilito en el Nvic*/
}



Te paso el define mio de UART0, por ahi te es mas facil hacerlo asi:



typedef struct
{
union {
__R uint8_t RBR;
__W uint8_t THR;
__RW uint8_t DLL;
uint32_t RESERVED0;
};
union {
__RW uint8_t DLM;
__RW uint32_t IER;
};
union {
__R uint32_t IIR;
__W uint8_t FCR;
};
__RW uint8_t LCR;
uint8_t RESERVED1[7];
__R uint8_t LSR;
uint8_t RESERVED2[7];
__RW uint8_t SCR;
uint8_t RESERVED3[3];
__RW uint32_t ACR;
__RW uint8_t ICR;
uint8_t RESERVED4[3];
__RW uint8_t FDR;
uint8_t RESERVED5[7];
__RW uint8_t TER;
uint8_t RESERVED6[39];
__RW uint32_t FIFOLVL;
} LPC_UART0_S;

#define UART0 (*(LPC_UART0_S *) 0x4000C000UL )



Para mi tu error esta en el baudrate.(las cuentas me dan que el DLL es 159.43... aproximadamente 160)
Otra cosa, el hiper terminal es medio cagada,a mi no me gusta. Si tenes la posibilidad de pasarte a linux te recomiendo el CUTECOM. Es muy simple de usar. (solo hay que abrirlo con sudo para tener permiso de abrir los puertos series)
Suerte.
(Este mensaje fue modificado por última vez en: 30-10-2013 12:22 por AndresDemski.)
30-10-2013 11:59
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Stille Sin conexión
Empleado de Fotocopiadora
Sin estado :(
**

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 27
Agradecimientos dados: 1
Agradecimientos: 8 en 8 posts
Registro en: Mar 2011
Mensaje: #5
RE: Ayuda UART1 LPC1769
Gracias por la respuesta. Te comento que descarte el que el problema sea del hyperterminal o de la pc ya que puentíe Tx y Rx en el micro y tampoco recibo nada. Respecto a lo del baudrate (25000000/16)/9600=162,76 aprox 163 me da 0xA3 por eso puse asi.
Por otra parte, directamente copie tu codigo y tampoco anda. Yo me estoy inclinando a que es un problema de hard, medi tener continuidad en todos lados donde debiera haberla y eso esta todo bien, también medí los niveles de tensión y estan bien. La verdad no logro detectar la falla.
Voy a ver si el viernes que curso llevo la placa y el profesor me puede ayudar a resolverlo. Desde ya te agradezco mucho!

Edit: Despues de TANTO buscar, me di cuenta de el error :facepalm:, el problema era que lo estaba buscando en el lugar equivocado... tenía un error que NUNCA ANTES había detectado (y nunca me había traido problemas) en la funcion que setea el PINSEL... en fin, problema resuelto. Muchas gracias por la ayuda, nuevamente

Saludos.-
(Este mensaje fue modificado por última vez en: 30-10-2013 22:50 por Stille.)
30-10-2013 22:20
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
AndresDemski Sin conexión
Militante
Ayudante Informatica 2
***

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 75
Agradecimientos dados: 1
Agradecimientos: 12 en 9 posts
Registro en: Aug 2011
Facebook
Mensaje: #6
RE: Ayuda UART1 LPC1769
Felicitaciones por encontrar el error. Siempre donde menos uno lo espera. Un saludo
01-11-2013 00:16
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
matyary Sin conexión
Presidente del CEIT
SORPRENDEME!
********

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 1.796
Agradecimientos dados: 65
Agradecimientos: 313 en 77 posts
Registro en: Mar 2011
Mensaje: #7
RE: Ayuda UART1 LPC1769
Stille, otra cosa que podrías haber hecho para evitar el uso de una función (en este caso pin_config) es definir PINSEL0 con su respectiva dirección (yo usé UART 0 igual que andrés) y setear los pines que necesitás para la transmisión y recepción directamente. Para la UART 0 son los pines 2 y 3... y si te fijás en la hoja de datos del micro necesitás para habilitar los pines como Tx y Rx necesitás poner en 0 y 1 los pines 5 y 4 y en 0 y 1 los pines 7 y 6.
De esta forma te queda:

PINSEL0 |= 0x01 << 4; // que es lo mismo que PINSEL0 = 0x100... así habilitás el pin 2 como Tx
PINSEL0 |= 0x01 << 6; // que es lo mismo que PINSEL0 = 0x110... así habilitás el pin 3 como Rx

Y como dijiste vos, te conviene puentear los pines de recepción y transmisión para verificar que la comunicación esté realmente funcionando.


Off-topic:
Si hubieras ido a clase el viernes no estarías consultando en el foro Jajajaja... nosostros ya lo sacamos andando. Ahora lo estoy preparando para (cuando esté la parte de QT) comunicarme con la pc. Como te dije la vez pasada, si querés nos juntamos en el finde para trabajar en esta fucking shit



... and it was good!

Mi web: Von Hexlein
04-11-2013 20:04
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)



    This forum uses Lukasz Tkacz MyBB addons.