Ich bin neu in Bit-Operationen und versuche, ein wenig zu experimentieren.Wie schreibe und lese ich spezifische Bit eines 32-Bit-Registers
lassen Sie uns sagen, ich habe ein 32-Bit-Register, das ist wie folgt aufgebaut:
Bit 31:12 RESERVED
Bit 11 CONFIG1
Bit 10 CONFIG2
Bit 9:0 DATA
Es existiert bereits eine Funktion, um Daten in das Register zu schreiben:
#define WR_REG_32(address, value) (*((volatile u32 *)(address)) = (value))
Gerne möchte ich schreiben Wert 0x0 bei Bit 10 (CONFIG2). Der Wert sollte wie zum Beispiel im Format:
0x00005000
So, wie das, was Hex-Wert wissen, zu verwenden, um zu Bit 10 den Wert 0x0 zu schreiben, ohne die anderen Bits zu berühren?
Was ist auch der einfachste Weg, um aus dem 32-Bit-Register nur die Werte von Bit 0 - 9 zu lesen?
Bitweise Operationen wie Verschiebung, und oder usw. werden für diesen Zweck gemacht. Wenn das Register 32 Bits hat, werden 32 Bits gelesen. Nur dann können Sie die oben genannten Operationen verwenden, um die gewünschten Bits zu erhalten. – zubergu
von der Spitze der verbundenen Liste: [Wie können Sie ein einzelnes Bit setzen, löschen und umschalten?] (Https://stackoverflow.com/questions/47981/how-do-you-set-clear-and-toggle -a-single-bit? rq = 1) ... – ilkkachu
Auch: https://stackoverflow.com/questions/10493411/what-is-bit-masking – ilkkachu