Verzeihen Sie mir, wenn diese Frage bereits beantwortet wurde, ich jedoch weder auf dieser Seite noch im Internet eine Antwort finden konnte.
Ich bin ein erfahrener Entwickler mit anständigen Kenntnissen in Bezug auf Low-Level-Programmierung, aber relativ neu in der Embedded-Entwicklung. Ich habe mir selbst die Entwicklung eingebetteter Systeme mit einer ST-NUCLEO144-Karte beigebracht, die über eine STM32F746ZG-MCU verfügt. Eine Frage, die mir nicht offensichtlich erscheint, ist, warum sich logisch verwandte Bitfelder in einem Register an verschiedenen Stellen befinden können.
Ein Beispiel ist das USART_CR1
Register am STM32746ZG. Die Felder M0
und M1
bit steuern zusammen die Wortlänge in USART TX / RX, ein kombinierter 2-Bit-Wert von 0b00
spezifiziert 8-Bit, 0b01
spezifiziert 9-Bit usw. Dies ist alles ziemlich einfach, außer dass M0
es sich um Bit 12 und M1
Bit handelt 28 ... warum ist das so?
Ist dies aus Gründen des Legacy-Designs der Fall, z. B. wurde eine neue Funktion in einen zuvor reservierten Bereich eingefügt? Ist es aus Gründen im Zusammenhang mit dem Chipdesign, die ich nicht in Betracht ziehe, oder gibt es einen größeren Zweck, den ich nicht sehe?
Natürlich ist dies mit Bitmaskierung ziemlich trivial zu überwinden, aber ich bin nur neugierig.
Antworten:
In diesem speziellen Fall (und in ähnlichen Fällen, die ich gesehen habe) ist dies der Fall, um die Abwärtskompatibilität mit älteren Geräten zu gewährleisten und Änderungen am (möglicherweise gut getesteten und qualifizierten / zertifizierten) Code zu minimieren, der bereits für diese älteren Geräte geschrieben wurde . Neue Merkmale und Funktionen (für die Steuerung und Konfiguration sind neue Registerbits erforderlich) müssen daher nicht zusammenhängende Bits verwenden, wenn die zu den ursprünglichen Registerbits benachbarten Bits bereits verwendet werden.
Hier ist zum Beispiel das
USART_CR1
Register der alten STM32F1xx-Familie.Abbildung 1. Verwendung des Registers STM32F10xxx USART_CR1
Bildquelle: Referenzhandbuch zur STM32F10xxx-Familie RM0008, Abschnitt 27.6.4
Dieser ältere USART (mit nur 2 Wortlängenoptionen) benötigt nur ein
M
Bit, um die USART-Wortlänge zwischen den beiden Optionen zu konfigurieren, und das ist Bit 12. Beachten Sie, wie die Bits 11 und 13 ebenfalls verwendet werden und daher für zukünftige "Erweiterungen" nicht verfügbar sind. .Wie Sie sagten, auf der neuere STM32F7 (und beispielsweise auch die STM32F4) nun die USART hat 3 Wortlänge Optionen (7, 8 und 9 Bits) und so eine andere Konfiguration Bit benötigt - Bit 12 ist
M0
, mit derM1
jetzt in Bit 28 (zuvor in der STM32F1-Registerkarte reserviert, wie Sie oben sehen).Abbildung 2. Verwendung des Registers STM32F74xxx USART_CR1
Bildquelle: Referenzhandbuch für die Familien STM32F75xxx und STM32F74xxx RM0385, Abschnitt 31.8.1
Sie konnten das neue
M1
Bit nicht in die Registerbits 11 oder 13 einfügen, ohne die bereits für andere Funktionen verwendeten Registerbits zu verschieben und so die Abwärtskompatibilität mit dem vorhandenen Code (z. B. für den STM32F1) zu beseitigen, der sie verwendet hat.Deshalb haben sie versucht, eine gewisse Abwärtskompatibilität beizubehalten, was dazu führt, dass an unerwarteten Stellen neue Registerbits hinzugefügt werden.
Ein weiteres Beispiel war die Aufrechterhaltung der Registerzuordnung für eigenständige UARTs von 8250 bis 16550, wobei an anderer Stelle in der Registerzuordnung neue Register hinzugefügt wurden.
quelle
Sie haben Recht mit
Soweit ich weiß, haben Bitpositionen selbst in den meisten Fällen fast keine Auswirkungen auf das Design (meine ich bei der Chip-Implementierung). Designer versuchen normalerweise, alles zu nutzen, was verfügbar ist. Und in einigen Fällen, wenn Sie versuchen, Breiten usw. zu erweitern.
Es gibt jedoch einige Fälle, in denen die Bitpositionen absichtlich weit voneinander entfernt sind. Speziell für Bits, die kritisch sind und NICHT durch unbeabsichtigte Schreibvorgänge (aufgrund falscher Positionen / Masken oder aus Sicherheitsgründen verschlüsselt) geändert werden dürfen, die dazu führen können, dass das System in einem unerwünschten Zustand endet.
quelle