Nabend,
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?
Jan H. schrieb:> 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-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.
Lothar M. schrieb:> Jan H. schrieb:>> 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?
Jan H. schrieb:> in der for Schleife wird dann das dritte Byte nicht mehr beachtet oder> habe ich da einen Denkfehler?
Im Fall von words == 3 zählt die for-Schleife 0,1,2 und das sind 3
Schleifendurchläufe.
Informatiker am Bahnhof: 0,1,2 ... Mist, wo ist mein dritter Koffer!?
mfg mf
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=
Jan H. schrieb:> Die Funktion zum schreiben der Daten auf dem SPI Bus ist auf MSB_First> eingestellt.
Richtig, sie sendet das höherwertige Bit der übertragenen Bytes
zuerst.
Jan H. schrieb:> Das würde bedeuten das zuerst die "0x04" dann die "0x03"> usw. gesendet werden müsste, richtig?
Nö, um das Umsortieren von Bytes müsstest Du Dich schon selbst kümmern,
das hat mit SPI nichts mehr zu tun.
Harald K. schrieb:> Jan H. schrieb:>> Die Funktion zum schreiben der Daten auf dem SPI Bus ist auf MSB_First>> eingestellt.>> Richtig, sie sendet das höherwertige Bit der übertragenen Bytes> zuerst.>> Jan H. schrieb:>> Das würde bedeuten das zuerst die "0x04" dann die "0x03">> usw. gesendet werden müsste, richtig?>> Nö, um das Umsortieren von Bytes müsstest Du Dich schon selbst kümmern,> das hat mit SPI nichts mehr zu tun.
Wie "Nö"? Wenn meine 0x04 das MSB von uint32_t bildet, wird das doch
zuerst gesendet?
Habe gerade versucht einen uint32_t zu senden mit 0x000001.
Laut LA kommt 0x000100 an.
Scheint also irgendwas mit dem Registerzugriff nicht zu passen..