LPC1788: uart mit 921600 baud

Gast #2943904
Hallo,

ich habe das LPC1788 Board von Embedded Artists und spiele gerade mit 
dem Beispiel Code für die Ausgabe über UART herum (s_ob_uart_rs232). Die 
verwendeten Funktionen entsprechen denen von NXP 
(http://ics.nxp.com/support/documents/microcontrollers/zip/lpc177x.lpc178x.cmsis.driver.library.zip). 
Mit niedrigen Baudraten funktioniert die Sache auch problemlos, wenn ich 
die Baudrate aber auf 921600 erhöhe, kommt nur noch Buchstabensalat, 
wenn überhaupt an. Ich vermute, dass das irgendwie mit der eingestellten 
PCLK für den verwendeten UART2 und den berechneten Werten für DLM, DLL 
und FDR zusammenhängt, aber irgendwie finde ich keine Lösung, die tut. 
Hat vielleicht jemand schonmal die gleiche Erfahrung gemacht, oder kann 
mir helfen ?

Michael
Gast
Verwende einen LPC1768.

Ich habe da auch lang rumgemacht. So richtig funktioniert es bei hohen 
Baudraten wenn ich die Clock (CPU) durch 16 teile.

In meinem Beispiel verwende ich 100.000.000 / 16 = 625.000 Baud.

Das ist meine Initialisierung der UART.
1
uint32_t UARTInit( uint32_t baudrate )
2
{
3
  uint32_t Fdiv;
4
  uint32_t pclkdiv, pclk;
5

6
  LPC_PINCON->PINSEL0 &= ~0x000000F0;
7
  LPC_PINCON->PINSEL0 |= 0x00000050;  /* RxD0 is P0.3 and TxD0 is P0.2 */
8
  /* By default, the PCLKSELx value is zero, thus, the PCLK for
9
  all the peripherals is 1/4 of the SystemFrequency. */
10
  /* Bit 6~7 is for UART0 */
11
  pclkdiv = (LPC_SC->PCLKSEL0 >> 6) & 0x03;
12
  LPC_SC->PCLKSEL0 |= (0x01 << 6);
13
  pclkdiv = (LPC_SC->PCLKSEL0 >> 6) & 0x03;
14

15
  switch ( pclkdiv )
16
  {
17
  case 0x00:
18
  default:
19
    pclk = SystemCoreClock/4;
20
    break;
21
  case 0x01:
22
    pclk = SystemCoreClock;
23
    break;
24
  case 0x02:
25
    pclk = SystemCoreClock/2;
26
    break;
27
  case 0x03:
28
    pclk = SystemCoreClock/8;
29
    break;
30
  }
31

32
  LPC_UART0->LCR = 0x83;    /* 8 bits, no Parity, 1 Stop bit */
33
  Fdiv = ( pclk / 16 ) / baudrate ;  /*baud rate */
34
  LPC_UART0->DLM = Fdiv / 256;
35
  LPC_UART0->DLL = Fdiv % 256;
36
  LPC_UART0->LCR = 0x03;    /* DLAB = 0 */
37
  LPC_UART0->FCR = 0x07;    /* Enable and reset TX and RX FIFO. */
38

39
  NVIC_EnableIRQ(UART0_IRQn);
40

41
  LPC_UART0->IER = IER_RBR | IER_THRE | IER_RLS;  /* Enable UART0 interrupt */
42
  return (1);
43
}

Hoffe es hilft Dir weiter. Bin noch nicht so firm mit dem 1768.
Wofür willst du dann eine so hohe Baudrate?
Standartgrösse ist höchstens 115200. Und für die Kommunikation zwischen 
einem PC und einem MCU ist dies ebenfalls ungeeignet, da die Kabellänge 
sonst ein Problem wird.
Und MCU-Peripherie Kommunikation kann mann einfacher über I2C, CAN, SPI 
realisieren.
Gast
@Patrick

> Wofür willst du dann eine so hohe Baudrate?

Ich brauche die für ein RN131 WLAN Modul welches via UART an den LPC 
angeschlossen ist.

Mit RTS/CTS funktionieren 625.000 Baud sehr gut.
Gast
Patrick B. schrieb:

> Standartgrösse ist höchstens 115200.

Sogar am ollen Standard-8051 von vor 30 Jahren ist eine Baudrate von 
1MBAUD möglich. Die nutze ich hier an zwei Boards, die allerdings über 
LWL miteinander verdrahtet sind.

Über Draht auf kurzen Abständen geht das aber auch noch.

Jedoch kommt die Software unter Umständen nicht so schnell mit. Das ist 
aber auch kein Thema, da beide µC gleich schnell oder langsam sind. Die 
echte Datenrate ist dann kein Megabaud, nur physikalisch.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.