mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SPI DMA Transfer


Autor: Hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

bei einem AT91SAM9263 Controller hab ich das Problem, dass beim Zugriff 
auf einen SPI-IC (insgesamt hängen zwei ICs an SPI1-Bus), immer der 
andere auch mit angesprochen wird.

Der SPI-Datentransfer läuft mittels DMA ab und beim enablen des 
Tranceivers der DMA leuchten obwohl der TLC5922 nicht angesprochen wird, 
immer die LEDs kurzzeitig auf! Die Werte, die per SPI zurückgeliefert 
werden (vom zweiten IC, dem Touch-Controller) sind richtig, aber das 
aufleuchten der LEDS ist merkwürdig.

Zu Beginn programmiere ich das Mode-Register vom SPI neu, damit der 
richtige Chipselect ausgewählt wird (steht auch im Register dann richtig 
drinnen) und anschließend wird der DMA transport vorbereitet
AT91PS_PDC pPdc = (AT91PS_PDC) &(AT91C_BASE_SPI1->SPI_RPR);

pPdc->PDC_PTCR = AT91C_PDC_RXTDIS;
pPdc->PDC_RPR = (unsigned int) bufferRX;
pPdc->PDC_RCR = 3;

pPdc->PDC_PTCR = AT91C_PDC_TXTDIS;
pPdc->PDC_TPR = (unsigned int) bufferTX;
pPdc->PDC_TCR = 3;

pPdc->PDC_PTCR = AT91C_PDC_RXTEN;

pPdc->PDC_PTCR = AT91C_PDC_TXTEN;
/* bei diesem Cmd leuchten die LEDs vom TLC kurzzeitig auf */


do {
        dStatus = AT91C_BASE_SPI1->SPI_SR;
        uTimeout++;
    }
    while ((( dStatus & AT91C_SPI_RXBUFF) != AT91C_SPI_RXBUFF) && (uTimeout < AT91C_TOUCHSCREEN_TIMEOUT));

//disable receive / transmit transfer 
pPdc->PDC_PTCR = AT91C_PDC_RXTDIS;   
pPdc->PDC_PTCR = AT91C_PDC_TXTDIS; 

(void)AT91C_BASE_SPI1->SPI_RDR;


Hat jmd eine Idee an was das liegen könnte?

Gruß
Hannes

Autor: Gebhard Raich (geb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schaut aus, als wenn die CS Leitungen nicht richtig funktionieren. 
Solltest du mit einem Oszi mal kontrollieren,was da wirklich passiert. 
Bei den Arm Prozessoren gibt es immer wieder sog. pipeline Effekte, wo 
z.B. ein Port Pin unter best. Umständen verzögert gesetzt wird.

Grüße Geb

Autor: Hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich hab sogar diesen Fehler, wenn ich das Programm im Debug-Modus 
durchsteppe - step by step.

Im Errata hab ich leider nichts gefunden, werd wahrscheinlich mal Atmel 
Support kontaktieren müssen, wenn sonst keiner eine Idee hat, wie man 
dieses Problem in den Griff bekommt.

Gruß
Hannes

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.