# タイマ (overview)

TWL には16 bit のハードウェアタイマが 4つ用意されています。それぞれを独立させて使用することも出来ますし、連続したタイマを併用して 32 bit / 48 bit / 64 bit のタイマとして使用することも可能です。

しかし、ユーザはこの全てのタイマを無条件で使用できるわけではありません。TWL-SDK の OS内でタイマを使用している場合、そのタイマはユーザが直接使用してはいけません。

TWL-SDK 内部でタイマを使用する機能として、チックシステムとアラームシステムがあります。デフォルトではチックシステムは タイマ0 を用い、アラームシステムはタイマ 1 を用います。またアラームシステムを使用する場合はチックシステムが必須となります。従って、

・アラームシステムは使用しないが、チックシステムを用いる場合　…　タイマ 0 は使用できません。

・アラームシステムを用いる場合　(この場合必ずチックシステムを用います)　…　タイマ 0 と 1 は使用できません。

という制約が生じます。( いずれもデフォルト設定の場合 )

TWL-SDK では、DEBUG ビルドの際にはシステムで使用しているタイマを、タイマ関数を用いてアクセスしようとすると警告を表示し停止します。

## タイマの動作

タイマカウントレジスタに値を設定して、タイマコントロールレジスタのイネーブルフラグを有効にすると一定間隔でカウントアップが始まります。カウントアップの間隔は、設定によりシステムクロック( 約 33MHz ) の 1倍、64倍、256 倍、1024 倍の何れかを選択することが可能です。

タイマ割り込みは、カウンタが 0xFFFF から 0x0000 になるときに発生します。予めタイマ割り込みのハンドラを `OS_SetIrqFunction()` で設定していればそのハンドラが呼ばれます。

ハードウェアの仕様では、タイマは明示的に止めない限り何度でもカウントアップと割り込みを繰り返しますが、最初の割り込み発生でのみ割り込みハンドラが呼びだされます。タイマのカウントアップと割り込み発生はその後も続きますが、再度設定しない限り、割り込みハンドラは呼び出されません。

## タイマの設定と開始

タイマカウントレジスタと、タイマコントロールレジスタに適切な値を設定し、タイマをスタートする関数は以下の通りです。

`OS_StartTimer()
OS_StartTimer32()
OS_StartTimer48()
OS_StartTimer64()`

## タイマの停止

タイマコントロールレジスタのイネーブルフラグをクリアして、タイマを停止する関数は以下の通りです。

`OS_StopTimer()
OS_StopTimer32()
OS_StopTimer48()
OS_StopTimer64()`

## 参照

`OS関数一覧(タイマ), OS関数一覧(時間), OS関数一覧(アラーム)
`

## 履歴

2008/02/05 NitroSDK → TwlSDK
2005/03/08 用語統一 [割込み] → [割り込み]
2004/12/13 用語や語尾など修正
2004/11/16 初版