LPC1788: uart mit 921600 baud

Gast #2943904
Lesenswert?
• ▲
▼
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 #2943973
Lesenswert?
• ▲
▼
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.
#2944304
Lesenswert?
• ▲
▼
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 #2944410
Lesenswert?
• ▲
▼
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

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.

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.