SAMD51 DMA Adressinkrement Problem

OP #6212522
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
Angehängte Dateien:
Gast #6213224
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];

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