タイマ1の使い方


 dsPIC30Fシリーズ内蔵のタイプAタイマであるタイマ1モジュールの使い方について
説明しています。

【内部構成】

タイマ1の内部構成は下図のようになっています。(TypeAのタイマ)

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

入力は内部クロックか、外部クロックを指定できますが、これ以外に、外部ピンでゲート
された内部クロックを指定することもできます。
このゲート指定の時にはゲートパルスの後縁で割り込みを発生させることができます。
外部クロックには、直接パルスを入力するか、独立の発振回路を使った専用のクロックを
使うことができます。この発振回路は32.768kHz用となっていてリアルタイムクロックを前提
にしています。
入力パルスを内部サイクルに同期させるかさせないか(非同期)の選択が可能で、非同期
にするとSLEEP時にもカウント動作を継続させるようにすることができます。
TMR1の前段に、最大8ビットのプリスケーラがあり、最大256倍のカウント値とすることが
できます。

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

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





【関連SFR】

タイマ1を制御するためのレジスタは下図のようになっています。
上図の各部のスイッチなどを制御するための設定レジスタになります。




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






【C言語での使い方】

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

関数名 書  式 機  能
OpenTimer1() void OpenTimer1(
 unsigned int config,
  unsigned int period)
タイマ1の動作モードを設定する
configには下記パラメータを含む
(1)Timer Module On/Off
  T1_ON  T1_OFF
(2)Idle Mode On/Off
  T1_IDLE_CON
  T1_IDLE_STOP
(3)32bit Mode disable
  T1_32BIT_MODE_OFF
(4)Gate Control
  T1_Gate_ON  T1_Gate_OFF
(5)PreScaler
  T1_PS_1_1  T1_PS_1_8
  T1_PS_1_64 T1_PS_1_128
(6)Clock Sync
  T1_SYNC_EXT_ON
  T1_SYNC_EXT_OFF
(7)Clock Source
  T1_SOURCE_EXT
  T1_SOURCE_INT

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

《例》
 OpenTimer1(T1_ON & T1_GATE_OFF &
    T1_PS_1_8 & T1_SYNC_EXT_OFF &
    T1_SOURCE_INT, 0xFF);
CloseTimer1() void CloseTimer1(void); タイマ1を停止させる
ConfigIntTimer1() void ConfigIntTimer1(
 unsigned int config)
タイマ1の割り込みの条件を設定する
configには下記の2種を指定する
(1)割り込みレベル
  T1_INT_PRIOR_m
   (mは0〜7のいずれか)
(2)割り込み許可・禁止
  T1_INT_ON   T1_INT_OFF
《例》
 ConfigIntTimer1(T1_INT_PRIOR_5 &
           T1_INT_ON);
WriteTimer1() void WriteTimer1(
   unsigned int timer)
TMR1レジスタにtimerの値を設定する
《例》
 WriteTimer1(0xAB);
ReadTimer1() unsigned int ReadTimer1(void) TMR1の内容を読み込む
《例》
 Timer1_value = ReadTimer1();



【使用例】

dsPIC30Fシリーズのタイマ1を割り込みで使った例題です。この例題では、
タイマ1を割り込みで使用し、50msec間隔のインターバルタイマ割り込みとしています。
その割り込みごとにPORTBに接続された4個の発光ダイオードをカウンタとして、順次
カウントアップして表示しています。点灯が0,1逆論理ですのでカウンタを減算しています。
割り込みの許可制御は、割り込み禁止レジスタのDISICNTレジスタを直接制御しています。












    目次ページへ