Pardonnez-moi si cette question a déjà été répondue, mais je n'ai pas pu trouver de réponse sur cette page ou sur Internet plus large.
Je suis un développeur expérimenté avec une connaissance décente de la programmation de bas niveau, mais relativement nouveau pour le développement embarqué. Je me suis enseigné le développement de systèmes embarqués à l'aide d'une carte ST-NUCLEO144, qui dispose d'un microcontrôleur STM32F746ZG. Une question qui me semble non évidente est la raison pour laquelle les champs de bits logiquement liés dans un registre peuvent se trouver à différents emplacements.
Un exemple est le USART_CR1
registre sur le STM32746ZG. Les champs M0
et M1
bits contrôlent ensemble la longueur de mot dans USART TX / RX, une valeur combinée de 2 bits de 0b00
spécifie 8 bits, 0b01
spécifie 9 bits, etc. Tout cela est assez simple, sauf que M0
c'est au bit 12 et M1
au bit 28 ... pourquoi est-ce?
Est-ce pour des raisons de conception héritées, telles qu'une nouvelle fonctionnalité a été insérée dans l'espace précédemment réservé? Est-ce pour des raisons liées à la conception de la puce, que je n'envisage pas, ou y a-t-il un objectif plus important que je ne vois pas?
Évidemment, c'est assez trivial à surmonter avec le masquage de bits, mais je suis juste curieux.