mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PDC immer sinnvoll?


Autor: Ingo H. (ingo2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Frage vorweg: Ab wieviel bytes/Transfer lohnt sich eine PDC(bzw. 
DMA)-Übertragung?

Ich arbeite mit dem AT91SAM7A3 und möchte hiermit 4 Sensoren sehr 
dynamisch über die SPI-Schnittstelle auslesen. Die eingelesenen Werte 
werden in einem Regleralgorithmus weiterverarbeitet.

Der Sensor wird per Kommando (1 Byte) ausgelesen. Das zurückgesandte 
Datum beträgt 3 Byte pro Sensor.

Der Controller verarbeitet den Regleralgorithmus ohne Auslesen der 
Sensoren mit 150 kHz. Lese ich die Sensoren aus, sinkt der Takt auf 10 
kHz.

Im Moment erfolgt das Lesen und Schreiben mit den 
SPI_TDR/SPI_RDR-Registern (also ohne PDC).

Meine Hoffnung ist es, den Reglertakt durch Nutzung der PDC zu erhöhen.

Frage: lohnt sich das? Ich würde es gerne ausprobieren, scheitere aber 
an der Umsetzung. Ich kann am Oszi nicht mal ein Clock-Signal sehen 
(ohne PDC geht's)
Liegt's vielleicht an der falschen Initialisierung?

Mein (gescheiterter) PDC-Code:

int main(void)
{
    char *receive;
    char *transmit;

    transmit = 5;//Testbytes
    receive = 3;

    // Enable SPI0 PMC peripheral clock
    AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_SPI0;

    // Initialize the io pins, (das sind miso, mosi, clk und npcs1)
    PIO_Configure(pins, PIO_LISTSIZE(pins));

    //ENABLE SPI
    AT91C_BASE_SPI0->SPI_CR = AT91C_SPI_SPIEN ;

    AT91C_BASE_SPI0->SPI_MR = 
AT91C_SPI_MSTR|AT91C_SPI_PS_VARIABLE|0<<2|AT91C_SPI_LLB|SLAVE<<16|AT91C_ 
SPI_MODFDIS|(255<<24);

AT91C_BASE_SPI0->SPI_CSR[3]=
AT91C_SPI_NCPHA|AT91C_SPI_CSAAT|AT91C_SPI_BITS_8|(255<<8)|AT91C_SPI_DLYB 
S|
AT91C_SPI_DLYBCT;

while(1)
{
  AT91C_BASE_SPI0->SPI_RPR = (unsigned int)receive;
  AT91C_BASE_SPI0->SPI_RCR = 1;
  AT91C_BASE_SPI0->SPI_TPR = (unsigned int)transmit;
  AT91C_BASE_SPI0->SPI_TCR = 1;

  AT91C_BASE_SPI0->SPI_PTCR = AT91C_PDC_TXTEN|AT91C_PDC_RXTEN;

  while (! (AT91C_BASE_SPI0->SPI_SR & AT91C_SPI_ENDRX)) ;
}
}

Autor: Ingo H. (ingo2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lösung:

1. PDC funktioniert nicht mit AT91C_SPI_PS_VARIABLE im SPI_MR Register.
2. Habe keinen Geschwindigkeitsvorteil mit PDC ggü ohne PDC messen 
können.
Bei der Messung wurden maximal 4 Bytes/Transfer übertragen.

Ergo: Bleibe bei der ursprünglichen Version ohne PDC (RDR bzw. TDR 
register)

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.