LoginSignup
0
0

More than 1 year has passed since last update.

Kageki (TD4互換機) で UART 通信

Posted at

TD4の命令を実行できる自作CPU「Kageki」 でUART通信をしてみた。
今回は、「受信したバイトのビットNOTを送信する」という処理を行う。

プログラム

位置 機械語   アセンブリ言語
--------------------------------
0    10111000 FIRST: OUT 1000
1    01100000        IN  B
2    01011000        ADD B, 1000
3    11100101        JNC START
4    11110000 DELAY: JMP FIRST
5    10110000 START: OUT 0000
6    00111000        MOV A, 1000
7    00000000        ADD A, 0000
8    01100000 LOOP:  IN  B
9    01011000        ADD B, 1000
A    00000000        ADD A, 0000
B    10010000        OUT B
C    00000001        ADD A, 0001
D    11101000        JNC LOOP
E    00000000        ADD A, 0000
F    11110100        JMP DELAY

0番地~4番地で、受信スタートビット検出のポーリングを行う。
5番地で、スタートビットを送信する。
6番地で、送信するビット数を設定する。
8番地で、ビットを受信する。
9番地で、受信したビットを反転する。
B番地で、ビットを送信する。
C番地~D番地で、ビットのカウントを進める。
F番地で、時間を稼ぎつつポーリングに戻る。

ポーリングの間隔は5クロック、
ポーリングでスタートビットを検出してから最初のビットを受信するまでの時間は6クロック、
1ビットあたりの時間は6クロックとなっている。

実行方法

  1. Kagekiをセットアップする (ROMの書き込み、接続など)
  2. Kagekiのクロック速度とUARTの通信速度を適切に設定する
    • UARTの通信速度をクロック速度の1/6に設定する
    • 例えば、クロック50kHz、UART 8333bps
  3. UARTでデータを送信すると、ビットNOTをとったデータが送り返されてくる

実行結果

Kagekiのクロックを50kHzに設定し、
USB-シリアル変換器 TTL-232R (秋月電子通商 M-05841) および Tera Term を用いて8333bps設定で通信を行った。
また、USBロジックアナライザを用いて通信の状況を確認した。

接続した様子

適当なメッセージをCyberChefでビット反転してファイルに保存し、Tera Term の「ファイル送信」機能で送信した。
すると、Tera Term でビット反転前のメッセージを受信できた。
(ビット反転したメッセージをKagekiがビット反転したため、もとに戻った)

Tera Term でメッセージの受信に成功

ロジックアナライザで確認すると、タイミングによってストップビットが仕様より短くなってしまっている。
ただし、今回の構成では受信への支障はなかったようである。

ロジックアナライザでの確認結果 1
ロジックアナライザでの確認結果 2

D0がパソコンからKagekiに送信した信号 (TX)、D1がKagekiからパソコンに送信した信号 (RX) である。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0