(toppers-users 3493) Re: TOPEERS JSP Ver1.4.3でのタイマー追加について

kazuhiro takahashi takahashi_kazuhiro @ nifty.com
2011年 6月 27日 (月) 22:15:41 JST


こんばんは、アライブビジョンソフトウエアの高橋と申します。

向学のために拝見しておりました。

TOPPERS/JSPの割り込み処理の記述方法になるかと思います。
基本的には、カーネルのシステムクロック(isig_tim)のコンフィギュレーションと同じに
すれば容易に同じところまで動くかと思います。

単純に比較して見てみますと、3点ほど違いがあるようです。
1.ATT_INIの記載がない
 初期化ルーチンはどこで呼ばれているかご説明ではよくわかりません。かならずATT_INIじゃないと
 いけないかどうかはよくわかりません。
2.GRAレジスタの設定
 たぶん、ゼロしか書かれていないと思います。
3.define_int_plevelがない
 ご指摘されている項目ですね。


On Mon, 27 Jun 2011 13:34:29 +0900
"Mineo Nagashima" <wbs03263 @ mail.wbs.ne.jp> wrote:

> 関係者の皆様へ
> 現在、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しません。
> 
> 以上、宜しくお願い致します。
> 
> 
> 
> 
> 


-- 
アライブビジョンソフトウエア株式会社
高橋和浩
kazuhiro takahashi <takahashi_kazuhiro @ nifty.com>