タイマ2、4・タイマ3、5の使い方


 dsPIC30Fシリーズ内蔵のタイプBタイマであるタイマ2またはタイマ4と、タイプCタイマである
タイマ3またはタイマ5の使い方について説明しています。
これらは基本的にほとんど同じような動作をします。


【内部構成】

まずタイプBであるタイマ2または4の内部構成は下図のようになっています。(TypeBのタイマ)




次にタイプCであるタイマ3またはタイマ5の内部構成は下図のようになっています。
コンパレータの一致でA/Dコンバータの開始トリガができるのが特徴です。




図のようにいずれの場合にもタイマxの本体は、16ビットのカウンタTMRxとなっています。
このカウンタはアップカウンタで、常にPRxレジスタに設定された値と比較されていて、
値が一致すると割り込みが発生し、同時にTMRxの内容が0にクリアされます。
従って、TMRxは常に0からPRxレジスタの値の間を繰り返しカウントすることになりますから、
内部クロックを入力クロックにすれば、常に一定間隔で割り込みが発生することになります。

入力は内部クロックか、外部クロックを指定できますが、これ以外に、外部ピンでゲート
された内部クロックを指定することもできます。
このゲート指定の時にはゲートパルスの後縁で割り込みを発生させることができます。
いずれの場合にも入力パルスは内部クロックに同期してTMRxに入力されます。

TMRxの前段に、最大8ビットのプリスケーラがあり、最大256倍のカウント値とすることが
できます。カウント値の選択肢は1,8,64,256の4種類のみです。

タイプBとタイプCタイマの特徴は両者を結合して32ビットタイマとしてつかうことができる
ことです。こうすると非常に長時間のインターバルタイマか、非常に数多くのカウンタとして
つかうことができます。

タイマxの動作モードとしては下記のいずれかが選択できます。

 (1) 同期型インターバルタイマー
 (2) 同期型カウンタ
 (3) ゲート型タイマ、カウンタ


さらに32ビットで結合した場合の内部構成は下図のようになります。図はタイマ2とタイマ3
を結合した場合の構成です。






【関連SFR】

タイマxを制御するためのレジスタは下図のようになっています。
タイプBとタイプCで異なるのは、32ビット連結モードの設定ビットがタイプBにあるだけで
あとは全く同じ構成となっています。




タイマxの割り込み制御用のレジスタは下記となります。





【C言語での使い方】

C30コンパイラのPeripheral Librariesで用意されているタイマ1の組み込み関数は下表の
ようになっています。
下記関数を使うためには、「timer.h」をインクルードする必要があります。
またプロジェクトにデバイス用のライブラリファイル、例えば「libp30f4012.a」という
ライブラリファイルをLIBに追加する必要があります。

関数名 書  式 機  能
OpenTimerX()
Xは2,3,4,5,23,45
 のいずれか
  
void OpenTimerX(
 unsigned int config,
  unsigned int period)
タイマXの動作モードを設定する
configには下記パラメータを含む
(1)Timer Module On/Off
  TX_ON  TX_OFF
(2)Idle Mode On/Off
  TX_IDLE_CON
  TX_IDLE_STOP
(3)32bit Mode disable
  TX_32BIT_MODE_OFF(Xが2か4のみ)
  TX_32BIT_MODE_ON(Xが23か45の時)
(4)Gate Control
  TX_Gate_ON  TX_Gate_OFF
(5)PreScaler
  TX_PS_1_1  TX_PS_1_8
  TX_PS_1_64  TX_PS_1_128
(6)Clock Sync
  TX_SYNC_EXT_ON
  TX_SYNC_EXT_OFF
(7)Clock Source
  TX_SOURCE_EXT
  TX_SOURCE_INT

periodにはPRレジスタに設定する
カウントの上限値を設定する

《例》
 OpenTimer2(T2_ON & T2_GATE_OFF &
    T2_PS_1_8 & T2_SYNC_EXT_OFF &
    T2_SOURCE_INT, 0xFF);
CloseTimerX()
 Xは2,3,4,5,23,45の
 いずれか
void CloseTimerX(void); タイマXを停止させる
Xが23,45のときは32ビットタイマ
ConfigIntTimerX()
 
Xは2,3,4,5,23,45
 のいずれか
void ConfigIntTimerX(
 unsigned int config)
タイマXの割り込みの条件を設定する
configには下記の2種を指定する
(1)割り込みレベル
  TX_INT_PRIOR_m
   (mは0〜7のいずれか)
(2)割り込み許可・禁止
  TX_INT_ON   TX_INT_OFF
《例》
 ConfigIntTimer2(T2_INT_PRIOR_5 &
           T2_INT_ON);
WriteTimerX()
 Xは2,3,4,5,23,45
 のいずれか
void WriteTimerX(
   unsigned int timer)
TMRXレジスタにtimerの値を設定する
《例》
 WriteTimer2(0xAB);
ReadTimerX()
 Xは2,3,4,5,23,45
 のいずれか
unsigned int ReadTimerX(void) TMRXの内容を読み込む
《例》
 Timer2_value = ReadTimer2();
EnableIntTX() 割り込みの許可
DisableIntTX() 割り込みの禁止
SetPriorityIntTX() SetPriorityIntTX(level); 割り込みレベルの設定



【使用例】













    目次ページへ