Forum: Mikrocontroller und Digitale Elektronik AT91SAM9261 USART mit PDC


von Roger (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.