rs232c_5.zip
修正点は、以下の通りです。
・RS232C割り込みベクタのスキップ先アドレスの変更
mk2だと、変なアドレスに飛ぶため、妙な動きになる時があります。
・受信時のエラーを表示
受信中に一度でもエラーがあると表示されます。
・送信時に EMPTY になったかどうかを表示
送信時にEMPTYになるのは、シリアルデータが途切れた事を意味します。TxEMPTY はエラーフラグではないので、最悪は取り損ないます。
・送信時、TxEMPTY になってからデータをセットしていたものを修正
・8251のリセットを追加
ボーレートを変更した時や、間違ったデータを受信した後などはリセットした方が無難です。
・ドキュメントを同梱
このプログラムを使って、PC-6001F mk2 でどこまで送受信(特に受信)が可能かを試しました。
受信側は 614400bps 、送信側は512000bps(TxEMPTY有なら、768000bps)まで正常に送受信できました。
どこまで送受信が可能かを算出してみると...
今のプログラムが1バイト受信するのに掛かる時間が 4MHz で 61クロック分です。送信は、83 クロック分です。
パリティなし、ストップ1ビットとして、最高ボーレートを計算すると
受信:4MHz / 61 * (8+1+1) = 655.7 Kbps
送信:4MHz / 83 * (8+1+1) = 481.9 Kbps
となり、受信側は結果と合っています。
送信側は、計算値を超えていますが、多分TxEMPTY を検出できていないと思われます。
(レジスタ読み込み→次のデータ書き込み、の間に、TxEMPTY が出ているんだと思います)