計測制御技術ラウンジ >> GPIB技術ラウンジ 全部 1- 最新50

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のアドレスバスの変化過程で、
一瞬レジスタをリードしてクリアしてしまい、レジスタをリードしてもフラグが立っていないということがありました。

新着レスの表示

名前 : E-mail(省略可) :

文責:計測制御技術ラウンジ, Powered by ©タカヒロ@みちのく掲示板 [12ch BBS 2.03]