T_CNTHx ( Timer Counter High Part X)および T_CNTL( Timer Counter Low Part x )はタイマーカウント値を表示します。カウンターは32ビットであるため、HとLの二本のレジスタを使用します。
タイマーが3系統あるため、T_CNTH0、T_CNTH1、T_CNTH2、T_CNTL0、T_CNTL1、T_CNTL2の六本が用意されています。
二つのレジスタとも16ビット符号なしレジスタです。初期値は0です。二つのレジスタはT_CNTという内部32ビットレジスタの上位と下位の値を表します。
このモードは一定周期のパルスを生成します。T_CFGRxでタイマーをイネーブルにすると、内部的にパルス幅分のHCLKパルスを数え、次に(周期-パルス幅)分のHCLKパルスを数えます。T_CFGRxのPERIOD_CNTが1の場合は周期動作を行います。
TMRxピンの出力はT_CFGRxのPULSE_HIビットで制御します。
周期の終わりが来たときにT_CGRxのIRQ_ENAが1の場合、割り込みを発生します。
以下の場合、タイマーをイネーブルにすると同時にオーバーフローが発生します。計数は行われません。(1) 周期と幅が等しい (2) 幅が0 (3)周期より幅が大きい。
このモードはTMRxに入力される信号の幅と周期を同時に測ります。T_CFGRxでタイマーをイネーブルにすると、内部32ビットカウンタT_CNTは1にクリアされます。前エッジがTMRxに入力されるとともにT_CNTはHCLKを数え始めます。
また、前エッジを検出するとT_CNTの値は内部32ビット周期レジスタに転送されます。後ろエッジを検出するとT_CNTの値は内部32ビット幅レジスタに転送されます。
T_CFGRxのPULSE_HIビットによって前エッジと後ろエッジを立ち上がりエッジ、立下りエッジに対応させることができます。1のとき、前エッジは立ち上がりです。
T_CFGRxのPERIOD_CNTビットによってT_CNTを幅レジスタに転送したとき、周期レジスタに転送したときのいずれに割り込みを起こすか指定できます。1のとき、周期レジスタへの転送で割り込みが起きます。
このモードは、TMRxに入力するパルスの数を数えます。割り込みは内部32ビット周期カウンタに指定した個数のパルスが発生したときに発生します。
T_CFGRxのPULSE_HI、PERIOD_CNT、TIN_SELは無視されます。
このモードは、HCLKが停止した場合も219xコアに対して割り込みをかけることができます。HCLK停止状態での割り込みに関しては、パワーダウンを参照してください。
C/C++言語用に以下のインターフェースが用意されています。宣言はsysreg.hで行われています。T_CNTHxにアクセスする前には必ずIOPGにTimer_Pageを設定してください。T_CNTLxのアクセスも同様です。
TIMER0の場合は以下のとおりです。
// #include <sysreg.h> // #include <def2191.h> sysreg_write(sysreg_IOPG, Timer_Page) // TIMERページに設定 io_space_write(T_CNTH0, 値) // T_CNTH0に値を設定 変数 = io_space_read(T_CNTH0) // T_CNTH0の値を取得
TIMER1の場合は以下のとおりです。
// #include <sysreg.h> // #include <def2191.h> sysreg_write(sysreg_IOPG, Timer_Page) // TIMERページに設定 io_space_write(T_CNTH1, 値) // T_CNTH1に値を設定 変数 = io_space_read(T_CNTH1) // T_CNTH1の値を取得
TIMER2の場合は以下のとおりです。
// #include <sysreg.h> // #include <def2191.h> sysreg_write(sysreg_IOPG, Timer_Page) // TIMERページに設定 io_space_write(T_CNTH2, 値) // T_CNTH2に値を設定 変数 = io_space_read(T_CNTH2) // T_CNTH2の値を取得
項目 | マニュアルのページ等 |
---|---|
解説 | HR 12-2 |