# Shinobi Library

English

### Ver 1.00

1998/10/4

# タイマ関数

目次

## 0. 概要

> DreamcastのSH-CPUにはタイマユニットとして独立した3本のタイマが存在します。
> 忍ライブラリではそのうちのタイマ0をフリーランニングタイマーとして使用します。 また、タイマ2は汎用タイマとして完全に公開され、タイマ割り込みベースクロックの変更などの操作が可能になります。
> タイマ0は、初期値の再設定不可能でユーザアプリケーション側からは読み込み専用になります。

> カウンタクロックは、BootROMで「CPU周辺モジュールクロックの分周比64」に設定されるため、1.28μ秒/1カウントで、1.28μ秒〜91.6分までの計測が可能です。 主として、経過時間の取得や、プログラムの処理時間を計る場合に使用できます。

## 1.データ仕様

・SYD_TMR_CLOCK：汎用タイマのベースクロック

  マクロ名 | 意味 | 1カウントの時間 | カウントできる時間の上限
  --- | --- | --- | ---
  SYD_TMR_CLOCK_P4 | Pφ/4 | 0.08μs | 約21分
  SYD_TMR_CLOCK_P16 | Pφ/16 | 0.32μs | 約22時間52分
  SYD_TMR_CLOCK_P64 | Pφ/64 | 1.28μs | 約91時間38分
  SYD_TMR_CLOCK_P1024 | Pφ/1024 | 20.48μs | 約17年

## 2.関数リファレンス

### 2.1関数一覧

関数 | 機能
--- | ---
syTmrGetCount | フリーランニングタイマの値を取得する
syTmrDiffCount | 二つのタイマカウント値の差を取る
syTmrCountToMicro | カウント値をμ秒に変換する
syTmrMicroToCount | μ秒値をカウンタ値に変換する
syTmrGenStart | 汎用タイマを起動する
syTmrGenStop | 汎用タイマを停止する
syTmrGenSetClock | 汎用タイマの基準クロックを設定
syTmrGenSetInt | 汎用タイマによるタイマ割り込みを許可する
syTmrGenCancelInt | 汎用タイマによるタイマ割り込みを禁止する
syTmrGenSetCount | 汎用タイマ割り込みカウンタの設定
syTmrGenGetCount | 汎用タイマ割り込みカウンタを取得
syTmrGenDiffCount | 汎用割り込みカウントの差分を計算する
syTmrGenCountToMicro | 汎用カウンタ値をμ秒値に変換
syTmrGenMicroToCount | μ秒値を汎用カウンタ値に変換する

### 2.2 関数API

## syTmrGetCount

［関数］
  Uint32 syTmrGetCount(void)
［入力］
  なし
［出力］
  なし
［戻値］
  TMU0カウンタの値
［機能］
  TMU0カウンタの値を取得します
［参照］
［用例］

      main()
      {
        Uint32 count1, count2, count, micro;

        count1 = syTmrGetCount();               /* 測定開始 */

        TestFunc();                             /* 測定対象の関数を実行 */

        count2 = syTmrGetCount();               /* 測定終了 */
        count = syTmrDiffCount(count1, count2); /* カウンタ値の差を取得 */
        micro = syTmrCountToMicro(count);       /* カウンタ値をμ秒値に変換 */

        while (1);
      }

［備考］
  ダウンカウンタのため、0xffffffff-カウンタ値を返します。

## syTmrDiffCount

［関数］
  Uint32 syTmrDiffCount(Uint32 count1, Uint32 count2)
［入力］

count1
  先に取得したカウンタ値(μ秒では駄目)
count2
  後に取得したカウンタ値(μ秒では駄目)

［出力］
  なし
［戻値］
  2つのカウンタ値の差
［機能］
  2つのカウンタ値の差を計算します。

## syTmrCountToMicro

［関数］
  Uint32 syTmrCountToMicro(Uint32 count)
［入力］

count
  変換するカウンタ値

［出力］
  なし
［戻値］
  マイクロ秒値
［機能］
  カウンタ値をマイクロ秒値に変換する
［備考］
  小数点以下は切り捨てます。

## syTmrMicroToCount

［関数］
  Uint32 syTmrMicroToCount(Uint32 micro)
［入力］

micro
  変換するマイクロ秒値

［出力］
  なし
［戻値］
  カウンタ値
［機能］
  カウンタ値をマイクロ秒値に変換する
［備考］
  小数点以下は切り捨てます。

## syTmrGenStart

［関数］
  void syTmrGenStart( void )
［入力］
  なし
［出力］
  なし
［戻値］
  なし
［機能］
  汎用タイマを起動します。
［備考］

## syTmrGenStop

［関数］
  void syTmrGenStop( void )
［入力］
  なし
［出力］
  なし
［戻値］
  なし
［機能］
  汎用タイマを停止します。
［備考］

## syTmrGenSetClock

［関数］
  void syTmrGenSetClock( SYD_TMR_CLOCK clock )
［入力］

clock
  カウンタクロック

  マクロ名 | 意味 | 1カウントの時間 | カウンタの上限
  --- | --- | --- | ---
  SYD_TMR _CLOCK_P4 | Pφ/4 | 0.08μs | 約21分
  SYD_TMR _CLOCK_P16 | Pφ/16 | 0.32μs | 約22時間52分
  SYD_TMR _CLOCK_P64 | Pφ/64 | 1.28μs | 約91時間38分
  SYD_TMR _CLOCK_P1024 | Pφ/1024 | 20.48μs | 約17年

［出力］
  なし
［戻値］
  なし
［機能］
  汎用タイマのベースクロックを設定します。
  ベースクロックはCPUの周辺モジュールクロック(50MHz)の分周比で与えられ、4種類の設定が行えるようになっています。カウンタ値が32ビットあるため、ユニークな値を取れる時間は設定するカウンタクロックによって異なり、デフォルトの64分周で
  100000000h×1.28μ=5497.558秒(=91時間38分)
  となります。
［備考］

## syTmrGenSetInt

［関数］
  void syTmrGenSetInt( void (*func)( void * ) )
［入力］

func
  カウンタ値が0になった時に呼ばれる関数
  NULLを入れると、カウンタ値が0になるまでWaitして本関数をぬけます。

［出力］
  なし
［戻値］
  なし
［機能］
  汎用タイマは減算型のタイマとなっており、タイマカウント値が0になると割り込み(タイマ割り込み)が発生する仕組みになっています。
  このタイマ割り込み発生時にコールバックする関数を本関数にて登録します。
  一旦登録した関数が呼ばれると、関数登録は無効になりますので連続してタイマ割り込み呼び出しを行いたい場合には、その都度この関数で登録を行う必要があります。
［用例］

    コールバック関数の例
      void IntFunc(void* param)
      {
         IntCount = param;                 /* パラメータを保存     */
         syTmrGenSetInt(IntFunc, param+1); /* 割込み発生を継続する */
         syTmrGenSetCount(0-10000);        /* カウンタに初期値を設定*/
         syTmrGenStart();                  /* タイマを再稼動する */

      }

［備考］ 割込み発生時のコールバック関数が既に登録されている時に、本関数をコール した場合は、後から登録された関数のみが有効となります。
タイマ停止状態で、callbackにNULLを指定してコールされた場合、本関数内で、 タイマを稼動させてください。

## syTmrGenCancelInt

［関数］
  void syTmrGenCancelInt( void )
［入力］
  なし
［出力］
  なし
［戻値］
  なし
［機能］
  syTmrGenSetIntで設定した割り込みコールバックを無効にします。
［備考］

## syTmrGenSetCount

［関数］
  void syTmrGenSetCount(Uint32 count)
［入力］

count
  カウンタに設定する値

［出力］
  なし
［戻値］
  なし
［機能］
  汎用タイマカウンタ値を設定します。
［備考］

## syTmrGenGetCount

［関数］
  Uint32 syTmrGenGetCount( void )
［入力］
  なし
［出力］
［戻値］
  カウンタ値
［機能］
  汎用タイマカウンタ値を取得します。
［備考］

## syTmrGenDiffCount

［関数］
  Uint32 syTmrGenDiffCount(Uint32 count1, Uint32 count2)
［入力］

count1
  先に取得したカウンタ値(μ秒では駄目)
count2
  後に取得したカウンタ値(μ秒では駄目)

［出力］
  なし
［戻値］
  カウンタ値
［機能］
  二つのタイマカウンタ値の差分をとります。
［備考］
  小数点以下は切り捨てます。

## syTmrGenCountToMicro

［関数］
  Uint32 syTmrGenCountToMicro(Uint32 count)
［入力］

micro
  変換するカウンタ値

［出力］
  なし
［戻値］
  マイクロ秒値
［機能］
  マイクロ秒値をカウンタ値に変換する
［備考］
  小数点以下は切り捨てます。

## syTmrGenMicroToCount

［関数］
  Uint32 syTmrGenMicroToCount(Uint32 micro)
［入力］

micro
  変換するマイクロ秒値

［出力］
  なし
［戻値］
  カウンタ値
［機能］
  カウンタ値をマイクロ秒値に変換する
［備考］
  小数点以下は切り捨てます。

オーバービューに戻る