こんにちは、水野と申します。
On Fri, 19 Jul 2002 12:37:03 +0900
"Kazuhiro Nonaka" <non@xxxxxxxxxxxxx> wrote:
> while(1){
> data=inch();
> if(data=='\r')
> outcrlf();
> outch(data);
> }
> 手でキー入力する分には、うまくいきます。
> ところが、ハイパーターミナルでテキストファイル送信をすると
> 受信エラーが発生するようです。
ソースを見ただけですが、おそらくオーバーランエラーが
出ているのではないかと思います。
理由は、受信動作 inch の呼び出し間隔が開きすぎ、次回 inch 呼び出し前に
1byte受信し(これはセーフ)、さらにもう1byte受信してしまった
ためにオーバーランがでたのだと。(ウソダッタラゴメンネ)
特に outch は
while(!SCI1.SSR.BIT.TDRE); /* transmit ready? */
のように、送信Ready をポーリングしており、ここで受信とは無関係に
待たされている様に思えます。
私が確実なシリアル送受信が必要な場合、送受信の割り込みと
キュー(順番待ち行列)を使っています。
ちょうどいいサンプルを見つけることはできませんでしたが、
調べてみてください。
/* 水野 成俊
* Shigetoshi Mizuno
* mailto: nong@xxxxxxxxxxxxxxx
*/