MCUレジスタの論理的に関連するビットフィールドが、しばしば別々の場所にあるのはなぜですか?


9

この質問にすでに回答している場合はご容赦ください。しかし、このページでも、より広いインターネットでも、回答を見つけることができませんでした。

私は経験豊富な開発者であり、低レベルのプログラミングに関してある程度の知識がありますが、組み込み開発は比較的新しいです。私は、STM32F746ZG MCUを特徴とするST-NUCLEO144ボードを使用して、組み込みシステムの開発を教えてきました。私には自明ではないように見える1つの質問は、レジスタ内の論理的に関連するビットフィールドが異なる場所にある可能性があるということです。

1つの例は、USART_CR1STM32746ZG のレジスタです。M0そしてM1ビットフィールド一緒にUSART TX / RXの合成2ビット値の語長制御0b00、指定する8ビットの0b01こと以外はこれは、すべての非常に簡単であるなど、指定9ビットのM0ビット12にあり、M1ビットであります28 ...これはなぜですか?

これは、以前に予約されていたスペースに新機能が挿入されたなど、レガシーデザインの理由によるものですか?それは私が考慮していないのは、チップ設計に関連する理由のためですか、それとも私には見られないより大きな目的がありますか?

明らかに、これはビットマスキングで克服するのはかなり簡単ですが、私は興味があります。


1
特にUARTの場合、それは非常に古いテクノロジーであるため、その理由はほとんど常に下位互換性です。UARTレジスタのビットフィールドに名前空間の衝突が発生するような意味のない名前がよくあるのと同じ理由。
ランディン

回答:


13

これは、以前に予約されていたスペースに新機能が挿入されたなど、レガシーデザインの理由によるものですか?

この特定のケースでは(そして私が見た同様のケースでは)はい、それは古いデバイスとの下位互換性を維持し、それらの古いデバイス用にすでに記述されている(おそらく十分にテストされ、認定/認定された)コードに必要な変更を最小限に抑えるために行われます。したがって、元のレジスタビットに隣接するビットがすでに使用されている場合は、新しい機能と機能(制御と構成に新しいレジスタビットが必要)で非連続ビットを使用する必要があります。

たとえばUSART_CR1、これは古いSTM32F1xxファミリのレジスタです。


STM32F1xxレジスタUSART_CR1ビットの使用法

図1. STM32F10xxx USART_CR1レジスタの使用法

画像ソース:STM32F10xxxファミリリファレンスマニュアルRM0008、セクション27.6.4


古いUSART(2語長オプションのみ)はM、2つのオプション間のUSART語長を構成するために1 ビットのみ必要であり、それがビット12です。ビット11と13も使用されているため、将来の「拡張」には使用できません。 。

あなたが言ったように、新しいSTM32F7(および、たとえば、STM32F4)では、USARTに3つの語長オプション(7、8、9ビット)があり、別の構成ビットが必要です-ビット12はM0M1ビット28になりました。 (上記のように、以前はSTM32F1レジスタマップで予約されていました)。


STM32F74xxxレジスタUSART_CR1ビットの使用法

図2. STM32F74xxx USART_CR1レジスタの使用法

画像ソース:STM32F75xxxおよびSTM32F74xxxファミリリファレンスマニュアルRM0385、セクション31.8.1


彼らは新しいM1ビットをレジスタビット11または13に入れることができず、他の関数ですでに使用されているレジスタビットを移動せず、それらを使用した既存のコード(STM32F1など)との下位互換性を削除しました。

そのため、下位互換性を維持しようとしましたが、予期しない場所に新しいレジスタビットが追加されます。

別の例として、8250から16550までのスタンドアロンUARTのレジスタマッピングを維持し、新しいレジスタをレジスタマップの他の場所に追加しました。


1
これを指摘するために時間を割いていただきありがとうございます。たぶん、私は尋ねる前に、古いFファミリの参考資料を確認しておくべきでした。話はもっとあるかもしれないと思った。
ajxs

1
@ajxs-どういたしまして。私は自分の経験からしか話すことができません(古いUARTは別の良い例です)。他の誰かが他の関連する経験を持つことは常に可能であり、質問がすでに受け入れられた答えを持っている場合、彼らは答えを書く時間を費やすことから延期されるかもしれません。それで、あなたはいつも私の答えを「受け入れない」、誰かが別の視点から答えるのを(たとえば)1日待って、彼らが私の答えより優れていると感じるかどうかを見ることができますか?そうでない場合は、いつでも私のものを再度受け入れることができます。
SamGibson、

2
それは理にかなっているようです、私はあなたのアドバイスをします!提案してくれるほど礼儀正しくありがとうございました。明日までにもっと良い答えが来なければ、私はあなたを受け入れます。再度、感謝します。
ajxs

5

あなたは正しい

"..新しい機能が以前に予約されたスペースに挿入されたなど、レガシーな設計上の理由から.."

私の知る限り、ほとんどの場合、ビット位置自体は(つまり、チップの実装において)設計にほとんど影響を与えません。デザイナーは通常、利用可能なものは何でも利用しようとします。場合によっては、幅を拡張しようとする場合などです。

ただし、ビット位置が意図的に大きく離れている場合もあります。特に重要であり、システムが望ましくない状態になる可能性のある、意図しない書き込み(誤った位置/マスク、またはセキュリティのためにスクランブルされたため)によって変更されないビットの場合。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.