[H8-ML(4319)] Re:Message for h8
From: 石山 峰之 <m_ishi8@xxxxxxxxxxx>
Date: 2004年01月19日(月)16時55分44秒
先ほどの質問について丁寧なご回答をありがとうございます。
少しではありますが、CCRについて理解できました。メイン関
数内では割り込み処理は出来ないというご指摘をいろいろな方
々から受け、改めてプログラムを作り直しました。

#include <3048f.h>

#pragma interrupt(intimia1)
extern unsigned int cnt0;                        /* 信号
のHighの時間を記憶 */

void main(void)
{
    cnt0  = 0;                                   /* cnt0
初期化 */
    PA.DDR = 0x00;                               /* Port-A
は入力設定 */
    PB.DDR = 0xff;                               /* Port-B
は出力設定 */
    
    ITU.TSTR.BYTE = 0x00;      /* ひとまず全タイマー停止
*/
    ITU.TSNC.BYTE = 0x00;      /* 全タイマーは独立動作 */
    ITU.TMDR.BYTE = 0x00;      /* ITUはすべて通常動作 */ 
    ITU.TFCR.BYTE = 0x00;      /*
ITU3,4およびGRA3,4,GRB3,4
は通常動作 */
    ITU.TOER.BYTE = 0x00;      /* ITU3,4による端子出力は
禁止 */
    ITU.TOCR.BYTE = 0xff;      /* 外部トリガ禁止 */
    ITU1.TCR.BYTE = 0x83;      /*
クロックの1/8で動作。TCNT
のクリア禁止 */
    ITU1.TIOR.BYTE = 0xdf;     /* 両エッジでGRAへインフ
゜ットキャプチャ */
    ITU1.TIER.BYTE = 0x03;     /* IMFA,IMFBによる割り込
み許可 OVIE禁止 */
    ITU1.TSR.BYTE = 0x00;      /* 全割り込みフラグクリア
*/
    ITU1.TCNT = 0x00;          /* カウントクリア */
    ITU1.GRA = 0;              /* GRA初期値設定 */

    ITU.TSTR.BIT.STR1 = 1;     /* ITU1スタート */
    
    while(1){                                    
            PB.DR.BYTE =PA.DR.BYTE;             
      }
}

void intimia1(void){                                      
                                                          
    
if(PA.DR.BIT.B2){           /* 立ち上がりエッジの場合 */
                     ITU1.TCNT = 0x00;
                }           /* カウントをクリア */
else{                       /* 立ち下がりエッジの場合 */
                     cnt0 = ITU1.GRA;        /* 値をcnt0
に記憶 */
    }                                                     
           
ITU1.TSR.BIT.IMFA = 0;           /* 割り込みフラグ解除 */
}

ところでCCRの設定についてなのですが、次のスタートアップ
ルーチンの、init:の2行目のldc	#0,ccr	;CLEAR INTERRUPT
MASK,NOT USE UI BIT
 は、「CCRに割り込み許可を与えている」という意味でいい
のでしょうか?そう僕は解釈しているのですが...。そのた
め上のメインプログラムには記述しませんでしたが、やはり記
述すべきでしょうか?

;STARTUP ROUTINE H8/300H
;
	.cpu 300ha:20		;H8/300H advanced 1Mbyte MODE
	.import _main           ;外部関数mainを定義
        .import _intimia1	;外部関数intimia1を定義
	.export _cnt0		;グローバル変数cnt0を定義
	
;
	.section vect,data,locate=h'00000 ;割込みベクトルの頭
;
;割り込みベクトルテーブル
	.data.l init		;1 reset vectのジャンプ先
;
	.org	h'0070		;ITU1 GRAによる割込みテーブル位置
	.data.l	_intimia1       ;ITU1 GRAによる割込み処理先
;
	.org	h'00100		;主プログラムの開始
init:	mov.l	#h'fff10,er7	;SPの設定
	ldc	#0,ccr		;CLEAR INTERRUPT MASK,NOT USE UI BIT
	jmp	@_main		;関数mainへのジャンプ
	.section D,DATA,locate=h'ffd00 ;変数用アドレス
	_cnt0:	.res.w 1	;cnt0変数のアドレスを確保
;
	.end

またまた長い文になりましたが、どうぞご説明をお願いします
。


__________________________________________________
Do You Yahoo!?
Yahoo! BB is Broadband by Yahoo!
http://bb.yahoo.co.jp/

スレッド概略
[4293(R)](起点)
 └[4316(U)]
   └[表示中]
     └[4321(1)]


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


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