USB-シリアル変換モジュール(FT232RL基板) + CYPRESS CY8C27443

センサ動かしても結果を使えなければどうしようもないので、無難そうなシリアル経由で飛ばすことにしました。


手軽そうな秋月のチップを使ってさっそく接続。
232RLのTX→27443のRX
232RLのRX←27443のTX


プログラムは、スタートアップ時にUART_CPutString()で「Test」と表示させ、その後メインループでキー入力をエコーバックするだけのもの。
しかし、文字をぼろぼろ取りこぼしてどうもだめです。文字列の表示は成功するので、おそらく入力を拾う側の問題。


232RLのTX→232RLのRX
とループバックさせてみると、取りこぼしなく全部返ってきました。232RLは正常動作。
動作確認用LEDをつけて、文字を拾うたびに反転させてみると… どうも「文字が得られるまでブロックして、得た文字を返す」UART_cGetChar()が取りこぼしているようでした。
UART_cReadChar()を使って自前で取得し、エラーコードの0以外が返ったらエコーバック、と書いてみても挙動は同じ。エラーコードチェックせず吐きまくるようにすると、案の定止まらなくなりましたw


割り込み受信をちゃんと作ろうと、ハンドラを書いて割り込みベクタに設定すると、今度は最初の一文字を返して停止するようになってしまいました。メインループ内で点滅させているLEDが止まってしまっているので、割り込みハンドラから帰ってくるのに失敗していそうに見えます。
#pragma指定をしたり、自前でA, Xレジスタをpush/popして退避に努めてみたりしたけども改善せず。どうしよう?といったところで今週は終わっています。