mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ARM LPC2134 Uart Empfangsprobleme


Autor: Sergey S. (Firma: ARM LPC2134, uVision3, in C) (serik00)
Datum:

Bewertung
0 lesenswert
nicht 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);

}

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was soll "das Receive-Lämchen" sein?

Warum verwendest du gleich zwei serielle Schnittstellen?

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

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?

Autor: Sergey S. (Firma: ARM LPC2134, uVision3, in C) (serik00)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sergey S. (Firma: ARM LPC2134, uVision3, in C) (serik00)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hat sich erledigt.

ich habe die PINS falsch gesetzt:

  IOSET0  =  0x10400010;    /*LOW auf 0 COM = 0(RS485), RTS0=0(Sender)*/
  IOCLR0  =  0x00000000;    /*HIGH auf 1 RTS1=1(Empfänger)*/


richtig wäre:
  IOCLR0  =  0x10400010;
  IOSET0  =  0x00000400;

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.