[H8-ML(3256)] Re: 割込みによるシリアル通信について
From: tsuzuki@xxxxxxxxxxxxxxxx (鈴木)
Date: 2003年05月25日(日)16時03分15秒
Chaya様、ありがとうございました。

>・ _ei(); _di();  ---> メインブレーカー
>・ SCI0.SCR.BIT.RIE = 1;   /* 受信割込み許可 */ や
>   SCI0.SCR.BIT.RIE = 0;   /* 受信割込み禁止 */ は、
>                 ---> 個別ラインブレーカー
メインブレーカーと個別ラインブレーカーの話、
大変よく分かりました。

また、使うタイミングについても、
>一般的には、個別のブレーカーをオンした(周辺個別のInitial関数)後、
>全体のブレーカーをオンして使い始めます。だから、使い方にもよりますが
>メインルーチンのメインループ前にオンします。
とのこと、とりあえず分かりましたが・・・

すみません。これでも少し不安が残りまして、
周辺個別のInitial関数??・・・が、特にない?・・
よく分かっていませんが、・・・
具体的に、個別ラインブレーカーの使う場所は??

理解が悪くてすみません。
ご教授の程、よろしくお願い申し上げます。 (鈴木)
(C言語、マイコン開発は、数ヶ月の初心者です。)

----------------------------------------
私の現状のメイン関数は、

void main(void){
    char STR;    /*受信文字列*/
    int FLG=0;   /*割り込みでのデータ受信フラグ*/

    sci0_init(); /*シリアルポート0の初期化*/

    _ei();      // 割込み全体許可(Chaya様からのご教授)
    while(1){    // メインループ
        ・・・・・
    if(FLG){ /*割り込み受信フラグ*/
          printf("");/*文字列表示*/
          FLG=0;
        }
    }
}

その他の関数は、
(1)シリアルポート0の初期化関数 [3239]に記述。
(2)割り込み時の動作関数 []
  ・割込みで1文字受信する関数
    char intrxi0(void){
      char data;/* 受信データ変数宣言 */
      switch(SCI0.SSR.BIT.RDRF)/* 受信状態判定 */
        {
          case 1:/* RDRF=1 正常受信 */
            SCI0.SSR.BIT.RDRF = 0;/* 受信フラグクリア*/
            data = SCI0.RDR;/* data 取り出し */
            return(data);
          default:/* エラー発生時 */
            SCI0.SSR.BYTE &= 0xc7;/* エラーフラグクリア */
            return(0xff);
        }
    }

  ・受信文字列を変数に保存する関数
      -- (YelowSoftのProjectに割り込みを登録する関数)--
    int str_read(){
	int i;
	char rx_data;/*受信データ*/
	char *p;/*ポインタ変数*/
	p = &STR;
        do{
          rx_data = intrxi0();	/* 1文字受信 */
          if(rx_data != 0xff){
            *p = rx_data;/* 1文字を文字列に格納 */
            p++;/* 次の文字アドレスへ 
        }while(rx_data != '\0');
        FLG = 1;/**/	
    }

以上です。
----------------------------------------
※予定の動きとしては、
 受信割り込みにより、str_read()関数が動作して
 変数STRに文字列の全体が取り込まれる。
  私設の受信フラグ(FLG変数)を1にする。
  FLGが1になったら、printf文で、文字列(STR)を表示する。
----------------------------------------

----
鈴木  tsuzuki@xxxxxxxxxxxxxxxx

スレッド概略
[3239(R)](起点)
 └[3243(U)]
   └[表示中]
     └[3259(1)]


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


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