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を利用します。
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 |