1バイトおきに受信してしまう
- 4 名前: tam 投稿日:2005/03/22(火) 20:06 ID:NeaX6r6c
- トラ技のはPC側(コントローラ)としての例ですので、コントロールされる側の
ソフトなら、受信時のUNL、OLA、MTA、gtsの出力は不要です。7210の初期化にも
不適当なところがあるかもしれません。
以下は実際に私が使用した受信ルーチンです。トラ技では最初の1文字以降EOIを
受け取るまでループになってますが、ここでは1文字ずつ割り込みで受信しています。
intgpia()
{
gpia = GPIA; /* 7210のアドレスをセット */
ints2 = *(gpia + INTS2); /* 割り込みステータスレジスタ2の読み込み */
if ((ints2 & BINT) != 0) { /* GP-IB割り込み有り */
{
ints1 = *(gpia + INTS1); /* 割り込みステータスレジスタ1の読み込み */
if ((ints1 & BDI) != 0) /* データ入力有り */
{ /* 受信する */
eoi = *(gpia + ADR1) & BEOI;/* EOIをチェック(保存) */
din = *(gpia + DIN); /* 1文字読み込み */
wwout(din); /* 読み込んだ文字を受信バッファに書き込む */
if (eoi != 0 && din != LF) /* EOIなら受信バッファにLFを付加する */
wwout(LF);
}
}
}
DI割り込み以外も割り込みで処理するなら、この中に追加してください。
Nfの設定は、私もわかりませんがfc4.608MHzで私も5に設定しています。
7210を扱う上での注意としては、
・割り込みはエッジでなくレベルで受ける(複数の割り込み要因があるため)
・1回の処理では、1回しかレジスタを読み込まない(割り込みステータスレジスタは読むことでクリアされてしまう。
データ入力レジスタを読むと次のハンドシェイクが始まってしまう、等。コンパイラのオプティマイズにも注意)。
それとハード的な要因として私がCPU:SH1+GPIA:9914で経験した例ですが、CPUのアドレスバスの変化過程で、
一瞬レジスタをリードしてクリアしてしまい、レジスタをリードしてもフラグが立っていないということがありました。
新着レスの表示