(toppers-users 460) sh3 での OS タイマ設定周期について

H.Kakizawa / 柿沢 秀夫 kaki @ ne.njrc.co.jp
2002年 7月 26日 (金) 20:28:53 JST


はじめてMLに参加させていただきます柿沢と申します。

早速ですが、Toppers Release 1.3のSH3依存部での
OSタイマ設定について質問させてください。

1、\sh3\以下のシステム依存部にあるsys_config.h内の
  「タイマ値の内部表現とミリ秒単位との変換」のところで
  TIMER_CLOCKのdefine定義があるのですが、
  これはタイムティックの周期を示す TIC_NUME/TIC_DENO の分母TIC_DENOに設定した
  時間に相当するタイマクロック数を設定するものという認識で理解したのですが
  よいのでしょうか?
  例えば、TIC_NUME=2 TIC_DENO=10 と指定した場合は、
  TIMER_CLOCKに定義する値は10ms分のタイマクロック数を設定すれがよいのか?


2、sh3のタイマ(TMU)は、TCNT/TCORに設定した値+1の周期で割込みが入リますが、
  \sh3\hw_timer.h内でレジスタ設定する際に、以下の計算で求められた値が
  レジスタに設定されています。
    設定値 = ((TIMER_CLOCK * TIC_NUME) / TIC_DENO)

  もし、TIMER_CLOCKの設定値が上記1のような認識だとすると、
  TCNT/TCORに設定される値は+1大きい値となると思うのですがどうでしょうか?
  (上記計算で求められた値-1の値を設定するのが正解ではと思うのですが...)

  ----------------------
  <\sh3\hw_timer.h>
   73行目 
   #define TO_CLOCK(nume, deno)	(TIMER_CLOCK * (nume) / (deno))

   90行目
   Inline void
   hw_timer_initialize()
   {
	CLOCK	c = TO_CLOCK(TIC_NUME, TIC_DENO);
    
	/*
	 *  タイマ関連の設定
	 */
      TMU.TSTR&=~TMU_STR0;             /* タイマ停止 */
      assert(c <= MAX_CLOCK);		 /* タイマ上限値のチェック */
    
      TMU.TCR0  = (0x020 | TCR0_TPSC); /* 分周比設定、割り込み許可 */
    
      TMU.TCOR0 = c;                   /* timer constantレジスタをセット */
      TMU.TCNT0 = c;                   /* カウンターをセット */
      TMU.TSTR  |= TMU_STR0;           /* タイマ0スタート    */

  ----------------------
    <修正?>
     :
        TMU.TCOR0 = (c - 1);             /* timer constantレジスタをセット */
      TMU.TCNT0 = (c - 1);             /* カウンターをセット */
         :

  ----------------------

以上、ご教授いただきたくよろしくお願いいたします。

+------------------------+
    柿沢 秀夫
    kaki @ ne.njrc.co.jp
+------------------------+