Ok, al momento hai un'idea di cosa sia SPI, con solo questo però andrai poco lontano..
Hai una vaga idea delle risposte alle domande di prima?
I registri generalmente sono visti semplicemente come "variabili" grazie a delle definizioni dell'ambiente di sviluppo o librerie fornite dal produttore del micro.
Facciamo un esempio: per impostare il valore 1 nel registro pippo generalmente basterà scrivere
- Code: Select all
pippo = 1;
Mentre per leggerlo
- Code: Select all
mia_variabile = pippo;
dove pippo è da qualche parte definito (es. in qualche libreria che richiami) come un l'indirizzo di memoria del registro (supponiamo ad 8 bit con locazione 0x123) con qualcosa di simile a
- Code: Select all
#define PIPPO ((uint8_t) 0x123)
Questa naturalmente è una semplificazione, in realtà la definizione è più complicata, ma è tanto per rendere l'idea.
Ora veniamo alla tua domanda, senza utilizzare macro strane, se hai una variabile chiamata SPI0_MCR a 32 bit, es. di tipo uint32_t, come puoi fare a "pulire" i bit 28-29?
- Code: Select all
SPI0_MCR = SPI0_MCR & 0xCFFFFFFF;
Tips: 0xCFFFFFFF in binario vale 1100 1111 1111 1111 1111 1111 1111 1111, prova a capire perché funziona.
Senza bruciare le tappe dovrai imparare a manipolare i bit vecchio stile prima di usare macro o funzioni black-box, prova a partire da qui:
https://en.wikipedia.org/wiki/Bit_manipulation