SPI DMA Transfer

Gast #1458009
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
1
AT91PS_PDC pPdc = (AT91PS_PDC) &(AT91C_BASE_SPI1->SPI_RPR);
2

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

7
pPdc->PDC_PTCR = AT91C_PDC_TXTDIS;
8
pPdc->PDC_TPR = (unsigned int) bufferTX;
9
pPdc->PDC_TCR = 3;
10

11
pPdc->PDC_PTCR = AT91C_PDC_RXTEN;
12

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

16

17
do {
18
        dStatus = AT91C_BASE_SPI1->SPI_SR;
19
        uTimeout++;
20
    }
21
    while ((( dStatus & AT91C_SPI_RXBUFF) != AT91C_SPI_RXBUFF) && (uTimeout < AT91C_TOUCHSCREEN_TIMEOUT));
22

23
//disable receive / transmit transfer 
24
pPdc->PDC_PTCR = AT91C_PDC_RXTDIS;   
25
pPdc->PDC_PTCR = AT91C_PDC_TXTDIS; 
26

27
(void)AT91C_BASE_SPI1->SPI_RDR;

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

Gruß
Hannes
(Firma: Raich Gerätebau & Entwicklung) #1458351
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
Gast #1458713
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

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.