コンピュータは計算することだけでなく、接続されているIOデバイスを制御することも利用する目的です。特に組込み機器では、接続されているIOデバイスの制御が主目的です。例えば、モータの制御や各種センサ情報の読み取りなどです。
本記事では、これらのIOデバイスはどのように接続されて、どのように制御されるかについて解説します。
IOデバイスは大きく2つの接続方法があります。
1つ目がメモリマップドIOです。メモリマップドIOでは、CPUのメモリアドレス空間にIOデバイスをマッピングする方法です。
2つ目は、CPUが独自に持つIOデバイス用のアドレス空間にIOデバイスをマッピングする方法で、IOマップドIOと呼ばれます。ポートマップドIOと呼ばれたりします。
それぞれについて詳しく見ていきます。
メモリマップドIO
メモリマップドIOでは、CPUのメモリアドレス空間にIOデバイスをマッピングする方法です。メモリマップドIOは特に組込み向けのコンピュータで採用されている形式です。
例えば32bitのCPUでは、2^32 通りのアドレスを指定することができます。これは約4GBに相当します。このアドレス空間の一部をIOデバイスを制御するためのアドレス空間として利用します。
この方法を採用すると、CPUがメモリアクセスに利用する命令がそのまま流用できます。多くのマイコンではこちらの方式を利用しています。
ただし、全てのプログラムからどのアドレス空間でもアクセスできてしまうと、セキュリティの観点などから危険です。したがって、メモリ保護機能を使用する用途によっては検討する必要があります。
IOマップドIO
IOマップドIOでは、IOデバイス専用のアドレス空間を保持する方式です。専用の命令でIOポートにアクセスする方式です。従って、アプリケーションコードが暴走してもIOポートには影響が出ないため、ペリフェラルには影響がないというメリットはあります。
IntelやAMDのx86系統のCPUはこちらのIOマップドIOを採用しています。
まとめ
本記事では、IOデバイスの制御方法について解説しました。メモリマップドIOとIOマップドIOについて解説しました。
コメント