(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しません。

以上、宜しくお願い致します。