T_GSRx ( Timer Global Status and Sticky Register)はタイマーのステータス管理を行います。このレジスタは名前からして一本のレジスタですべてのタイマーを管理できそうに見えますが、実際にはTimer0を使うときにはT_GSR0を使わなければなりません。また、ステータスと言いつつコントロールもかねています。
タイマーが3系統あるため、T_GSR0、T_GSR1、T_GSR2の三本が用意されています。
このレジスタは図1のような構造をもっています。初期値は0です。
図1 レジスタの構造
各ビットの意味は以下のとおりです。
割り込みが発生すると1になります。割り込みの処理が終わったら必ずクリアしてください。W1C。
タイマーカウンターがあふれると1になります。W1C。
タイマーをイネーブルにします。W1E
タイマーをディセーブルにします。W1D。
C/C++言語用に以下のインターフェースが用意されています。宣言はsysreg.hで行われています。T_GSRxにアクセスする前には必ずIOPGにTimer_Pageを設定してください。
TIMER0の場合は以下のとおりです。
// #include <sysreg.h> // #include <def2191.h> sysreg_write(sysreg_IOPG, Timer_Page) // TIMERページに設定 io_space_write(T_GSR0, 値) // T_GSR0に値を設定 変数 = io_space_read(T_GSR0) // T_GSR0の値を取得
TIMER1の場合は以下のとおりです。
// #include <sysreg.h> // #include <def2191.h> sysreg_write(sysreg_IOPG, Timer_Page) // TIMERページに設定 io_space_write(T_GSR1, 値) // T_GSR1に値を設定 変数 = io_space_read(T_GSR1) // T_GSR1の値を取得
TIMER2の場合は以下のとおりです。
// #include <sysreg.h> // #include <def2191.h> sysreg_write(sysreg_IOPG, Timer_Page) // TIMERページに設定 io_space_write(T_GSR2, 値) // T_GSR2に値を設定 変数 = io_space_read(T_GSR2) // T_GSR2の値を取得
アナログデバイセズが配布しているmcmの中のビット定義ファイルdef2191bit.hから関連するビット定義部分をここに引用します。
// Definition for T_GSR #define TIMDIS2 BIT_13 #define TIMEN2 BIT_12 #define TIMDIS1 BIT_11 #define TIMEN1 BIT_10 #define TIMDIS0 BIT_9 #define TIMEN0 BIT_8 #define OVF_ERR2 BIT_6 #define OVF_ERR1 BIT_5 #define OVF_ERR0 BIT_4 #define TIMIL2 BIT_2 #define TIMIL1 BIT_1 #define TIMIL0 BIT_0
項目 | マニュアルのページ等 |
---|---|
説明 | HR B-82 |
解説 | HR 12-2 |