Scusami se questa domanda è già stata risolta, ma non sono riuscito a trovare una risposta su questa pagina o su Internet.
Sono uno sviluppatore esperto con una discreta conoscenza della programmazione di basso livello, ma relativamente nuovo per lo sviluppo integrato. Mi sono insegnato lo sviluppo di sistemi embedded usando una scheda ST-NUCLEO144, che presenta un MCU STM32F746ZG. Una domanda che mi sembra non ovvia è che il motivo per cui i campi di bit logicamente correlati in un registro possano trovarsi in posizioni diverse.
Un esempio è il USART_CR1
registro sull'STM32746ZG. I campi bit M0
e M1
insieme controllano la lunghezza della parola in USART TX / RX, un valore combinato a 2 bit 0b00
specifica 8 bit, 0b01
specifica 9 bit, ecc. Tutto ciò è abbastanza semplice, tranne che M0
è al bit 12 ed M1
è al bit 28 ... perché questo?
È per motivi di design legacy, come una nuova funzionalità inserita in spazi precedentemente riservati? È per motivi legati alla progettazione del chip, che non sto prendendo in considerazione, o c'è uno scopo maggiore in questo che non vedo?
Ovviamente questo è piuttosto banale da superare con il bit-masking, ma sono solo curioso.