STM32 DMA Data Packing

OP Persönliche Seite #6658588
Lesenswert?

Hallo
Ich hätte mal eine Frage zu "Data packing/unpacking" eines 
STM32F4(69)...

Ein IC mit dem ich per SPI-DMA kommuniziere arbeitet mit 32bit 
Registern. Ich muss also ständig meine TX/RX Daten von einem uint32_t in 
zwei uint16_t umwandeln wenn ich was sende oder empfange weil der STM32 
ja nur max. 16bit per SPI kann...

Da sprang mir das Kapitel * "9.3.11 Programmable data width, 
packing/unpacking, endianness" * ins Gesicht. Leider verstehe ich das 
ganze nicht so recht.
Ist es also möglich das ich mein DMA TX/RX einen uint32_t buffer senden 
und empfangen lassen kann und er wandelt das ganze intern um so dass ich 
von außen nix weiter machen muss außer die NDTR anzupassen?

Wie sieht das mit der "Endianess" aus. Normalerweise erwarte ich oder 
sende Daten wie 0x07242424 von dem IC. Ist das korrekt das ich mit Data 
packing dann little endian zurück bekomme (0x24242407) (oder senden 
muss)?
Angehängte Dateien:
OP Persönliche Seite #6659043
Lesenswert?

Jim M. schrieb:
> SPI is i.d.R. big endian

Ja aber sobald ich DMA & FIFO verwende und PSIZE & MSIZE nicht mehr 
gleich sind verarbeitet der DMA Controller Ein- und Ausgänge nur noch 
als little endian.

Ich habe das auch gerade mal ausprobiert.
0x07242424 gesendet an den IC via DMA mit 16bit SPI Adressbreite. Mein 
Logic Analyser zeigt mir 0x24240724 angekommen...

Ich vermute die Instruktionen die ich zum korrigieren der endianess 
verwenden müsste nehmen sich nicht viel mehr als die Instruktionen die 
ich ohne Data Packing verwende um aus einer uint32_t Zahl zwei uint16_t 
Zahlen für SPI zu machen... Ich lasse das ganze erstmal und mache ohne 
Data Packing weiter. Es erschließt sich mir nicht wirklich ein Vorteil 
:)

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