マイコンのI/Oとバス制御
マイコンのI/O(入出力)とバス制御は、CPUが外部の機器やメモリとデータや制御信号を授受するための仕組みである。I/Oポートはレジスタを介して外部の信号と結び付き、バスはアドレス、データ、制御の信号線を複数の機器で共有する。そのため、どの機器をいつ読み書きするかを正しく制御することが、組込みシステムの動作を確実にする前提となる。
I/Oのアドレス空間とアクセス方式
I/Oへのアクセス方式は、専用の命令で独立したI/Oアドレス空間を扱うポートマップドI/Oと、メモリと同じアドレス空間にI/Oレジスタを配置するメモリマップドI/Oに分けられる。ポートマップドI/OではIN命令やOUT命令を用いてI/Oポートを操作する。
メモリマップドI/Oでは、I/Oレジスタに割り当てられたアドレスへ、通常のメモリ読み書きと同じ命令でアクセスする。そのため、メモリマップドI/OにIN命令やOUT命令を用いるという考え方は誤りである。 C言語では、I/Oレジスタのアドレスをポインタで指定し、そのポインタを通じて読み書きするのが一般的である。
コンパイラは変数への読み書きを省略したり複数の読み出しをまとめたりする最適化を行う。そのため、I/Oレジスタを指すポインタについては、アクセス先の型にvolatile型修飾子を付けて宣言し、最適化を抑止する必要がある。 一方で、ファイルスコープの変数にstaticを付けるだけでは、読み書きの省略を防ぐ効果はない。
バスアクセス時間とウェイト・レディ
バスのデータ幅とアクセスに要するクロック数は、命令の処理時間を左右する。32ビット幅の内蔵ROMは4バイトの命令を1回のアクセスで取得できるのに対し、8ビット幅の外部ROMでは同じ命令の取得に4回のアクセスが必要になる。 処理時間は、アクセス回数と1回あたりのクロック数から算出し、クロック周期を掛けて時間に換算する。
ウェイト機能とレディ機能は、アクセス速度の遅いI/Oデバイスと、高速なMPUの動作を同期させるための仕組みである。ウェイト機能はMPUがバスサイクルを延長して待つ機能であり、レディ信号は機器側の準備が整ったことを示す信号である。 両者は進行中のバスアクセスを完了させるために使われる。
バス調停は、MPUとDMAコントローラのどちらにバスの使用権を与えるかを決める仕組みであり、ウェイトやレディの役割ではない。 また、機器の処理完了をMPUに知らせる方法としては割込みが用いられる。
出力ポートの初期化と負論理LED
LEDを負論理で接続した場合、出力がLowのときに点灯し、Highのときに消灯する。そのため、起動直後に出力ポートの値が不定となると、LEDが不要に点灯する。
不要な点灯を避けるには、まずデータレジスタに消灯に対応する値を書き込み、その後に方向レジスタを出力に設定する。出力に設定した時点で既に消灯の値が出力されているため、点灯を生じさせずに済む。
逆に、方向レジスタを先に出力に設定すると、データレジスタはリセット後の不定値のままピンに出力される。この順序の誤りが起動時の不要な点灯の原因となる。
この節の続き
- 入力検出とランプ・キースキャンの回路判断
- データ転送方式の特徴
- 試験で問われやすい区別
ここまでが冒頭部分です。ログインすると、無料でも1日2節まで全文をお読みいただけます。
アプリでこの節を読む