[H8-ML(3219)] Re: 割込みによるシリアル通信について
From: Takehiro Amaike <tanpa@xxxxxxxxx>
Date: 2003年05月23日(金)08時59分31秒
はじめまして。天池といいます。
初めて投稿させて頂きます。よろしくお願いします。

わたしもYellowSoftの物を使っています。
以下の例はH8/3067の例なので雰囲気だけつかんでください。
3064でのレジスタはCPUのPDFを参照の事。

割り込み受信する手順としては

1.割り込みした時に飛ぶ関数を書く
 YellowSoftさんのコンパイラでは関数名の前にinterruptと書きます。

interrupt void RXI0_Interrupt(void) {
  unsigned char c;

  while ((SSR0 & 0x40) == 0x40){      // RDRF(受信データフル)の確認
    c = RDR0;                         // データ受信
    SSR0 &= ~(0x40);                  // RDRFフラグをクリア

    //・・・この後、cを使った処理を書く。バッファに入れるなど
  }
}

2.該当するSCIの受信割り込みベクタを登録する
 [設定]の中の割り込みタブの中で設定します。
 ベクタ番号はCPUの割り込みコントローラのベクタアドレスを参照してください。
 上の例なら関数はC言語、それと関数名を入れます。

3.初期設定を受信割り込み可能にし、_ei()で全ての割り込みを有効にする。

  /* 関連レジスタの設定 */
  SMR0 = 0x00;                      // 調歩同期 φ
  BRR0 = 14;                        // 38400bps(18.432MHz)
  #asm  nop
  SCR0 = 0x70;                      // 送受信 受信完了/エラー割り込み可能
  _ei();                            // 割り込みを有効にする

あとは3064用に書き換えてあげてください。
ではでは。

----
Takehiro Amaike <tanpa@xxxxxxxxx>

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


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


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