T_WHRx, T_WLRx

T_WHRx ( Timer Width High Register X)および T_CNTL( Timer Width Low Register x )はパルス幅の値を表示・指定します。カウンターは32ビットであるため、HとLの二本のレジスタを使用します。

タイマーが3系統あるため、T_WHR0、T_WHR1、T_WHR2、T_WLR0、T_WLR1、T_WLR2の六本が用意されています。

レジスタの構造

二つのレジスタとも16ビット符号なしレジスタです。初期値は0です。二つのレジスタはパルス幅を格納する内部32ビットレジスタの上位と下位の値を表します。以下に各モードでのパルス幅レジスタの働きを記述しますが、モードの詳細についてはT_CNTHx, T_CNTLxを参照してください。

パルス変調モードでの動作

このモードでは、パルス幅レジスタは生成するパルスの幅を指定します。パルス幅はタイマーがイネーブルの状態でも書き換えることができます。

書き換えは二段階に分かれています。一つはT_WHRx, TWLRxの書き換えで、もう一つはこれらのレジスタの値の内部32ビットバッファへの転送です。

DSPプログラムが1T_WLRxに値を書き込むと、次のサイクルで以下の四つのレジスタが対応する内部32ビットレジスタのしかるべき位置にいっせいに転送されます。

これらの値はT_WLRxにDSPが値を書くまでは転送されません。したがって、幅だけ更新するといった変調動作を簡単にプログラムできます。

パルス幅測定モードでの動作

このモードではパルス幅レジスタは読み出し専用です。

外部クロックモードでの動作

このモードではパルス幅レジスタは書き込み専用です。値は無視されますが周期レジスタの書き込みを上下ワード一斉に行うための引き金としてT_WLRxを利用します。

API

C/C++言語用に以下のインターフェースが用意されています。宣言はsysreg.hで行われています。T_WHRxにアクセスする前には必ずIOPGにTimer_Pageを設定してください。T_WLRxのアクセスも同様です。

TIMER0の場合は以下のとおりです。

// #include <sysreg.h>
// #include <def2191.h>

sysreg_write(sysreg_IOPG, Timer_Page)   // TIMERページに設定

io_space_write(T_WHR0, 値)         // T_WHR0に値を設定
変数 = io_space_read(T_WHR0)       // T_WHR0の値を取得

TIMER1の場合は以下のとおりです。

// #include <sysreg.h>
// #include <def2191.h>

sysreg_write(sysreg_IOPG, Timer_Page)   // TIMERページに設定

io_space_write(T_WHR1, 値)         // T_WHR1に値を設定
変数 = io_space_read(T_WHR1)       // T_WHR1の値を取得

TIMER2の場合は以下のとおりです。

// #include <sysreg.h>
// #include <def2191.h>

sysreg_write(sysreg_IOPG, Timer_Page)   // TIMERページに設定

io_space_write(T_WHR2, 値)         // T_WHR2に値を設定
変数 = io_space_read(T_WHR2)       // T_WHR2の値を取得

参照情報

項目 マニュアルのページ等
解説 HR 12-6
2191空挺団 | プログラム | EZ-KIT | こぼれ話 | アーキテクチャー | 命令 | レジスタ | DSP掲示板 | FAQ |