AT91SAM9261 USART mit PDC

Gast #3177760
Lesenswert?
• ▲
▼
Hallo,

bei meinem AT91SAM9261 Board möchte ich jetzt die USART mit PDC nutzen. 
Hier habe ich jetzt ein paar Fragen bezüglich der richtigen 
Implementierung.

1.) Sollte man den Empfang und das Senden über den Interrupt steuern 
lassen? Damit meine ich, dass das USART Modul zwei große Buffer (TX und 
RX) hat, die aus der main heraus gelesen oder gefüllt werden. In der ISR 
werden dann Chunks aus/in den Modulbuffer von/aus den PDC Banken 
kopiert. Das sind meiner Meinung nach ziemlich viele Kopieroperationen, 
welche die Performance schwächen.

2.) Ist es besser, eventuell nur den RXBUFF und Timeout Interrupt zu 
behandeln und das Senden manuell zu handeln? Zum Beispiel:
1
int32_t usart_IsTxReady(void)
2
{
3
  uint32_t _ui32Status = 0;
4

5
  _ui32Status = usart1->US_CSR;
6
  if ((_ui32Status & AT91C_US_ENDTX) && (_ui32Status & AT91C_US_TXBUFE))
7
    return TRUE;
8
  else
9
    return FALSE;
10

11
}
12

13
int32_t usart_putsl(uint8_t* ui8DataPtr, uint32_t ui32Size)
14
{
15
  
16
  if (usart1->US_TCR  == 0) {
17
    usart1->US_TPR = (unsigned int) ui8DataPtr;
18
    usart1->US_TCR = ui32Size;
19
    usart1->US_PTCR = AT91C_PDC_TXTEN;
20
    /* wait till ready */
21
    while (usart_IsTxReady() == FALSE);
22
    return ui32Size;
23
  }
24
  else if (usart1->US_TNCR  == 0) {
25
    usart1->US_TNPR = (unsigned int) ui8DataPtr;
26
    usart1->US_TNCR = ui32Size;
27
    usart1->US_PTCR = AT91C_PDC_TXTEN;
28
    while (usart_IsTxReady() == FALSE);
29
    return ui32Size
30
  }
31
  return -1;
32
}

3.) Wie handelt ihr eventuelle Übertragungsabbrüche? Damit meine ich, 
wenn zum Beispiel die Datenkommunikation interrupted wird. Fangt ihr das 
in der Protokollschicht ab? Habt ihr eventuell direkte Resetkommandos, 
die der PC zum µC schickt um das Interface zu löschen?


Danke Roger

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.