Skip to content

Latest commit

 

History

History
38 lines (28 loc) · 1.88 KB

timer.md

File metadata and controls

38 lines (28 loc) · 1.88 KB

⏰ タイマー

GBAはタイマーを4つ持っています。タイマーは 16.78MHz のクロックで動作し、それぞれのタイマーは 16bit のカウンタを持っています。

Timer0 と Timer1 はPCM音源のサンプルレートのために使われます。

制御レジスタ - TMnCNT (R/W)

  0x0400_0100 - TM0CNT
  0x0400_0104 - TM1CNT
  0x0400_0108 - TM2CNT
  0x0400_010C - TM3CNT

TMnCNT.0-15TMnCNT_LTMnCNT.16-31TMnCNT_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.230から1になったとき)

にカウンタにセットされる値です。