kleine Verständnisfrage an euch:
Was genau soll diese Berechnung machen?
Soll sie ermitteln wie viel Words aus den übergebenen Bytes gebildet werden können?
Soll sie ermitteln wie viel Words aus den übergebenen Bytes gebildet
werden können?
Ja, sie ermittelt, wieviele 32-Bit-Worte für eine bestimmte Anzahl Bytes nötig sind. Spiel das doch einfach mal mit ein paar Werten für bytes (z.B. von 0..12) durch und denk daran: bei der Integerdivision /4 wird einfach der Rest abgeschnitten.
uint32_t words = (bytes + 3) / 4; //16 max
Soll sie ermitteln wie viel Words aus den übergebenen Bytes gebildet
werden können?
Ja, sie ermittelt, wieviele 32-Bitworte für eine bestimmte Anzahl Bytes
nötig sind. Spiel das doch einfach mal mit ein paar Werten für bytes
(z.B. von 0..12) durch und denk daran: bei der Integerdivision /4 wird
einfach der Rest abgeschnitten.
Habe ich schon gemacht jedoch bin ich bei einer ungeraden Zahl an Bytes stutzig geworden.
Wenn ich jetzt z.B 3 Bytes übertragen möchte, errechnet die Funktion ja nur ein Word was ja auch richtig ist, in der for Schleife wird dann das dritte Byte nicht mehr beachtet oder habe ich da einen Denkfehler?
Ich habe das eben noch mal mit dem "onlinegdb" durchgespielt.
Wenn ich der Funktion als bsp.
1
uint8_tbuff[]={1,2,3,4};
2
spi_write_bytes(buff,4);
übergebe, ist das gebildete Word "67305985 Dec."
Das währe dann in Bytes "0x04, 0x03, 0x02, 0x01 Hex."
Die Funktion zum schreiben der Daten auf dem SPI Bus ist auf MSB_First eingestellt. Das würde bedeuten das zuerst die "0x04" dann die "0x03" usw. gesendet werden müsste, richtig?
Jedoch ist komplett anders (siehe Foto)..
So wie ich das jetzt verstanden habe, passen meine zu sendenen Bytes in ein 32 Bit Word. Da das SPI Senderegister 32 Bit breit ist, sollte es eigentlich der o.g. Reihenfolge gesendet werden oder=
Habe gerade versucht einen uint32_t zu senden mit 0x000001.
Laut LA kommt 0x000100 an.
Scheint also irgendwas mit dem Registerzugriff nicht zu passen..