はじめまして。真と申します。
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/