バス幅が16bitのメモリを接続する場合は、
以下のようにマイコンのアドレス線を1bitシフトダウンする。
<16bitメモリとマイコンのアドレス線接続>
マイコンのアドレス端子 外部メモリのアドレス端子
A1-------------------------------A0
A2-------------------------------A1
A3-------------------------------A2
バス幅が32bitメモリを接続するんなら2bitシフトダウンして以下のようになる
<16bitメモリとマイコンのアドレス線接続>
マイコンのアドレス端子 外部メモリのアドレス端子
A2-------------------------------A0
A3-------------------------------A1
A4-------------------------------A2
なんでシフトするかといえば、たぶんマイコンはバイトアクセスするつもりでアドレッシングするからだと思う。(=バス幅が8bitのメモリがくっついているつもりでアドレッシングする)
だから、アドレス線が16本あるマイコンが0バイト目をアクセスしたいときには
A[0:16]=0x0000
1バイト目だったら
A[0:16]=0x0001
2バイト目だったら
A[0:16]=0x0002
とアドレス出力する。
○16bitバスのメモリがくっついている場合
マイコンが0バイト目のデータが欲しくて
A[0:16]=0x0000
というアドレスを出力すると
メモリは0バイト目から16bit分をデータバスに吐き出す。
つまり、0バイト目と1バイト目を吐き出す。
この場合は余分な1バイト目がくっついているけど、マイコンが欲しい0バイト目も出てきているから問題ない。余分な分は無視すればいいのだから。
では、マイコンが1バイト目のデータが欲しいときどうなるか?
A[0:16]=0x0001
というアドレスをメモリがもらうと、1 x 16bit目から16bit分を吐き出す。
つまり、2byte目と3byte目がでてきてしまう。
これにはマイコンが欲しかった1バイト目は含まれていない。
こんな問題が起きてしまうので、1bitシフトダウンしておく。
こうすれば、ぴったりマイコンが欲しいと思ってアドレッシングしたデータが出てくる。
16bitメモリだから1bitシフトだが、32bitならもう1bitシフトしないといけないので結局2bitシフトすることになる。
2009年10月25日日曜日
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿