English
PROGRAMMER'S GUIDEタイマライブラリ
■   | 進む
タイマライブラリ

1.ガイド


1.1 目的

 このライブラリは、主にプログラマブルなWAIT(待ち時間)と処理時間を取得する関数形式マクロを提供します。

1.2 概要

 タイマはCPUにあるフリーランニングタイマ(以下 FRT)とSCUにあるタイマ割り込みを使用しています。それぞれのデバイスにより次のような用途を考え、関数形式マクロを用意しました。

 ●SCU

 ●CPU

1.3 詳細説明

 ●SCU
<使用方法>
 使用方法の詳細はSCUユーザーズマニュアルのタイマ割り込みをご覧ください。

<コーリングシーケンス>
 以下にタイマ1を使用して毎ラインの10ビット目に描画した時にタイマ1割り込みを起こし、奇数ラインの場合、そのラインを反転するコーリングシーケンスを示します。

Uint32 time_flg;                          /*     割り込みフラグ            */
...
void vblankOut()                          /*     V-BLANK OUT実行関数        */
{
     Uint32 intr_count = 0;               /*     割り込みカウンタ           */
     ...
     TIM_T1_DISABLE();                    /*     タイマ1割り込みディセーブル     */
     TIM_T1_SET_MODE(TIM_MD_LINE);        /*     毎ライン割り込み発生を指定     */
     TIM_T1_SET_DATA(10);                 
                  /*     ラインの10ビット目に割り込み発生タイミングを指定       */
     time_flg = OFF;                       /*     割り込みフラグをオフにする     */
     TIM_T1_ENABLE();                      /*     タイマ1割り込みイネーブル     */
     ...
     for(intr_count < ALL_LINE_NUM){
                                           /*   全ラインの割り込みが実行されるまで  */
               changeLine(intr_count);     /*     奇数ラインの反転          */
               intr_count ++;              /*     ラインのカウント          */
     }
}
void timeIntr()                            /*     割り込み実行関数          */
{
     time_flg = ON;                        /*     割り込みフラグをオンにする     */
}

 ●CPU
<基本事項>
カウンタ値
 FRTへの時間指定はカウンタ値を使用しています。このカウンタ値について以下に説明します。

 カウンタ値のカウントアップ周期は分周指定およびグラフィックモード指定により変化します。カウントアップ周期は以下の計算で求めることができます。

 カウントアップ周期(s) =分周×1/クロック周波数(Hz)

 カウント値からマイクロ秒への変換、マイクロ秒からカウント値への変換は以下の関数形式マクロを使用すると便利です。

機能
関数形式マクロ
番号
カウンタ値−>マイクロ秒変換
TIM_FRT_CNT_TO_MCR
15
マイクロ秒−>カウンタ値変換
TIM_FRT_MCR_TO_CNT
16

<使用方法>
初期化
 経過時間の取得および待ち時間(WAIT)の関数の使用の前に以下の関数形式マクロを実行してください。

機能
関数形式マクロ
番号
FRT初期化
TIM_FRT_INIT
8

経過時間の取得方法
 経過時間取得のためには、以下の関数を用意してあります。

機能
関数形式マクロ
番号
カウンタ値設定(16ビット)
TIM_FRT_SET_16
9
カウンタ値取得(16ビット)
TIM_FRT_GET_16
10

void sysInit()
{
     TIM_FRT_INIT(8);                      /*     分周を8に設定          */
     ...
}

void writeFrameBuff()
{
     Uint16 count;                         /* 取得カウント値格納領域          */
     float     micro_sec;                  /* マイクロ秒格納領域            */
     TIM_FRT_SET_16(0);                    /* カウント値に0を設定する         */
     WriteAllVram();                       /* 測りたい処理実行             */
     count = TIM_Frt_Get_16();             /* カウント値を取得する           */
                                           /* countはWriteAllVram()の実行時間を示 */
     micro_sec = TIM_FRT_CNT_TO_MCR(count);/* カウンタ値をマイクロ秒に変換する    */
     printDisplay(micro_sec);              /* 画面に経過時間の表示をする        */
}


■   | 進む
PROGRAMMER'S GUIDEタイマライブラリ
Copyright SEGA ENTERPRISES, LTD., 1997