ホストPCからコードを受け取るために1文字入力も作っておきます。これも今までのシリアルコントローラと同じでキャラクタが受信バッファに入ったかRxRDYフラグをチェック、これが立つまで永久ループ(用途によってはタイムアウトも必要ですが)し、フラグが立ったら受信バッファを読取るという簡単な作りです
1文字出力ルーチンでは危ういところでしたがステータスレジスタも読めるようになったし、こちらは楽勝、と思ったのですが・・・
このルーチンを呼ぶと、ホストPCからデータを送ってなくてもすぐにリタンしてしまいます。そして返り値としても受信キャラクタは常に0xFF。つまり受信データありが正しく判断できてないようです。今度もバスタイミングを見てみました
ch1:/SIOCS ch2:/RD ch3:D0(=RxRDYbit)
ステータスレジスタの読取部分で、RxRDY=0;受信データなし、本来はD0=0が読取らなくてはいけないのですが/RDパルスの終縁ギリギリでやっとD0=0が出始めますが実際はこれが読めずに前状態のD0=1をラッチしてしまって受信データありと誤認したのでしょう。
1文字出力のTxEMTは辛うじて読めたようですがやはり/RD幅が規格以下でデータvalid期間が短いのがダメっぽいです。マシンステートの追加挿入を考えてみます