PIC16(L)F1703/7
20.0 Timer1 モジュール ( ゲート制御
PIC16(L)F1704/8
20.1 Timer1 の動作
Timer1
モジュールは16
ビットのインクリメント カウ ンタで、TMR1H:TMR1L
レジスタペアを介してアクセ スします。TMR1H
またはTMR1L
に書き込むと、カウ ンタ値を直接更新できます。内部クロック源を使うと、このモジュールはタイマと して機能し、1命令サイクルごとにインクリメントし ます。外部クロック源を使うと、このモジュールはタ イマまたはカウンタとして機能し、外部クロック源の 指定したエッジごとにインクリメントします。
Timer1を有効にするには、 T1CONレジスタのTMR1ON
ビットとT1GCON
レジスタのTMR1GE
ビットをそれ ぞれセットします。表20-1に、Timer1のイネーブル 選択を示します。20.2 クロック源の選択
T1CON
レジスタのTMR1CS<1:0>
とT1OSCEN
ビッ トによりTimer1
のクロック源を選択します。表20-2 に、クロック源の選択を示します。20.2.1
内部クロック源内部クロック源を選択した場合、TMR1H:TMR1Lレジ スタペアは、
Timer1
プリスケーラで決まるF
OSCの倍 数単位でインクリメントします。F
OSCの内部クロック源を選択した場合、Timer1 レジ スタの値は、1命令クロックサイクルあたり4
カウン ト分インクリメントします。このため、Timer1
の値を 読み出す場合、分解能に2 LSB
の誤差が生じます。Timer1
の分解能を最大限に活かすには、Timer1
クロック 入力をゲート制御する非同期の入力信号が必要です。非同期の信号源として、以下のものが使えます。
• Timer1
ゲートへ接続されるT1G
ピン上の非同期イ ベント20.2.2
外部クロック源外部クロック源を選択した場合、
Timer1
モジュールは タイマまたはカウンタとして動作します。カウンタとして使う場合、Timer1 は外部クロック入力
T1CKI
の立ち上がりエッジでインクリメントします。この外部クロック入力は、マイクロコントローラのシス テムクロックに同期させる事が可能ですが、非同期で 動作させる事もできます。
クロック オシレータによるタイマとして使う場合、専 用の内部オシレータ回路と外付けの
32.768 kHz
水晶 振動子を使えます。表 20-1:
Timer1
イネーブル選択TMR1ON TMR1GE Timer1
の動作0 0
なし0 1
なし1 0
常にON
1 1
カウント有効Note:
カウンタモードの場合、下記の1
つまたは複数の条件発生後はカウンタが最初の 立ち上がりエッジでインクリメントする 前に、立ち下がりエッジを
1
回検出する 必要があります。• POR
後Timer1
を有効にした• TMR1H
またはTMR1L
に書き込んだ• Timer1
を無効にした• T1CKI
がHigh
の時にTimer1
を無効(TMR1ON = 0)
にして、その後T1CKI
がLowの時に Timer1
を有効(TMR1ON=1)
にした表
20-2:
クロック源の選択TMR1CS<1:0> T1OSCEN
クロック源PIC16(L)F1703/7
20.3 Timer1 プリスケーラ
Timer1
のプリスケーラは、クロック入力の1/1、1/2、
1/4
、1/8
倍の4
種類の設定が可能です。プリスケール カウンタは、T1CONレジスタのT1CKPS
ビットで制 御します。プリスケールカウンタは直接読み書きでき ません。しかし、TMR1HまたはTMR1L
への書き込み 時にクリアされます。20.4 Timer1 ( セカンダリ ) オシレータ
専用 の
32.768 kHz
低消 費電 力オ シレ ータ 回路 が、SOSCI (
入力)
とSOSCO (
アンプ出力)
の間に内蔵さ れています。この内部回路は、外付けの32.768 kHz
水 晶振動子と組み合わせて使います。オシレータ回路は、
T1CON
レジスタのT1OSCENビッ トをセットすると有効になります。このオシレータは、スリープ中も動作を継続します。
20.5 非同期カウンタモード時の Timer1 動作
T1CON
レジスタのT1SYNC
制御ビットをセットした 場合、外部クロック入力は同期されません。タイマは 内部位相クロックに非同期でインクリメントします。外部クロック源が選択されている場合、タイマはス リープ中も動作を継続するため、オーバーフロー割 り込みを生成してプロセッサを復帰させる事ができ ます。しかし、このタイマの読み書きには、ソフト ウェアに特別な注意を払う必要があります
(
セクション20.5.1「非同期カウンタモードにおけるTimer1の
読み書き」参照
)
。20.5.1
非同期カウンタモードにおけるTimer1
の読み書きタイマが外部の非同期クロックで動作している間は、
TMR1H
またはTMR1L
の正しい読み出し動作が(
ハー ドウェアによって)
保証されます。しかし、16
ビット タイマを2
つの8
ビット値として読み出すため、2回 の読み出しの間にタイマがオーバーフローする可能性 に注意する事が必要です。タイマへの書き込みの場合、実行前にタイマを停止す る事を推奨します。レジスタがインクリメント中にタ イマレジスタへ書き込むと、書き込みの競合が発生す る場合があります。この場合、
TMR1H:TMR1L
レジス タペアが予期しない値となる事があります。20.6 Timer1 ゲート
Timer1
は、フリーランニング カウンタ、またはTimer1
ゲート回路による有効/
無効切り換えが可能なカウン タとして設定できます。この機能はTimer1
ゲートイ ネーブルとも呼ばれます。Timer1
ゲートは複数の選択可能なソースによって駆動できます。
20.6.1 Timer1
ゲートイネーブルTimer1
ゲート イネーブルモードを有効にするには、T1GCONレジスタのTMR1GEビットをセットします。
Timer1
ゲート イネーブルモードの極性は、T1GCON レジスタのT1GPOL
ビットによって設定します。Timer1
ゲート イネーブルモードが有効の場合、Timer1
は
Timer1
クロック源の立ち上がりエッジでインクリメントします。
Timer1
ゲートイネーブルモードが無 効の場合、Timer1
はインクリメントせずに現在のカウ ント値を保持します。タイミングの詳細は、図20-3を 参照してください。Note:
このオシレータを使う場合、起動と安定化の時間が必要です。従って、Timer1を
使うには
T1OSCEN
をセットし、適切な遅延を確保する必要があります。OST遅 延と同様の遅延をソフトウェアで実装す るには、TMR1IF ビットをクリアしてか ら
TMR1H:TMR1L
レジスタペアをFC00h
にプリセットします。1024
クロックサイ クルが経過するとTMR1IF
フラグがセッ トされ、オシレータが動作中でかつ十分 安定している事を示します。Note:
動作を同期モードから非同期モードに切り換える際は、インクリメントがスキップ される可能性があります。非同期モード から同期モードに切り換える際は、イン クリメントが
1
回多く実行される可能性 があります。表 20-3:
Timer1
ゲートイネーブルの選択T1CLK T1GPOL T1G Timer1
の動作
0 0
カウントする
0 1
カウントを保持する
1 0
カウントを保持する
1 1
カウントするPIC16(L)F1704/8
20.6.2 Timer1
ゲートのソース選択表20-4に
Timer1
ゲートのソース選択を示します。ソー ス選択には、T1GCONレジスタのT1GSS
ビットを使 います。使える各ソースの極性も選択できます。極性 の選択には、T1GCONレジスタのT1GPOL
ビットを 使います。表 20-4:
Timer1
ゲートのソース20.6.2.1 T1G
ピンのゲート動作T1G
ピンは、Timer1
のゲート制御用に使われるソース の1
つです。このピンからTimer1
のゲート回路に外部 ソースを供給できます。20.6.2.2 Timer0
オーバーフロー ゲート動作Timer0
がFFh
から00h
へインクリメントすると、Low
からHigh
に遷移するパルスが自動的に生成され、内 部でTimer1
ゲート回路に供給されます。20.6.3 Timer1
ゲート トグルモードTimer1
のゲート トグルモードが有効の場合、シングルレベル パルスの長さではなく、Timer1 ゲート信号 のフルサイクルの長さを計測できます。
Timer1
ゲートのソースは、信号のインクリメント エッ ジごとにステートが変化するフリップフロップを介し て接続されます。タイミングの詳細は、図20-4を参照 してください。Timer1
ゲート トグルモードを有効にするには、T1GCON
レジスタのT1GTM
ビットをセットします。T1GTM
ビットがクリアされると、フリップフロップはクリア されて、その状態を保持します。これは、どのエッジ を計測するかを制御するために必要です。20.6.4 Timer1
ゲート シングルパルス モードTimer1
ゲートシングルパルスモードを有効にすると、シングルパルスのゲートイベントをキャプチャでき ます。
Timer1
ゲートシングルパルスモードを有効にす るには、まずT1GCON
レジスタのT1GSPM
ビットを セットします。次に、T1GCONレジスタのT1GGO/DONE
ビットをセットします。Timer1
は、次のインクリメン トエッジで完全に有効になります。パルスの次のト レーリング エッジで、T1GGO/DONE
ビットが自動的 にクリアされます。ソフトウェアでT1GGO/DONE
ビットが再度セットされるまで、他のいかなるゲート イベントもTimer1
をインクリメントできません。タ イミングの詳細は、図20-5を参照してください。T1GCON
レジスタのT1GSPM
ビットをクリアする事 でシングルパルス ゲート モードを無効にする場合、T1GGO/DONE
ビットもクリアする必要があります。トグルモードとシングルパルス モードを同時に有効 にすると、両方の動作を併用できます。これにより、
Timer1
ゲートソースのサイクル時間を計測できます。タイミングの詳細は、図20-6を参照してください。
20.6.5 Timer1
ゲート値ステータスTimer1
ゲート値ステータスを使うと、ゲート制御値の最新のレベルを読み出す事ができます。この値は、
T1GCON
レジスタのT1GVAL
ビットに格納されてい ます。Timer1
ゲートが有効ではない(TMR1GE
ビット がクリアされている)
場合でもT1GVAL
ビットの値は 有効です。20.6.6 Timer1
ゲートイベント割り込みTimer1
ゲートイベント割り込みが有効の場合、ゲートイベントの完了時に割り込みを生成できます。
T1GVAL
の立ち下がりエッジで、PIR1
レジスタのTMR1GIF
フラ グビットがセットされます。PIE1
レジスタのTMR1GIE
ビットをセットすると、割り込みの生成が認識され ます。Timer1
ゲートが有効ではない(TMR1GE
ビットがクリ アされている)
場合でも、TMR1GIF
フラグビットは動 作します。T1GSS Timer1
ゲートのソース00 Timer1
ゲートピン01 Timer0
のオーバーフロー(TMR0のFFhから 00hへのインクリメント)
10
予約済み11
予約済みNote:
ゲート極性の変更と同時にトグルモードを有効にすると、不定動作が生じる可能 性があります。