ワンボードマイコンをつくろう!(パソコンの原点はここから始まった)
TK80ソフトコンパチブル!8080、Z80マシン語からBASICまでこれ1台でこなせます
当記事は2009年11月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 2011.7.5
前へ
次へ
目次へ戻る
ホームページトップへ戻る
☆RS232C
ND80ZVはパソコンとUSB接続してデータやプログラムをパソコンとの間で送信、受信することができます。
ND80ZVはUSB通信とは別にRS232C通信の機能ももっています。
ところがそのRS232C通信の動作テストでエラーがおきてしまいました。

[第91回]

●232C受信データ処理のロジアナ波形

せっかくのロジアナですから、もう少しデータ処理の様子をお見せすることにいたしましょう。
これは前回の続きの波形です。

前回はND80ZVが232C受信をスタートして、データが着信するのを待っているところでした。
まだデータは着信していなくて、PIC18F14K50からは受信バッファエンプティが繰り返し出力されていました。
今回はその続きです。

378900μSのあたりで最初のデータを受け取っています。
下位4ビットが0010で上位4ビットが0001ですから、最初に受け取ったデータは00010010(12)です。
そのあと約200μSのブランクがあってから、またZ80CPU側からREAD信号が繰り返し出されて、PIC18F14K50から受信バッファエンプティが出されています。

次のデータの引き取りは379900μSです。
次のデータは下位4ビットが0100で上位4ビットが0011ですから、00110100(34)です。
データとデータとの間は約1msec空いています。

9600ボーで受信していますから、それは9600ビット/秒の速度になります。
1バイトのデータは、8ビットのデータにスタートビットとストップビットを加えて10ビットのデータになりますから、960バイト/秒の転送速度になります。
つまりデータを受信する間隔は約1msecということになります。
上のロジアナ波形と一致しています。

ところでZ80CPU側が1バイトの受信データを引き取ったあと、約200μsecの空きがありますが、これはなんでしょうか?
1バイトのデータをメモリに書き込むにしては、余りに時間がかかりすぎています。

実は、ここで、受信したデータを書き込んだメモリアドレスを、7セグメントLEDに表示させているのです。
232Cデータを受信してそれをメモリに格納していっても、7セグメントLEDの表示はなにも変わらない、ということですと、いったいどこまで受信しているのか、いないのか、長いデータなどですと余計に不安を感じます。
そこで、受信データを書き込んだメモリアドレスを7セグメントLEDのデータ表示部(右側の4桁)に表示させることにしたのです。
メモリアドレスはデータを書き込むごとにインクリメントされますから、7セグメントLEDがカウントアップされていくのが見えることになります。

7セグメントLEDにデータを表示させるためには、データ表示用のアドレスに表示データを書き込んだあと、それを各桁ごとに7セグメントの表示データに変換して、LED表示エリアに送らなければなりません。
そのためのモニタサブルーチンをCALLすることで、7セグメント表示エリアに、セグメント表示に変換されたデータが書き込まれて、それがDMAによってLED表示回路に送られてLED表示が行われます。

そのデータの転送やセグメント変換などの処理のために約200μsecかかるために、データ引き取り後にそれだけの間の空きがあって、そのあとになって、受信データを要求するREAD信号が出され、受信バッファエンプティが返されることになります。

●232C受信中の写真です

[8][0][0][0][ADRSSET][*(I/O)][SI]とキー操作して、232Cデータを受信中の写真です。

ロジアナのプローブがいっぱいくっついています。
7セグメントLEDのアドレス表示部には受信したデータを格納する先頭のアドレスが表示されています。
データ表示部は8388と表示されているように見えますが、約1msecごとにカウントアップしますから、下位2桁は全点灯しているようにしか見えません。
でも他の桁に比べると右の2桁はややトーンが落ちているように見えます。

●波形をもう少しスケールアップしてみました

100KHzではちょっと大雑把すぎますから、もう少しスケールアップして、信号間のタイミングも見えるようにしてみました。

Z80READが先にアクティブになって、それからD0〜D3とPICSTBが出力されていることがわかります。
最初のデータは00100001(21)です。

●DMAの様子も見てみました

今回の作業のそもそものきっかけとなった、LED表示のためのDMAアクセスが232Cデータの受信中に発生しているところの波形も確認してみました。

700μSにBUSAK信号が見えます。
DMAアクセスです。
Z80READの間隔がその分だけ伸びていますが、今回はデータの受け渡しの方法を変えましたから、DMAはデータの読み取りに影響は与えません。

2番目のデータの引き取りです。

データは00000000(00)です。
最初のデータから1020μS後です。
データを引き取ってから、次にZ80READがアクティブになるのは200μS後です。
この間にメモリアドレスがLEDに表示されるためのシステムルーチンコールが行われています。

次のBUSAK信号です。

さきほどのBUSAKは700μSのところでした。
今回は1880μSのところです。
約1200μSの間隔です。
DMAアクセスの期間は15μS程度です。
CPUをつくろう!第593回(2010.8.26upload)を再編集

ワンボードマイコンをつくろう![第91回]
2011.7.5upload

前へ
次へ
目次へ戻る
ホームページトップへ戻る