T_GSRx

T_GSRx ( Timer Global Status and Sticky Register)はタイマーのステータス管理を行います。このレジスタは名前からして一本のレジスタですべてのタイマーを管理できそうに見えますが、実際にはTimer0を使うときにはT_GSR0を使わなければなりません。また、ステータスと言いつつコントロールもかねています。

タイマーが3系統あるため、T_GSR0、T_GSR1、T_GSR2の三本が用意されています。

レジスタの構造

このレジスタは図1のような構造をもっています。初期値は0です。

図1 レジスタの構造

各ビットの意味は以下のとおりです。

TIMILx : Timer x Interrupt

割り込みが発生すると1になります。割り込みの処理が終わったら必ずクリアしてください。W1C。

OVF_ERRx : Overflow Error

タイマーカウンターがあふれると1になります。W1C。

TIMENx : Timer Enable X

タイマーをイネーブルにします。W1E

TIMDISx : Timer Disable X

タイマーをディセーブルにします。W1D。

API

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
2191空挺団 | プログラム | EZ-KIT | こぼれ話 | アーキテクチャー | 命令 | レジスタ | DSP掲示板 | FAQ |