Shinobi Library

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_P4Pφ/40.08μs約21分
SYD_TMR_CLOCK_P16Pφ/160.32μs約22時間52分
SYD_TMR_CLOCK_P64Pφ/641.28μs約91時間38分
SYD_TMR_CLOCK_P1024Pφ/102420.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_P4Pφ/40.08μs約21分
SYD_TMR _CLOCK_P16Pφ/160.32μs約22時間52分
SYD_TMR _CLOCK_P64Pφ/641.28μs約91時間38分
SYD_TMR _CLOCK_P1024Pφ/102420.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
変換するマイクロ秒値
[出力]
なし
[戻値]
カウンタ値
[機能]
カウンタ値をマイクロ秒値に変換する
[備考]
小数点以下は切り捨てます。

オーバービューに戻る

TOPに戻る
Copyright 1998 SEGA Enterprises, LTD.