「つくってあそぼ」こと「つくってワクワク」が2013/3で終了するらしいです。
今でも見ている、という訳ではありませんが好きな番組でした。
ちなみに、前回のブログタイトルはこれをパクっています。
2ステップ目。いっきまーす。
今回も複数回にまたがります。ご了承ください。
■周辺ハードウェア
ベリフェラル、周辺インターフェース、周辺I/Oと呼ばれる。
CPUはCPU単体では意味をなしません。
様々な周辺ハードウェアを制御してこそ、真価を発揮します。
周辺ハードウェアといっても何のことか分かりにくいですね。
どうやら、CPUに繋げるやつは全部と考えて良さそうです。
キーボードやマウスはいかにも。
更には外部メモリ(レジスタ等は違う)なども周辺ハードウェアと呼ぶようです。
これらはI/O(input/output=入出力)の名の通り、データを転送するためにあります。
■コントローラ
データはただ転送すれば良いのではなく、転送速度や信号の電圧など、
それぞれに決まったインターフェースがあります。
更には受信可能通知を受けたらデータを送信、受信エラーが起きたら・・・等と
データ転送のための手順も存在します(プロトコル)。
これらすべてをソフトで実現するのは非常に手間ですし、処理が多い。
そこで、専用のICチップ(コントローラ)に任せてしまいます。
これにより、CPUはコントローラに対して送信要求を出す・データを受け取る
等の簡単な制御でデータのやりとりが出来ます。
teratermなんかはソフトでシリアルの送受信を実装しているのでしょうか。
ちょっと気になる。
■コントローラの制御
コントローラの制御は(コントローラの)レジスタを用いて行います。
このレジスタに対して操作(値の書き込み)をすると、
書き込んだ値が送信される、データ受信はこのレジスタのフラグを見る等。
では、どうやってレジスタにアクセスするのか。
それには、アドレスを使います。
■アドレス
メモリの位置情報のことをアドレスと呼びますね。
そこで、メモリについて考えてみます。
CPUにはデータ転送用のデータバス、アドレスを指定するためのアドレスバスがあります。
バスはCPUとメモリを繋ぐ線のことで、電圧の高低で1(High),0(Low)を表わします。
つまりバス1本につき1ビットを表わせる、ということです。
32ビットCPUの場合、バス幅は32本のことが多いようです。
0x00000000-0xffffffffまでのアドレスを表現でき、1つのアドレスには
1byteのデータが書き込まれるので、4GB程のメモリ空間にアクセスできることになります。
アクセスできるからといって、4GBのメモリ(DRAM)が繋がっているかといえば、
そうではなく、数MB単位のDRAMを複数繋げています。
この場合、下位ビットでDRAMのメモリ位置を表わし、使用していない上位ビットで
どのDRAMを使用するか指定します。
DRAM側にはチップセレクト(CS)と呼ばれる信号線を持っており、これが1となった場合に
動作する、という仕組みを持っています。
比較機を使用し、特定のアドレスでCSに信号を送るようにします。
レジスタも同様です。
DRAMと同じくCSを持ち、特定のアドレスでレジスタにアクセスするよう配置します。
そして下位ビットにより、レジスタ位置を特定します。
これでレジスタ(=コントローラ)の操作を行うことができます。
=====
以上の様に、DRAMに加え、コントローラのレジスタもアドレスに配置する(マッピング)
I/Oの操作方法を、メモリマップドI/Oと呼びます。
どのアドレスに何がマッピングされているか、どのレジスタがどういう役割か等
マニュアルとにらめっこすること必須です。
次回に続く。
前:組込みOSをつくってわくわく[1ステップ後編](Hello,World)
次:まだ
リンクは後で。