STM32 DMA decrement statt increment

OP #5184383
Lesenswert?

Hallo zusammen

Folgendes Problem:

Ich bekomme per SPI Daten in folgendem Format:

uint32 [Byte3][Byte2][Byte1][Byte0]

Byte3 stellt das höchstwertige Byte des uint32 dar.
Die Bitreihenfolge ist korrekt. Wobei das MSB das linke Bit ist.

Nun habe ich aber folgendes Problem.
Der DMA holt sich die Bytes und speichert diese in einem Array ab:

...
IDX 3: [Byte0]
IDX 2: [Byte1]
IDX 1: [Byte2]
IDX 0: [Byte3]

Nun habe ich das Problem, dass die Bytes verkehrt herum liegen.

Wenn ich das Array wie folgt Caste:
1
a = *(uint32_t*) &Array[0]

Dann bekomme ich einen HexWert für A von: Byte0,1,2,3 also genau 
verkehrt herum.

Am besten wäre es, wenn ich dem DMA mitteilen könnte, dass er vo oben 
herab die Bytes einfüllen würde. Kann man dies beim STM32F3/4?

Der Chip, welcher die Daten liefert, kann man nicht umkonfigurieren.

Ansonsten, was wäre die schnellste methode, die obigen Daten in einen 
uint32_t zu wandeln?

Danke!
Gast #5184397
Lesenswert?

Ein Dekrementieren ist nicht vorgesehen, weder beim F4 noch beim 
neuesten F743 ... Steht übrigens klar im RM drin:
DMA stream x configuration register (DMA_SxCR) (x = 0..7), MINC- und 
PINC-Bits

Inline-Assembler, 'REV' dreht die Byte-Reihenfolge in einem Register 
herum, macht also z. B. BE aus LE oder umgekehrt.
Gast #5184431
Lesenswert?

Tja, da muss man wohl oder übel Handbücher (Papier oder auch papierlos) 
wälzen, sprich die Doku zur verwendeten Toochain bzw. Compiler.

U. u. kennt der Compiler die 'Intrinsics' wie 'unsigned int 
__rev(unsigned int val)', oder auch __builtin_bswap32.

Und wenn nein, bleibt nur, in der Compiler-Doku nachzusehen, wie man 
Inline-Assembler vernünftig (Registernutzung zur Parameterübergabe!) 
einbindet.

Oder (weniger ratsam, da nur auf Little-Endian zielführend) htonl bzw. 
ntohl.

Letzter Rettungsanker wäre, da in C nachzubauen ...

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