GBAはタイマーを4つ持っています。タイマーは 16.78MHz のクロックで動作し、それぞれのタイマーは 16bit のカウンタを持っています。
Timer0 と Timer1 はPCM音源のサンプルレートのために使われます。
0x0400_0100 - TM0CNT
0x0400_0104 - TM1CNT
0x0400_0108 - TM2CNT
0x0400_010C - TM3CNT
TMnCNT.0-15
は TMnCNT_L
、TMnCNT.16-31
は TMnCNT_H
と呼ぶ場合もあります。
Bit
0-15 タイマーカウンタ or リロード値
R: 現在のカウンタの値を読み取る
W: リロード値を設定(ただし現在のカウンタの値には直接影響しない)
16-17 カウント周期 (0=1クロックごとに, 1=64, 2=256, 3=1024)
18 カスケード機能 (0=Off, 1=On)
19-21 不使用
22 カウンタのオーバーフロー時にIRQを発生させるか (0=無効, 1=有効)
23 タイマーON/OFF (0=OFF, 1=ON)
24-31 不使用
カスケード機能は下位のタイマーがオーバーフローしたときに、上位のタイマーの値がインクリメントされるという機能です。例えば、TM2CNT.18
をセットしてTimer2のカスケード機能を有効にすると、Timer1がオーバーフローしたときにTimer2のカウンタがインクリメントされます。カスケード機能を使うとそのタイマー自身(この例ではTimer2)は周期(bit0-1で設定)によってインクリメントされないようになっています。Timer0は最も下位のタイマーなので、カスケード機能はTimer0には使用できません。
リロード値(TMnCNT.0-15
)は
- タイマーオーバーフロー時
- タイマーがONになったとき(
TMnCNT.23
が0
から1
になったとき)
にカウンタにセットされる値です。