[H8-ML(4278)] main 関数に戻れない
From: 橋本 真樹 <h8_mail_list@xxxxxxxxxxx>
Date: 2004年01月13日(火)12時28分56秒
はじめまして。真と申します。
AKI-H8/3048Fのリセット同期PWM(バッファ併用)を利用して
2個のラジコンサーボを制御するプログラムを作ってみたので
すが、思いどうりの動作をしません。LEDやシリアル通信を
用いてデバックをしてみたところ、int_imia3割り込み処理後
にmain関数に戻れていない様に思うのですが、何が原因か皆目
検討がつきません。私が確認できた事は、割り込み処理は最後
まで実行され、割り込み回数をカウントする変数cntがインク
リメントされている事、main関数の中で初期化したcnt値が割
り込み処理中のcnt値に反映されている事です。開発環境は、GCC
Developer lite 1.5.0.18
(最適化なし、デファルトの設定ファイル)です。main関数に
戻れない原因や他の不具合点についてご回答いただければ幸い
です。お手数をおかけしますが、どうか宜しくお願いします。
見にくいプログラムで申し訳ありませんが、以下に示します。

/*ラジコンサーボ制御プログラム(リセット同期PWMモード
とバッファ機能を併用)*/
#include "3048.h"
volatile unsigned int cnt;  /*グローバル変数cntで割り込
み回数をカウント*/

/*****ITU3コンペアマッチA割込み処理ここから*****/
void int_imia3(void)
{
   cnt++;
   ITU3.TSR.BYTE=0xF8;    /*ITU3コンペアマッチAフラグを
もどす*/
}
/*****ITU3コンペアマッチA割込み処理ここまで*****/

/*****メイン処理ここから*****/
main(void)
{
       EI;
       cnt=0;                /*cntの初期化*/
       P4.DDR=0x00;
       P4.PCR.BYTE=0xff;
       P5.DDR=0xff;
       P5.PCR.BYTE=0x00;
       while(P4.DR.BIT.B4==1);
       while(P4.DR.BIT.B4==0);
       P5.DR.BIT.B0=1;
       ITU.TSTR.BYTE=0xE8;    /*ITU3カウント停止状態*/
       ITU3.TCR.BYTE=0xa3;    /*GRA3カウンタクリア要因に
設定*/
                              /*内部クロック:φ/8に設定*/
       ITU.TFCR.BYTE=0xFF;    /*ITU3をリセット同期PWMモ
ードに設定*//*バッファ動作を設定*/
       ITU3.TCNT=0x0000;      /*ITU3カウンタクリア*/
       ITU3.GRA=0x9c40;       /*パルス周期の初期値*/
       ITU4.GRA=0x0BB8;       /*パルス幅の初期値*/
       ITU3.GRB=0x0BB8;       /*パルス幅の初期値*/
       ITU4.GRB=0x0000;       /*パルス幅の初期値*/
       ITU3.BRA=0x9c40;       /*パルス周期バッファの初期
値*/
       ITU4.BRA=0x0BB8;       /*パルス幅バッファの初期値*/
       ITU3.BRB=0x0BB8;       /*パルス幅バッファの初期値*/

       ITU4.BRB=0x0000;       /*パルス幅バッファの初期値*/
       ITU3.TIER.BYTE=0xF9;   /*ITU3コンペアマッチA割込
みを許可*/
       ITU.TSTR.BIT.STR3=1;   /*ITU3カウントアップ開始*/
       /***無限ループここから***/
       while(1)
       {
          if(cnt>=50)
          {
              cnt=0;
              ITU4.BRA=ITU4.BRA+0x0064;    /*パルス幅バ
ッファの更新値*/
              ITU3.BRB=ITU3.BRB+0x0064;    /*パルス幅バ
ッファの更新値*/
          }
          else
          {
              P5.DR.BIT.B1=1;
          }
       }
       /***無限ループここまで***/
}
/*****メイン処理ここまで*****/

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

スレッド概略
[表示中](起点)
 ├[4279(1)]
 └[4280(2)]


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


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