[H8-ML(4299)] Re: Message for h8
From: 石山 峰之 <m_ishi8@xxxxxxxxxxx>
Date: 2004年01月16日(金)15時39分30秒
>ITUでルス幅を読み取る場合、インプットキャプチャ割り込み
を用いるのが一般的ですが、センサの繰り返し周期を数Khzに
するとCPUは頻繁に割り込みを処理しなければならず、他の処
理に悪影響を及ぼす可能性があります。全体のプログラムのバ
ランスと加速度センサの使用目的等を良く考えて、必要以上に
周期を短くしないようにご注意下さい。

インプットキャプチャを使ってADXLの出力をH8に取りこみ、計
測するためのプログラムを作ってみました。で、出力波形をシ
ンクロスコープで確認したいのですが、何も波形が出てきませ
ん。プログラムを1行ずつ丹念に調べてもおかしいところはな
かったように思えたのですが。そのプログラムとスタートアッ
プル−チンプログラムを載せます。プログラムが見にくくなっ
てすみません。

*プログラム
#include <3048f.h>

extern unsigned int cnt0;                        /* 信号
のHighの時間を記憶 */

void main(void)
{
    cnt0  = 0;                                   /* cnt0
初期化 */
    PA.DDR = 0x00;                               /* Port-A
は入力設定 */
    PB.DDR = 0x01;                               /* Port-B
BIT0
は出力設定 */
    
    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;      /* 外部トリガ禁止 */
    ITU0.TCR.BYTE = 0x83;      /*
クロックの1/8で動作。TCNT
のクリア禁止 */
    ITU0.TIOR.BYTE = 0xdf;     /* 両エッジでGRAへインフ
゜ットキャプチャ */
    ITU0.TIER.BYTE = 0x03;     /* IMFA,IMFBによる割り込
み許可 OVIE禁止 */
    ITU0.TSR.BYTE = 0x00;      /* 全割り込みフラグクリア 
*/
    ITU0.TCNT = 0x00;          /* カウントクリア */
    ITU0.GRA = 0;              /* GRA初期値設定 */

    ITU.TSTR.BIT.STR0 = 1;     /* ITU0スタート */
    
    while(1){   
               if(PA.DR.BIT.B2){                         
/* 
立ち上がりエッジの場合 */
                                  ITU0.TCNT = 0x00;
                         }                               
/* 
カウントをクリア */
               else{                                     
/* 
立ち下がりエッジの場合 */
                          cnt0 = ITU0.GRA;               
/* 
値をcnt0に記憶 */
                   } 
               ITU0.TSR.BIT.IMFA = 0;
               PB.DR.BIT.B0 = PA.DR.BYTE;                
/* 
割り込みフラグ解除 */
             }
}

このプログラムでは、ITUはTIOCA1だけを使い、また、割り込
み処理をメイン関数の中で行っています。割り込みはメイン関
数でも出来るのでしょうか?


*スタートアップルーチン;STARTUP ROUTINE H8/300H
;
	.cpu 300ha:20		;H8/300H advanced 1Mbyte MODE
	.import _main		;外部関数mainを定義
	.export _cnt0		;グローバル変数cnt0を定義
	
;
	.section vect,data,locate=h'00000 ;割込みベクトルの頭
;
;割り込みベクトルテーブル
	.data.l init		;1 reset vectのジャンプ先
;
	.org	h'0060		;ITU0 GRAによる割込みテーブル位置
	.data.l	_main	        ;ITU0 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)](起点)
 └[4296(U)]
   └[表示中]
     └[4304(1)]


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


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