Forum: Mikrocontroller und Digitale Elektronik 32-Bit-Speicherzugriff


von R. K. (uc_student)


Lesenswert?

Hallo zusammen

Ich stehe gerade ziemlich auf dem Schlauch...

Ich lese mittels SPI einen Datenstrom ein. Dieser wird mittels DMA 
direkt in einen grossen 8-Bit-Buffer kopiert, was auch sehr gut 
funktioniert.

Jetzt möchte ich gerne eine 32-Bit-Präambel in meinem Speicher suchen. 
Ich dachte ich könnte einfach mit einer 32-Bit-Variablen auf den 
Speicher zugreiffen und so mit meiner Präambel vergleichen:

uint8_t SPI_SLAVE_Buffer_Rx[BufferSize_RX];
uint32_t *RX_zwischenBuffer = 0;

SPI_SLAVE_Buffer_Rx[0]=0xFF;
SPI_SLAVE_Buffer_Rx[1]=0xF0;
SPI_SLAVE_Buffer_Rx[2]=0x0F;
SPI_SLAVE_Buffer_Rx[3]=0x00;
RX_zwischenBuffer=(uint32_t *)SPI_SLAVE_Buffer_Rx;

RX_result_Buffer=*RX_zwischenBuffer^Barker_Korr_Reg;

Das Problem ist jedoch, dass die Speicherorganisation beim STM32 
anscheinend nicht ganz so ist wie ich es mir erwünsche. Anstatt der 
0xFFF00F00 (oder das gespiegelte) kriege ich 0xFF0FF. Ich denke dies 
irgendwas mit LowByte-HighByte oder so zu tun.
Natürlich könnte ich die einzelnen Bytes manuell mit schieben an die 
richtige Stelle des Buffers legen, doch dies möchte ich eigentlich aus 
Zeitgründen vermeiden.

Kennt jemand eine Möglichkeit, wie ich direkt die 32 Bit in meinen 
Buffer kriege?

Freundliche Grüsse

von Gizmo2 (Gast)


Lesenswert?

R. K. schrieb:

> 0xFFF00F00 (oder das gespiegelte) kriege ich 0xFF0FF. Ich denke dies

0xFF0FF = 0x000FF0FF bzw 00 0F F0 FF. Na merkst du was?

von Thomas E. (thomase)


Lesenswert?

R. K. schrieb:
> SPI_SLAVE_Buffer_Rx[0]=0xFF;
> SPI_SLAVE_Buffer_Rx[1]=0xF0;
> SPI_SLAVE_Buffer_Rx[2]=0x0F;
> SPI_SLAVE_Buffer_Rx[3]=0x00;

> kriege ich 0xFF0FF
Was willst du denn sonst kriegen?
Das ist Little Endian, Low Byte First.
Setz' das doch einfach mal zusammen:

FF aus Rx0 >> FF
+ F0 aus Rx1 >> F0FF
+ 0F aus Rx2 >> 0FF0FF
+ 00 aus Rx3 >> 000FF0FF
Und die führenden Nullen sparen wir uns halt: FF0FF.

mfg.

von Dosmo (Gast)


Lesenswert?


von R. K. (uc_student)


Lesenswert?

Ok, vielen Dank für die super schnelle Fehlerlösung!

Ich habe meinen Fehler gefunden. Ich habe beim SPI-senden und bei SPI 
empfange die LSB-MSB-Rehenfolge vertauscht... Der Fehler war also nur 
indikert im Speicher

So wurde aus meinem 0xF0 ein 0x0F und aus 0x0F ein 0xF0. das resultierte 
in meiner 0x0FF0 statt 0xF00F

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.