[H8-ML(2088)] Re: SCIの受信エラー
From: Shigetoshi Mizuno <nong@xxxxxxxxxxxxxxx>
Date: 2002年07月19日(金)13時32分01秒
こんにちは、水野と申します。

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
 */

スレッド概略
[2087(R)](起点)
 └[表示中]
   └[2090(1)]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]