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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren