2012/03/06
■ [z80]自作Z80 CP/Mマシン(16)
ブレッドボードZ80マイコン、ダウンロード回路に使う予定のFT232RLは本来USBシリアル変換ICとして大変有名ですが、BitBang Modeを使うと8bitの入出力ポートとして使うことができます、またCBUS BitBang ModeでCBUS0〜CBUS3の4bitも入出力ポートとして使えます。
ただ、BitBang ModeとCBUS BitBangモードは同時には使えず、8+4の計12bitの入出力ポートとしては簡単には使えないようです、、残念。
それからBitBang Mode時の書込み(WR#)と読込み(RD#)のストローブ出力を、CBUS0〜CBUS3に割付けられますのでこちらも試してみます。
作業はubuntu Linux11.10で行いました。 Synapticパッケージマネージャでlibftdi1-devと関連するパッケージをインストールすると、/usr/share/doc/libftdi-dev/examplesに非同期BitBang Modeのサンプルプログラムのソース(bitbang.c)がありますので参考にしてテストプログラムを書きます。
コンパイル・実行はrootで行います。
gcc -o bitbang bitbang.c -lftdi
次に、VirtualBox上のWinXPでFT232の設定ツールのMProgでCBUSピンにWR#とRD#を割り付けます(WR#はCBUS0,CBUS1以外では働かなかった)。
とりあえずLEDをチカチカさせて動作確認後、連続出力させてオシロで波形を確認しました。 出力データは00とFFを交互に計8バイト出力し、データのD0(上段)と書込み信号のWR#(下段)を観測しています。
画像では8byte等間隔に並んでいますが実際には必ずしも等間隔には出力されませんでした。 ソース上では出力するデータ8byte分をバッファに納めftdi_write_data()関数を呼んでいます。 連続で関数の呼び出しすると数ms間(2〜4ms以上?)が空きました、できるだけ1度の呼び出しで出力したほうが良いようです。
次に一部を拡大して観測した画像です、データを出力してから約180ns後に100ns程度のWR#パルスが出ています、ラッチやシフトレジスタの制御に使えそうです。
参考: Z80に関するエントリ、 動画(ニコニコ)はこちら