令和3年度 秋期 エンベデッドシステムスペシャリスト試験 午前II 問4

8ビットの方向レジスタ及びデータレジスタで構成されるI/Oポートがあり,各ビットにLEDが一つずつ負論理で接続されている。システム起動時にLEDの不要な点灯を避けるための手続として,適切なものはどれか。ここで,レジスタに書き込む値は16進数で表現している。

方向レジスタの構成を示す表
図の説明テキスト

方向レジスタ (MSBはビット7、LSBはビット0に対応)

ビット 7 6 5 4 3 2 1 0
リセット時の値 0 0 0 0 0 0 0 0
表の右下に「0: 入力, 1: 出力」という注記がある。
データレジスタの構成を示す表
図の説明テキスト

データレジスタ (MSBはビット7、LSBはビット0に対応)

ビット 7 6 5 4 3 2 1 0
リセット時の値 不定 不定 不定 不定 不定 不定 不定 不定
表の右下に「0: 点灯, 1: 消灯」という注記がある。
解答・解説

正解: イ. データレジスタにFFを書き込んでから,方向レジスタにFFを書き込む。

システム起動時にLEDの不要な点灯を避けるための手順は、各レジスタのリセット時の値と仕様から導くことができます。

  1. 方向レジスタとデータレジスタの初期状態
    • 【図表: 方向レジスタの構成を示す表】より、方向レジスタのリセット時の値はすべてのビットが 0 です。表の注記に示されている通り、0 は 入力 を意味します。
    • 【図表: データレジスタの構成を示す表】より、データレジスタのリセット時の値はすべてのビットが 不定 です。
  2. LEDの消灯条件
    • データレジスタの注記に示されている通り、LEDは 0 で 点灯、1 で 消灯 となります。
    • したがって、すべてのLEDを消灯させるには、データレジスタのすべてのビットを 1、つまり16進数で FF にする必要があります。
  3. 設定の順序
    • もし先に方向レジスタに FF を書き込んで 出力 状態にしてしまうと、その時点でデータレジスタの 不定 な値が出力されてしまいます。このとき、値が 0 になっているビットのLEDが意図せず点灯してしまいます。
    • このような不要な点灯を避けるためには、まずデータレジスタに FF を書き込んで消灯状態を確定させます。この時点では方向レジスタは 入力 状態のままであるため、LEDの状態には影響しません。その後に方向レジスタに FF を書き込んで 出力 状態にする必要があります。

各選択肢の解説

  • ア: データレジスタに 00 を書き込むと、すべてのビットが 0(点灯)の状態になります。その後に出力状態にすると、すべてのLEDが点灯してしまいます。
  • イ: 正解です。まずデータレジスタに FF を書き込んで消灯状態を確定させ、その後に方向レジスタに FF を書き込んで出力状態にするため、不要な点灯を避けられます。
  • ウ: 先に方向レジスタに FF を書き込んで出力状態にすると、データレジスタの不定な値がそのまま出力され、不要な点灯が発生する可能性があります。さらに、その後に 00 を書き込むとすべてのLEDが点灯してしまいます。
  • エ: 先に方向レジスタに FF を書き込んで出力状態にすると、データレジスタの不定な値がそのまま出力されるため、不要な点灯が発生する可能性があります。

Spineチーム