Forum: Mikrocontroller und Digitale Elektronik SAMD51 DMA Adressinkrement Problem


von Stefan A. (king-crash)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe hier einen SAMD51 bei dem ich den DMA verwenden möchte. Das 
funktioniert so lange bis ich das Autoinkrement von Source und/oder 
Destination anschalte. Dann wird nichts kopiert und das "Channel 
Transfer Error" Flag (DMAC->Channel[0].CHINTFLAG.bit.TERR) gesetzt.
Im Anhang ist ein Minimalbeispiel, das von RAM nach RAM kopiert. Das 
Einkommentieren der Zeilen 51 und/oder 52 Triggern den Fehler.
Für Hinweise was hier das Problem ist wäre ich sehr dankbar.

Grüße

von Auch Karl, ein anderer (Gast)


Lesenswert?

Errata gelesen? Die sams70 haben da einen Bug in die Richtung...

von Stefan A. (king-crash)


Lesenswert?

Danke für den Hinweis, da habe ich schon nachgeschaut. Das Einzige was 
noch entfernt damit zu tun haben könnte ist "DMAC in Debug Mode", 
deshalb habe ich auch DBGCTRL.DBGRUN gesetzt.

von Rudolph (Gast)


Lesenswert?

>dmadesc[0].SRCADDR.reg = (uint32_t)&sendbuffer;

Bei Blocktransfer muss da stehen wo man am Ende ankommen will.

Datenblatt Rev E, Seite 386:
"When source address incrementation is configured (BTCTRL.SRCINC=1), 
SRCADDR is calculated as
follows:
If BTCTRL.STEPSEL=1:
SRCADDR = SRCADDRstart + BTCNT *(BAETSIZE+1) *2^STEPSIZE
If BTCTRL.STEPSEL=0:
SRCADDR = SRCADDRstart + BTCNT * (BEATSIZE+2)

• SRCADDRSTART is the source address of the first beat transfer in the 
block transfer
• BTCNT is the initial number of beats remaining in the block transfer
• BEATSIZE is the configured number of bytes in a beat
• STEPSIZE is the configured number of beats for each incrementation"


dmadesc[0].SRCADDR.reg = (uint32_t)&sendbuffer[16];

von Stefan A. (king-crash)


Angehängte Dateien:

Lesenswert?

Aaaah, da das Array ziemlich am Anfang des SRAM stand, lag die vom DMA 
errechnete Startadresse in einem ungültigen Speicherbereich. Daher das 
Transfer Error Flag. Ich danke dir vielmals. Ein klassischer Fall von 
RTFM.
Im Anhang noch das jetzt Funktionierende Beispiel.

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.