(toppers-users 3489) TOPEERS JSP Ver1.4.3でのタイマー追加について
Mineo Nagashima
wbs03263 @ mail.wbs.ne.jp
2011年 6月 27日 (月) 13:34:29 JST
関係者の皆様へ
現在、TOPPERS JSP Ver1.4.3を使用させて頂き、モーター制御に取り組んでいまして
ITU1のタイマー割り込みを使いたいと考えていますが、以下の方法をとりましたが
うまくいきません。
現象:ITU1のタイマー割り込み自体がどうもかかっていない。(?)
AポートをON/OFFするかオシロスコープで確認していますが、ON/OFFしていない
恐れ入りますが、教えて下さい。
1.カールネルへの割り込みハンドラの登録
./main/main.cfg内に
DEF_INH(INHNO_TIMER1, { TA_HLNG, itu1_int_handler });
を記述。
INHNO_TIMER1=0x28として定義
2../main/main.h内に
Extern extern void itu1_int_handler( void ) ;を追記
3.ベクタテーブルの登録は、Vrector.sには自動的に記述されているので
なにもしない。
4.初期化と実行
定義
#define ITU1_TIMER H816TU1
#define ITU1_TIMER_CNT (ITU1_TIMER + H8TCNT)
#define ITU1_TIMER_TCR (ITU1_TIMER + H8TCR)
#define ITU1_TIMER_TIOR (ITU1_TIMER + H8TIOR)
#define ITU1_TIMER_IER H816TU_TISRA
#define ITU1_TIMER_IFR H816TU_TISRA
#define ITU1_TIMER_TSTR H816TU_TSTR
#define ITU1_TIMER_GRH (ITU1_TIMER + H8GRAH)
#define ITU1_TIMER_GRL (ITU1_TIMER + H8GRAL)
#define ITU1_TIMER_STR H8TSTR_STR1
#define ITU1_TIMER_STR_BIT H8TSTR_STR1_BIT
#define ITU1_TIMER_IE H8TISRA_IMIEA1 // interrupt mask
#define ITU1_TIMER_IE_BIT H8TISRA_IMIEA1_BIT
#define ITU1_TIMER_IF H8TISRA_IMFA1 // match flag
#define ITU1_TIMER_IF_BIT H8TISRA_IMFA1_BIT
#define INHNO_TIMER1 IRQ_IMIA1
#define ITU1_TIMER_TCR_BIT ( H8TCR_CCLR0 | H8TCR_TPSC1 | H8TCR_TPSC0 )
// 0x23
#define ITU1_TIMER_TIOR_BIT ( 0 )
#define H8PADDR 0xfee009
#define H8PADR 0xffffd9
4-1. 初期化
void itu1_init( void )
{
sil_wrb_mem( H8PADDR, 0xFF ) ;
sil_wrb_mem( H8PADR, 0x00 ) ;
// タイマ停止
bitclr( (UB *)ITU1_TIMER_TSTR, ITU1_TIMER_STR_BIT ) ;
// GRAコンペアマッチでカウンタをクリア、分周比設定
sil_wrb_mem( (VP)ITU1_TIMER_TCR, ITU1_TIMER_TCR_BIT ) ;
// GRAコンペアマッチによる割込み要求を許可
sil_wrb_mem( (VP)ITU1_TIMER_IER, ITU1_TIMER_IE ) ;
// GRAコンペアマッチによる端子出力禁止
sil_wrb_mem( (VP)ITU1_TIMER_TIOR, ITU1_TIMER_TIOR_BIT ) ;
// GRAレジスタ設定(カウンタ目標値)
sil_wrh_mem( (VP)ITU1_TIMER_GRH, 0x09 ) ;
sil_wrh_mem( (VP)ITU1_TIMER_GRL, 0xC4 ) ;
sil_wrh_mem( (VP)ITU1_TIMER_CNT, 0 ) ; // カウンタをクリア
/* GRAコンペアマッチの割り込み要求フラグをクリア */
bitclr( (UB *)ITU1_TIMER_IFR, ITU1_TIMER_IF_BIT ) ;
// タイマスタート
bitset( (UB *)ITU1_TIMER_TSTR, ITU1_TIMER_STR_BIT ) ;
}
4-2.実行処理
void itu1_int_handler( void )
{
/* GRAコンペアマッチの割り込み要求フラグをクリア */
bitclr( (UB *)ITU1_TIMER_IFR, ITU1_TIMER_IF_BIT ) ;
//PADR = 0xFF ; // DEBUG
sil_wrb_mem( H8PADR, 0xFF ) ;
if ( TIME_DAT != 0 ) --TIME_DAT ;
PADR = 0x00 ; // DEBUG
sil_wrb_mem( H8PADR, 0x00 ) ;
}
4-3.メインタスクでの処理
メインでは、TIME_DATが0になるのを確認して、新たなカウント数を入れる
ここで、割り込み処理において、PAポートのON/OFFをオシロスコープで確認している
のですが
ON/OFFしません。
以上、宜しくお願い致します。