MCU kayıtlarındaki mantıksal olarak ilişkili bit alanları neden genellikle ayrı konumlardadır?


9

Bu soru daha önce yanıtlandıysa beni affet, ancak bu sayfada veya daha geniş İnternette bir cevap bulamadım.

Düşük düzeyli programlama konusunda iyi bilgiye sahip, ancak gömülü geliştirme konusunda nispeten yeni olan deneyimli bir geliştiriciyim. Kendime, STM32F746ZG MCU içeren bir ST-NUCLEO144 kartı kullanarak gömülü sistem geliştirme öğretiyorum. Benim için açık olmayan bir soru, bir kayıttaki mantıksal olarak ilişkili bit alanlarının neden farklı yerlerde olabileceğidir.

Bunun bir örneği USART_CR1STM32746ZG'deki kayıttır. M0Ve M1bit alanları birlikte USART TX / RX sözcük uzunluğu, bir araya getirilir, 2-bit değerini kontrol 0b00belirlediği 8-bit 0b01dışında belirtir 9-bit, vs. Bu tüm oldukça basittir M0bit 12 olduğu ve M1bit olan 28 ... bu neden?

Bu, daha önce ayrılmış alana yeni bir özellik eklendiği gibi eski tasarım nedenleriyle mi? Çip tasarımı ile ilgili nedenlerden dolayı düşünmediğim mi, yoksa görmediğim daha büyük bir amacı var mı?

Açıkçası bu, bit maskeleme ile üstesinden gelmek oldukça önemsiz, ama sadece merak ediyorum.


1
Özellikle UART durumunda, çok eski bir teknolojidir, bu nedenle neden neredeyse her zaman geriye dönük uyumluluktur. UART kayıt bit alanlarının genellikle her yerde ad alanı çarpışmaları veren berbat isimlere sahip olmasının aynı nedeni.
Lundin

Yanıtlar:


13

Bu, daha önce ayrılmış alana yeni bir özellik eklendiği gibi eski tasarım nedenleriyle mi?

Bu özel durumda (ve gördüğüm benzer durumlarda) evet, eski cihazlarla geriye dönük uyumluluğu korumaya ve bu eski cihazlar için önceden yazılmış (belki de iyi test edilmiş ve kalifiye / sertifikalı) kodda gerekli değişiklikleri en aza indirmeye yardımcı olmak için yapılır . Bu nedenle, orijinal kayıt bitlerine bitişik bitler zaten kullanılıyorsa, yeni özellikler ve işlevler (kontrol ve yapılandırma için yeni kayıt bitleri gerektirir) bitişik olmayan bitler kullanmak zorundadır.

Örneğin USART_CR1, eski STM32F1xx ailesinin kaydı.


STM32F1xx kayıt USART_CR1 bit kullanımı

Şekil 1. STM32F10xxx USART_CR1 kayıt kullanımı

Görüntü kaynağı: STM32F10xxx aile referans kılavuzu RM0008, bölüm 27.6.4


Bu eski USART (yalnızca 2 kelime uzunluğu seçeneğiyle) M, iki seçenek arasında USART kelime uzunluğunu yapılandırmak için yalnızca bir bit gerektirir ve bu da 12'dir. 11 ve 13 bitlerinin de nasıl kullanıldığına dikkat edin ve bu nedenle gelecekteki "genişletme" için kullanılamaz .

Eğer söz konusu olduğu gibi, yeni STM32F7 (ve, örneğin, aynı zamanda STM32F4) hakkında USART geç 3 kelime uzunluğu seçeneklerini (7, 8 ve 9 bit) sahip olan ve bu nedenle başka bir yapılandırma biraz ihtiyacı - 12, bit M0ile, M1hemen bit 28 (daha önce yukarıda gördüğünüz gibi STM32F1 kayıt haritasında saklıdır).


STM32F74xxx kayıt USART_CR1 bit kullanımı

Şekil 2. STM32F74xxx USART_CR1 kayıt kullanımı

Görüntü kaynağı: STM32F75xxx ve STM32F74xxx ailesi referans kılavuzu RM0385, bölüm 31.8.1


Yeni M1biti, diğer işlevler için zaten kullanılan kayıt bitlerini taşımadan ve böylece bunları kullanan mevcut kodla (örn. STM32F1 için) geriye dönük uyumluluğu kaldırarak 11 veya 13 kayıt bitlerine koyamazlardı.

Bu nedenle, geriye dönük uyumluluk sağlamaya çalıştılar, bu da yeni kayıt bitlerinin beklenmedik yerlere eklenmesine yol açtı.

8250'den 16550'ye kadar bağımsız UART'lar için kayıt haritasının korunması, kayıt haritasının başka yerlerine yeni kayıtların eklenmesi ile başka bir örnektir.


1
Bunu belirtmek için zaman ayırdığınız için çok teşekkürler. Belki de sormadan önce eski F ailesi referans materyalini kontrol etmeliydim. Yine de hikayede daha fazlası olabileceğini düşündüm.
ajxs

1
@ajxs - Rica ederim. Ben sadece gelen konuşabilir benim deneyimleri (o eski UARTs başka iyi bir örnek vardı). Başka bir kişinin başka ilgili deneyimleri olması her zaman mümkündür ve sorunun zaten kabul edilmiş bir cevabı varsa, bir cevap yazarak zaman harcaması engellenebilir. Yani her zaman cevabımı "kabul etmeyebilir", başkalarının farklı açılardan cevap vermesi için bir gün bekleyebilir (söyle) ve soruyu benimkinden daha iyi yanıtladığını hissedip hissetmediğini görebilir misin? Değilse, o zaman her zaman benimkini yeniden kabul edebilirsiniz :-) Sadece diğer potansiyel cevap perspektiflerini kaybetmenizi istemiyorum.
SamGibson

2
Bu makul görünüyor, tavsiyeni alacağım! Öneri yapmak için çok nazik davrandığınız için teşekkür ederiz. Yarın daha iyi bir cevap gelmediyse seninkini kabul edeceğim. Tekrar teşekkürler.
ajxs

5

Haklısın

".. eski tasarım nedenlerinden dolayı, daha önce ayrılmış alana yeni bir özellik eklendi ..".

Bildiğim kadarıyla, bit konumlarının kendilerinin çoğu durumda neredeyse hiçbir tasarım etkisi yoktur (çip uygulamasında kastediyorum). Tasarımcılar genellikle mevcut olan her şeyi kullanmaya çalışırlar. Ve bazı durumlarda genişlikleri genişletmeye çalıştığınız gibi.

Bununla birlikte, bit konumlarının kasıtlı olarak uzak tutulduğu bazı durumlar vardır. Özellikle kritik olan ve sistemin istenmeyen bir duruma gelmesine neden olabilecek istenmeyen yazmalarla (yanlış konum / maskeler nedeniyle veya güvenlik için karıştırılmış) DEĞİŞTİRİLMEYEN bitler için.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.