Maafkan saya jika pertanyaan ini sudah dijawab, tetapi saya tidak dapat menemukan jawaban di halaman ini atau di Internet yang lebih luas.
Saya adalah pengembang yang berpengalaman dengan pengetahuan yang layak tentang pemrograman tingkat rendah, tetapi relatif baru untuk pengembangan yang disematkan. Saya telah belajar sendiri pengembangan sistem tertanam menggunakan papan ST-NUCLEO144, yang dilengkapi dengan MCU STM32F746ZG. Satu pertanyaan yang tampaknya tidak jelas bagi saya adalah mengapa bidang bit yang secara logis terkait dalam register mungkin berada di lokasi yang berbeda.
Salah satu contohnya adalah USART_CR1register di STM32746ZG. Kolom M0dan M1bit secara bersama-sama mengontrol panjang kata dalam USART TX / RX, nilai gabungan 2-bit 0b00menentukan 8-bit, 0b01menetapkan 9-bit, dll. Ini semua sangat mudah, kecuali M0pada bit 12 dan M1bit. 28 ... mengapa ini?
Apakah ini karena alasan desain lama, seperti fitur baru dimasukkan ke ruang yang sebelumnya dipesan? Apakah karena alasan yang terkait dengan desain chip, yang tidak saya pertimbangkan, atau apakah ada tujuan yang lebih besar untuk hal ini yang tidak saya lihat?
Jelas ini cukup sepele untuk diatasi dengan sedikit-masking, tapi saya hanya ingin tahu.

