ARM LPC2134 Uart Empfangsprobleme

OP (Firma: ARM LPC2134, uVision3, in C) #1255052
Lesenswert?
• ▲
▼
Hallo,
ich arbeite mit einem LPC2134 mit einer RS485-Schnittstelle.
Habe Probleme mit void receive():Bei Emfang von Byte leuchtet die
receive-Lämchen nicht, d.h. das Byte nicht empangen wird.
void transmit(void) funktioniert.
Ideen?
Vielen Dank imm Voraus.

Mit dieser Zuweisung wird doch aus dem UART Byte geholt und damit auch
gelesen. Also das Lämchen muss doch kurz aufleuchten.  (x = U0RBR);
Auf dem Modul sind UARTS ich sende von einem zum anderem über RS485



/*************** System Initialization ***************/

void Initialize (void)
{
  PINSEL0  =  0x00050005;    /*Enable TxD1,TxD0,RxD1,RxD0*/
  IODIR0  =  0x10400410;    /*OUT: RTS0_P0.4, RTS1_P0.14,
COM1_P0.22,COM0_P0.28*/
  IOSET0  =  0x10400010;    /*LOW auf 0 COM = 0(RS485), RTS0=0(Sender)*/
  IOCLR0  =  0x00000000;    /*HIGH auf 1 RTS1=1(Empfänger)*/

  U1LCR    =  0x83;    /*8 bits, 1 stopbit, no Parity, enable DLAB*/
  U1DLM    =  0x01;    /*9600 Baud Rate, 55.296.000 PCLK*/
  U1DLL    =  0x68;    /*360dez=0x0168*/
  U1LCR    =  0x03;    /*disable DLAB*/
  U1FCR    =  0x01;    /*enable UART1-FIFO*/

  U0LCR    =  0x83;    /*8 bits, 1 stopbit, no Parity, enable DLAB*/
  U0DLM    =  0x01;    /*9600 Baud Rate, 55.296.000 PCLK*/
  U0DLL    =  0x68;    /*360dez=0x0168*/
  U0LCR    =  0x03;    /*disable DLAB*/
  U0FCR    =  0x01;    /*enable UART1-FIFO*/
}



/* Write character to Serial Port    */

void transmit(void)              /*while ist eine Warteschleife*/
{
     while (!(U1LSR & 0x20));
    (U1THR = 0x89);
}

/* Read character from Serial Port    */

unsigned char x;

void receive(void)
{
  while ((U0LSR & 0x01));
   (x = U0RBR);

}
Persönliche Seite #1255062
Lesenswert?
• ▲
▼
Was soll "das Receive-Lämchen" sein?

Warum verwendest du gleich zwei serielle Schnittstellen?

Das solltest Du Dir nochmal ansehen:
1
void transmit(void)              /*while ist eine Warteschleife*/
2
{
3
     while (!(U1LSR & 0x20));
4
    (U1THR = 0x89);
5
}

Diese Funktion gibt immer denselben Wert aus, ist das sinnvoll? Was 
sollen die Klammern um die Zeile mit der Zuweisung an U1THR?

Deine "Empfangsroutine" ist auch merkwürdig; warum wird das empfangene 
Zeichen in einer globalen Variablen abgelegt und nicht als Rückgabewert 
zurückgegeben?
OP (Firma: ARM LPC2134, uVision3, in C) #1255075
Lesenswert?
• ▲
▼
Danke für die schnelle Antwort
Ich bin ein Anfänger und arbeite mich ein. Das Lämpchen leuchtet denke 
ich wenn was versand bzw. empfangen wird. Vielleicht ist auch irgendein 
Port falsche gesetzt. Ich fins nicht.

Ich sende Zeichen von UART1 und empfange dieses Zeichen auf UART0.

void transmit(void)
{
     while (!(U1LSR & 0x20));
    U1THR = 0x89;
}

so die Klammern sind weg.
Ich will auch nur ein Zeichen senden und mit dem anderem UART empfangen.

meinst du so?
void receive(void)
{
  while ((U0LSR & 0x01));
   return (U0RBR);

}
allerdings bekomme ich von Keil uVersion folgende Meldung:
Initialize.c(58): error:  #118: a void function may not return a value
Gast #1256148
Lesenswert?
• ▲
▼
I würde umbedingt mal ein C Tutorial lesen


meinst du so?
void receive(void)
{
  while ((U0LSR & 0x01));
   return (U0RBR);

}
allerdings bekomme ich von Keil uVersion folgende Meldung:
Initialize.c(58): error:  #118: a void function may not return a value



dann wird das klar sein.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren