Perdoe-me se esta pergunta já foi respondida, mas não consegui encontrar uma resposta nesta página ou na Internet em geral.
Sou um desenvolvedor experiente, com conhecimento decente sobre programação de baixo nível, mas relativamente novo no desenvolvimento incorporado. Eu tenho me ensinado a desenvolver sistemas embarcados usando uma placa ST-NUCLEO144, que possui uma MCU STM32F746ZG. Uma pergunta que me parece não óbvia é por que os campos de bits relacionados logicamente em um registro podem estar em locais diferentes.
Um exemplo é o USART_CR1
registro no STM32746ZG. Os campos M0
e M1
bit juntos controlam o comprimento da palavra em USART TX / RX, um valor combinado de 2 bits que 0b00
especifica 8 bits, 0b01
especifica 9 bits etc. Isso tudo é bastante direto, exceto que M0
está no bit 12 e M1
está no bit 28 ... por que isso?
Isso ocorre por motivos de design herdados, como um novo recurso que foi inserido no espaço reservado anteriormente? É por razões relacionadas ao design do chip que eu não estou considerando, ou existe um propósito maior para isso que eu não estou vendo?
Obviamente, isso é bastante trivial para superar com mascaramento de bits, mas estou curioso.