bit maschere sono abbastanza facili da capire in modo Corriamo attraverso quel primo:
diciamo vostro registro a 32 bit contiene un certo valore in questo momento io arbitrariamente scegliere 0xF48C6219
presumo di sapere come convertire esadecimale a binario, se non ... diciamo solo che usare una calcolatrice o Google (piuttosto che andare nella parte fondamentale di quel troppo). Così il nostro valore esadecimale può essere rappresentato in binario come:
+-- bit 31 +-- bit 0
| |
v v
1111 0100 1000 1100 0110 0010 0001 1001
^^
| |
+-+-- bits you want to set, 16-18
logica booleana ci dice che:
1) nulla in OR (|
) con 1
si dà un valore di 1
. O "imposta" il bit.
2) qualsiasi cosa AND'd (&
) con 0
fornisce un valore di 0
. O "cancella" il bit.
Quindi, se volessimo cancellare i bit 16-18 è possibile e con una maschera come: numero
di base: 1111 0100 1000 1100 0110 0010 0001 1001 == 0xF48C6219
maschera numero: 1111 1111 1111 1000 1111 1111 1111 1111 == 0xFFF8FFF
1111 0100 1000 1100 0110 0010 0001 1001
& 1111 1111 1111 1000 1111 1111 1111 1111
------------------------------------------
1111 0100 1000 1000 0110 0010 0001 1001
Ora lattina o con qualsiasi cosa si vuole impostare lì:
nuovo numero di maschera: 0000 0000 0000 0011 0000 0000 0000 0000 == 0x00030000
1111 0100 1000 1000 0110 0010 0001 1001
| 0000 0000 0000 0011 0000 0000 0000 0000
-----------------------------------------
1111 0100 1000 1011 0110 0010 0001 1001
Così nel codice:
#define CLEAR_MASK 0x70000 //70000 is shorter to write, so just do this and flip it
#define SET_3_MASK 0x30000
volatile uint32_t * const reg = (uint32_t *) 0x4A10005C;//set a pointer to the register
*reg &= ~CLEAR_MASK; //~ filps the bits
*reg |= SET_3_MASK;
È possibile eseguire trucchi con i bit di spostamento e così via, ma questa è la base delle maschere di bit e del loro funzionamento. Spero che sia d'aiuto.
senza capire come funzionano le operazioni bit e cose come le maschere di bit potrebbe essere davvero difficile manipolare i bit ... – codewarrior
Che cosa ti confonde le maschere di bit? – Mike
Vi sono 2 modi per accedere alle informazioni a livello di bit Operatori BITWISE e Struttura bit a bit in c –