1998/10/4
DreamcastのSH-CPUにはタイマユニットとして独立した3本のタイマが存在します。
忍ライブラリではそのうちのタイマ0をフリーランニングタイマーとして使用します。 また、タイマ2は汎用タイマとして完全に公開され、タイマ割り込みベースクロックの変更などの操作が可能になります。
タイマ0は、初期値の再設定不可能でユーザアプリケーション側からは読み込み専用になります。
カウンタクロックは、BootROMで「CPU周辺モジュールクロックの分周比64」に設定されるため、1.28μ秒/1カウントで、1.28μ秒〜91.6分までの計測が可能です。 主として、経過時間の取得や、プログラムの処理時間を計る場合に使用できます。
マクロ名 | 意味 | 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年 |
関数 | 機能 |
---|---|
syTmrGetCount | フリーランニングタイマの値を取得する |
syTmrDiffCount | 二つのタイマカウント値の差を取る |
syTmrCountToMicro | カウント値をμ秒に変換する |
syTmrMicroToCount | μ秒値をカウンタ値に変換する |
syTmrGenStart | 汎用タイマを起動する |
syTmrGenStop | 汎用タイマを停止する |
syTmrGenSetClock | 汎用タイマの基準クロックを設定 |
syTmrGenSetInt | 汎用タイマによるタイマ割り込みを許可する |
syTmrGenCancelInt | 汎用タイマによるタイマ割り込みを禁止する |
syTmrGenSetCount | 汎用タイマ割り込みカウンタの設定 |
syTmrGenGetCount | 汎用タイマ割り込みカウンタを取得 |
syTmrGenDiffCount | 汎用割り込みカウントの差分を計算する |
syTmrGenCountToMicro | 汎用カウンタ値をμ秒値に変換 |
syTmrGenMicroToCount | μ秒値を汎用カウンタ値に変換する |
main() { Uint32 count1, count2, count, micro; count1 = syTmrGetCount(); /* 測定開始 */ TestFunc(); /* 測定対象の関数を実行 */ count2 = syTmrGetCount(); /* 測定終了 */ count = syTmrDiffCount(count1, count2); /* カウンタ値の差を取得 */ micro = syTmrCountToMicro(count); /* カウンタ値をμ秒値に変換 */ while (1); }
マクロ名 | 意味 | 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年 |
コールバック関数の例 void IntFunc(void* param) { IntCount = param; /* パラメータを保存 */ syTmrGenSetInt(IntFunc, param+1); /* 割込み発生を継続する */ syTmrGenSetCount(0-10000); /* カウンタに初期値を設定*/ syTmrGenStart(); /* タイマを再稼動する */ }