Perdóneme si esta pregunta ya ha sido respondida, pero no pude encontrar una respuesta ni en esta página ni en Internet.
Soy un desarrollador experimentado con un conocimiento decente sobre la programación de bajo nivel, pero relativamente nuevo en el desarrollo integrado. Me he estado enseñando el desarrollo de sistemas integrados utilizando una placa ST-NUCLEO144, que cuenta con una MCU STM32F746ZG. Una pregunta que no me parece obvia es por qué los campos de bits relacionados lógicamente en un registro pueden estar en diferentes ubicaciones.
Un ejemplo es el USART_CR1
registro en el STM32746ZG. Los campos M0
y M1
bit controlan juntos la longitud de la palabra en USART TX / RX, un valor combinado de 2 bits que 0b00
especifica 8 bits, 0b01
especifica 9 bits, etc. Todo esto es bastante sencillo, excepto que M0
está en el bit 12 y M1
está en el bit 28 ... ¿por qué es esto?
¿Es esto por razones de diseño heredadas, como una nueva característica insertada en un espacio previamente reservado? ¿Es por razones relacionadas con el diseño del chip que no estoy considerando, o hay un propósito mayor para esto que no estoy viendo?
Obviamente, esto es bastante trivial de superar con el enmascaramiento de bits, pero tengo curiosidad.