×

[PR]この広告は3ヶ月以上更新がないため表示されています。
ホームページを更新後24時間以内に表示されなくなります。

17. 8ビット タイマー/カウンター2 PWM機能と非同期動作

17.1 機能

17.2 概要

 タイマー/カウンター2 は汎用の単一チャンネル、8ビットのタイマー/カウンター・モジュールです。Figure17-1に、タイマー/カウンターの簡略化したブロック図を示します。実際の入出力端子の配置については、「ATmega48/88/168 ピン接続図」(p.2)を参照してください。CPUからアクセス可能な入出力レジスタと入出力ビット、入出力端子は太字で示されています。「レジスタ詳細」(p.152)に、各デバイスにおける入出力レジスタのアドレスとビット配置が記されています。

 タイマー/カウンター2モジュールを有効にするためには、「消費電力を最小化するために」(p.40)にある PRTIM2ビットをゼロにする必要があります。


Figure 17-1. 8ビット タイマー/カウンター ブロック図

17.2.1 レジスタについて

 タイマー/カウンター(TCNT2)、および出力比較レジスタ(OCR2A と OCR2B) は8ビットのレジスタです。割り込み要求(Int.Req.と図中では省略)信号はすべてタイマー割り込みフラグ・レジスタ (TIFR2) から参照可能です。すべての割り込みはタイマー割り込みマスク・レジスタ (TIMSK2) によって、個別に有効・無効の設定が可能です。TIFR2 と TIMSK2 は図中には描かれていません。

 タイマー/カウンターはプリスケーラーを経由した内部クロックをカウントするか、この節で解説するとおり、TOSC1/2端子からの非同期クロックにより動作します。非同期動作は、非同期ステータス・レジスタ(ASSR)によってコントロールされます。クロック選択ブロックはどのクロック源、および、どのクロックエッジによって、タイマー/カウンターがアップ・カウント(またはダウン・カウント)動作をするかを制御します。タイマー/カウンターはクロック源が選択されていない場合は休止しています。クロック選択ブロックからの出力はタイマークロック(clkT2)という名称で呼びます。

 二重バッファを備えた比較レジスタ (OCR2A と OCR2B) は、タイマー/カウンターの値と常に比較され、比較結果は波形発生器が比較一致出力端子 (OC2A と OC2B) に、PWM出力や可変周波数出力を発生させるために使用されます。詳細については、「出力比較ユニット」(p.141)を参照してください。比較が一致した際には比較フラグ (OCF2A または OCF2B) がセットされ、比較一致割り込み要求を発生させるために使用されます。

17.2.2 用語の定義

 このセクションでは、多くのレジスタと各ビットの名称は一般化された形式で記されています。小文字の"n"は、タイマー/カウンターの番号、この節では2となるものです。プログラム中で各レジスタやビットの定義を用いる場合は、正しい形式を使用しなければなりません。例えば、タイマー/カウンター2のカウント値にアクセスする場合はTCNT2を用いる、などです。

 Table 17-1 に示された用語も、データシート中で頻繁に使用されます。

Table 17-1. 定義
BOTTOM カウンターが0x00になったときを、BOTTOMに達した、といいます。
MAX カウンターが0xFF(10進で255)になったときを、MAXに達した、といいます。
TOP カウンターが、そのカウント動作において最大値に達したときを、TOPに達したといいます。TOPの値は固定値0xFF(MAX)に設定するか、OCR2Aレジスタの値に設定することが可能です。設定は動作モードによって異なります。

17.3 タイマー/カウンターのクロック源

 タイマー/カウンターは内部または外部の非同期クロック源で動作します。クロック源clkT2は、初期設定では、MCUのクロックに等しく設定されています。ASSRレジスタのAS2ビットに1を書き込むと、TOSC1とTOSC2に接続されたタイマー/カウンター用の発振回路からのクロックにより動作します。非同期動作の詳細については、「ASSR 非同期ステータス・レジスタ」(p.158)を参照してください。クロック源とプリスケーラの詳細については、「タイマー/カウンターのプリスケーラ」(p.151)を参照してください。

17.4 カウンターユニット

 8ビット タイマー/カウンターの中心部はプログラマブル双方向カウンターユニットです。Figure 17-2 は、カウンターと周辺回路のブロック図です。

Figure 17-2. カウンターユニット ブロック図

各信号(内部信号)の意味:
count TCNT2 を1だけ、アップ・カウントまたはダウン・カウントする
direction アップ・カウント、ダウン・カウントの方向選択
clear TCNT2 のクリア(全ビットを0にセット)
clkTn タイマー/カウンターのクロック。ここでは、clkT2と記載
top TCNT2 が最大値に達した、という信号を発生
bottom TCNT2 が最小値(0)に達した、という信号を発生

 使用している動作モードに応じて、カウンターの値はクロック(clkT2)ごとに、クリア、インクリメント、またはデクリメントされます。clkT2は外部または内部のクロック源から生成され、クロック選択ビット(CS22:0)によって選択されます。クロックが選択されていない場合(CS22:0 = 0)、タイマーは停止しています。ただし、clkT2クロックの有無に関わらず、TCNT2の値はCPUからアクセス可能です。CPUによる書き込みは、すべてのカウンターのクリア、またはカウント動作を上書きします(CPUによる書き込みが優先されます)。

 一連のカウント動作(カウント・シーケンス)は、タイマー/カウンターコントロールレジスタ(TCCR2A) 中の WGM21 および WGM20 ビット、タイマー/カウンターコントロールレジスタB (TCCR2B) 中の WGM22 ビットによって決まります。カウンターのカウント・シーケンスと、比較ユニットの OC2A および OC2B 出力に発生する波形には密接な関係があります。カウント・シーケンスと波形発生についての、より高度な詳細内容については「動作モード」(p.144)をご覧ください。

 タイマー/カウンター・オーバーフロー・フラグ (TOV2) は WGM22:0 によって選択される動作モードに応じてセットされます。TOV2 フラグはCPUへの割り込みを発生するために使用できます。

17.5 出力比較ユニット

 8ビットの比較一致検出回路によって、常に TCNT2 と比較レジスタ (OCR2A、およびOCR2B) の値が比較されます。TCNT2 と OCR2A、またはOCR2B の値が一致したとき、一致検出回路は信号を発生します。一致検出信号によって、次のクロックサイクルで、一致フラグ (OCF2A または OCF2B) がセットされます。対応する割り込みが有効になっている場合、一致フラグによって比較一致割り込みが発生します。割り込みが実行されると、一致フラグは自動的にクリアされます。別の方法として、ソフトウェアによって、対応するフラグのI/Oアドレスに論理値1を書き込むことで、一致フラグをクリアすることも可能です。波形発生器は比較一致信号を利用して、 WGM22:0 ビット、および比較一致出力モード・ビット(COM2x1:0)によって設定されている動作モードに応じた出力を発生させます。最大(max)および最小(bottom)信号は、波形発生器が特定の動作モードで、タイマーの極大値・極小値での動作を決定するために利用されます(「動作モード」(p.144)を参照)。

 Figure 17-3 に出力比較ユニットのブロック図を示します。

Figure 17-3. 出力比較ユニット ブロック図

 PWMモードを使用している場合には、OCR2x レジスタは二重バッファが有効になっています。通常モードとクリア・タイマー・オン・コンペア(CTC)モードでは、二重バッファは無効になっています。二重バッファによって、OCR2x 比較レジスタの更新を、カウント・シーケンスの top値、または bottom値のいずれかに同期させて行います。この同期で、不揃いな長さの非対称なPWMパルスが発生することを防止し、出力に異常パルス(グリッチ)が現れなくなります。

 この比較レジスタOCR2xへのアクセスは複雑に思えるかもしれませんが、そうではありません。二重バッファが有効になっていればCPUは比較レジスタのバッファにアクセスし、無効になっている場合、CPUは直接比較レジスタ OCR2xにアクセスするということです。

17.5.1 強制一致

 PWM波発生モードではない場合、強制一致ビット(FOC2x)に1を書き込むことにより、比較回路の一致出力を強制的に「一致したとする」ことができます。強制的に一致したとすることでは、比較一致フラグはセットされず、またタイマーの再ロードやクリアも行われません。しかし、OC2x端子の状態は、実際に比較結果が一致したかのように更新されます(COM2x1:0 ビットの設定によって、OC2x 端子がセット、リセットまたは反転するのかが決まります)。

17.5.2 TCNT2 への書き込みによる比較一致の阻止

 TCNT2レジスタへのCPUの書き込み動作は、どのような場合でも、その直後のタイマーのクロックサイクルで起きるはずの比較一致を阻止します。これはタイマーが停止している場合でも同じです。この機能により、タイマー/カウンターを有効にした途端に割り込みを発生させることなく、OCR2x レジスタを TCNT2 レジスタと同じ値に初期化することが可能になります。

17.5.3 比較ユニットの使い方

 TCNT2への書き込み動作によって、あらゆる比較一致が1タイマークロックサイクルの間、無効になるため、比較ユニットを使用している状態でTCNT2の値を変更すると、タイマー/カウンターが動作しているかどうかに関係なく、問題が発生する可能性があります。もしTCNT2に書き込まれた値がOCR2xと同じ値であったとすると、(書き込みにより無効になっているため)比較一致が検出されず、結果として意図しない波形出力が発生します。同様に、ダウンカウントをしている TCNT2 に、BOTTOM(最小値)と同じ値を書き込んではいけません。

 OC2xの設定は、入出力方向レジスタに該当ポートの端子の出力設定を行う前に実行する必要があります。通常モードでOC2xの値を設定する一番簡単な方法は、強制一致ストローブ・ビットを使用することです。これにより、OC2xレジスタの値は、波形発生モードを別のモードに変更する場合でも、正しく保持されます。

 COM2x1:0 ビットは比較する値とは異なり、二重バッファになっていないことに注意してください。COM0x1:0 ビットへの変更は即座に動作に反映されます。

17.6 比較一致出力ユニット

 比較一致出力モードビット Compare Output mode (COM2x1:0) には二つの機能があります。波形発生器は COM2x1:0 ビットを使用して比較一致出力 (OC2x) の次回の比較一致時の状態を定義しています。また、COM2x1:0 ビットは OC2x 出力端子にどの信号を出力するかの設定にも使用されます。Figure 17-4 に、COM2x1:0 ビットの設定によって影響を受ける論理回路の簡略化した回路図を示します。図中において、I/O レジスタ、I/O ビット、および I/O 入出力端子は太字で示されています。汎用I/Oポートのコントロールレジスタ(DDRおよびPORT)のうちCOM2x1:0 ビットによって影響を受けるもののみが描かれています。OC2x の状態を参照する際に対象となるのは、内部の OC2x ビット・レジスタであって、OC2x 端子の状態ではありません。

Figure 17-4. 比較一致回路出力ユニット 回路図

 汎用入出力ポートの機能は、COM2x1:0 ビットのいずれかがセットされている場合、波形発生器の比較出力(OC2x)の接続が優先されます。しかし、OC2x端子の入出力方向(設定が入力端子か、出力端子か)は、入出力方向レジスタ(DDR)によって対象となる端子の入出力方向が制御されています。入出力方向レジスタのOC2x端子(DDR_OC2x)の設定ビットは、OC2xの値が端子に反映されるよりも以前に、出力として設定されていなければなりません。ポートの端子機能の切り替えは、波形発生器のモードとは無関係です。

 この比較回路出力端子の設計によって、OC2xの状態を初期化してから出力を有効にすることが可能になります。COM2x1:0ビットの設定は特定の動作モードでは(将来拡張)予約となっていることに注意してください。詳しくは、「レジスタ詳細」(p.152)をご覧ください。

17.6.1 比較出力モードと波形の発生

 波形発生器は、ノーマル、CTC、PWMモードの各モードで、COM2x1:0ビットを異なる意味に使っています。すべてのモードにおいて、COM2x1:0 = 0 は波形発生器に対して、OC2xレジスタが次回の比較一致の際に何もしない、という設定です。PWM以外のモードでの、比較一致の際のアクションについては、Table 17-5 (p.153)を参照してください。高速PWMモードについては、Table 17-6 (p.154)を、位相補正PWMモードについては、Table 17-7 (p.154)を参照してください。

 COM2x1:0ビットの状態変更は、ビット書き込み後の最初の比較一致時の動作に影響があります。PWM以外のモードでは、FOC2x ストローブ・ビットを使用することで、強制的に一致時のアクションを発生させることが可能です。

17.7 動作モード

 動作モード(タイマー/カウンターと比較一致出力端子の挙動)は、波形発生モード(WGM22:0ビット)と比較一致出力モード(COM2x1:0ビット)の組み合わせによって定義されます。比較一致出力モードビットの内容は、カウント・シーケンスに影響を与えません。カウント・シーケンスに影響があるのは、波形発生モードビットです。COM2x1:0ビットはPWM出力を反転出力(反転PWM波)とするか非反転出力(非反転PWM波)とするか、を設定します。PWM以外のモードでは、COM2x1:0ビットは出力をセットするか、クリアするか、または、反転(トグル)するかを設定します。(「比較一致出力ユニット」(p.143)を参照してください。)

 動作タイミングの詳細な情報については、「タイマー/カウンター タイミング・ダイアグラム」(p.148)を参照してください。

17.7.1 通常モード

 通常モード(設定 WGM22:0 = 0)はもっとも単純な動作モードです。このモードでは、カウント動作の方向は常にアップカウント(インクリメント動作)で、カウンターのクリアは行われません。カウンターは8ビットの最大値(TOP = 0xFF)を単純に通過し、最小値(0x00)から再度カウントを続けます。通常モードにおいて、タイマー/カウンター・オーバーフロー・フラグ(TOV2)はTCNT2がゼロになるのと同一のタイマー・クロック・サイクルにおいてセットされます。このとき、TOV2フラグは、セットのみされクリアされない、という点をのぞいて、9番目のビットのように振る舞います。しかし、タイマー・オーバーフロー割り込みと組み合わせ、TOV2フラグを自動的にクリアするようにすると、タイマーの精度をソフトウェアによって増加させることが可能です。通常モードにおいては、カウンターに新しい値をいつでも書き込み可能で、特別な状況を想定する必要はありません。

 比較出力ユニットを使用して、特定の時間で割り込みを発生させるように設定することが可能です。通常モードで、比較一致出力を波形発生のために使用することは推奨されません。なぜなら、それを実現するためには多くのCPU時間を必要とするからです。

17.7.2 クリア・タイマー・オン・コンペア (CTC) モード

CTCモード (WGM22:0 = 2)では、OCR2A レジスタはカウンターの精度を操作するために使用します。CTCモードでは、カウンターはTCNT2の値がOCR2Aレジスタの値と等しくなった際にクリアされます。OCR2Aレジスタはカウンターの最大値を定義しており、したがって、その値がカウンターの精度となります。このモードを使用することで、比較一致出力の周波数を広範囲にわたって制御することが可能となります。また、外部イベントのカウント動作を簡単に行うこともできます。

 CTCモードのタイミング・ダイアグラムはFigure 17-5に示されています。カウンターの値(TCNT2)はTCNT2とOCR2Aの比較一致が発生するまで増加し、その後カウンター(TCNT2)がクリアされます。

Figure 17-5. CTC モード タイミング・ダイアグラム

 割り込みは、OCF2Aフラグを使用することで、カウンターの値が最大値(TOP)に達する度に発生させることが可能です。割り込みが有効になっていれば、割り込み処理ルーチン内で、最大値(TOP)の値設定を更新する、という使い方ができます。しかし、カウンターがプリスケーラなし、または、分周比の小さいプリスケーラで動作している時に、最大値(TOP)を最小値(BOTTOM)に近い値に更新するのには注意が必要です。なぜなら、CTCモードでは、二重バッファ機能は無効になっているためです。もし、OCR2Aに新たに書き込まれた値が、現時点でのTCNT2の値よりも小さかったら、カウンターは比較一致に失敗することになります。その場合、カウンターは最大値(0xFF)までカウントして0x00からスタートし、もう一周してから、比較一致が発生することになります。

 波形出力をCTCモードで使用するためには、比較一致出力モードビットをトグル・モード(COM2A1:0 = 1)に設定することで、OC2A出力が比較一致が起こる度に状態を反転(トグル)するように設定できます。OC2Aの値は、その端子の入出力方向が出力に設定されていなければ、出力端子に反映されません。生成される波形は、OCR2Aがゼロ(0x00)に設定されているとき、最大周波数 fOC2A = fclk_I/O/2 となります。波形の周波数は以下の式で計算されます。

f_OCnx = \frac{f_clk_I/O}{2 * N * (1 + OCR_nx)}

 Nの値はプリスケーラの分周比(1, 8, 32, 64, 128, 256, または 1024)を表します。

 通常モードと同様に、TOV2フラグはカウンターのカウント値がMAX値から0x00になるのと同じタイマー・クロック・サイクルでセットされます。

17.7.3 高速PWMモード

 高速PWMモード(WGM22:0 = 3 または 7)では、高い周波数でのPWM波を発生させることが出来ます。高速PWMモードは、位相補正PWM動作モードとは、片方向カウントの動作である点が異なります。カウンターはBOTTOMからTOPまでカウントを行い、再びBOTTOMからカウントを再開します。TOPの値は、WGM2:0 = 3のとき0xFF、WGM2:0 = 7のとき OCR2A の値、と定義されます。比較一致が非反転出力モードのとき、比較一致出力(OC2x)はTCNT2とOCR2xの値が一致したときにクリアされます。反転出力モードでは、比較一致の時に出力はセットされ、BOTTOMに達したときにクリアされます。片方向カウント動作のため、高速PWMモードの動作周波数は双方向カウント動作である位相補正PWMモードと比較して二倍の周波数にすることができます。このように高い動作周波数のため、高速PWMモードは電源の安定化、整流動作やD/Aコンバーターなどの応用に適しています。高い周波数での動作によって、外形寸法の小さな部品(コイル、コンデンサ)を用いることができ、したがってシステム全体のコストを削減することができます。

 高速PWMモードでは、カウンターはTOPの値と等しくなるまでインクリメントされ、そして次のタイマークロックサイクルでクリアされます。高速PWMモードのタイミング・ダイアグラムをFigure 17-6に示します。ダイアグラム中では、TCNT2の値が片方向カウント動作であることを表すグラフになっていることがわかります。タイミング・ダイアグラムには、非反転および反転PWM出力もあわせて描かれています。小さな水平線で示されたTNT2の斜め線上の位置はOCR2xとTCNT2の値が一致したことを表しています。

Figure 17-6. 高速PWMモード タイミング・ダイアグラム

 タイマー/カウンター・オーバーフローフラグ(TOV2)は、カウンターがTOPの値に到達すると毎回セットされます。割り込みが有効になっていれば、割り込み処理ルーチン内で比較レジスタの値を更新することが可能です。

 高速PWMモードでは、比較ユニットによってOC2x端子にPWM波出力を発生させることが出来ます。COM2x1:0ビットの設定を2にすることで非反転PWM出力を、COM2x1:0ビットの設定を3にすることで反転PWM出力を生成します。TOP値は、WGM2:0 = 3のとき0xFFに、WGM2:0 = 7のときOCR2Aの値に設定されます(Table 17-3 (p.153)を参照)。 実際のOC2xの値がポート端子に反映されるのは、該当端子の入出力方向の設定が出力設定になっている場合だけです。比較一致時にOC2xレジスタのセット(またはクリア)が行われ、カウンターがクリアされる(TOP値からBOTTOM値に更新)タイマークロックサイクルにおいて、OC2xレジスタがクリア(またはセット)されることによって、PWM波出力が発生します。

 PWM波出力周波数は次式で計算できます。

f_OCnxPWM = \frac{f_clk_I/O}{N * 256}

 Nの値はプリスケーラの分周比(1, 8, 32, 64, 128, 256, または 1024)を表します。

 PWM波出力を高速PWMモードで発生させているときに、OCR2Aレジスタに極端な値を設定すると特殊な状態の出力となります。OCR2AレジスタがBOTTOM値と同じ値に設定されると、(MAX+1)タイマークロックサイクルごとに短い幅のスパイク状のパルスが出力として現れます。OCR2Aレジスタの値をMAXと同じ値に設定すると、常にHiまたはLow(COM2A1:0 ビットによって設定された出力の極性により異なります)の出力となります。

 高速PWMモードで可変周波数出力(50%デューティー比)を得るには、OC2xレジスタの設定を比較一致のたびに、論理値をトグル(反転)するように設定(COM2x1:0 = 1)することで可能です。この場合、出力の最大周波数は、OCR2Aがゼロに設定されたときで、 fOC2 = fclk_I/O/2 となります。この機能は、高速PWMモードでは二重バッファが有効になっているという点以外は、CTCモードでのOC2Aのトグル(反転)動作と同様のものです。

17.7.4 位相補正PWMモード

 位相補正PWMモード(WGM22:0 = 1、または5)では、高精度の位相補正されたPWM波出力を可能にします。位相補正PWMモードは、双方向カウントで動作します。カウンターはBOTTOM値からTOP値へ、そしてTOP値からBOTTOM値へと繰り返しカウントを行います。TOP値はWGM2:0 = 1のとき0xFF、 WGM2:0 = 5のときOCR0Aの値と定義されます(訳注:WGM値の誤記訂正)。非反転比較一致出力モードでは、一致出力(OC2x)は、アップカウント時ではTCNT2とOCR2xの比較一致時にクリアされ、ダウンカウント時でセットされます。反転一致出力モードでは、論理を反転した動作となります。双方向カウント動作は、片方向カウント動作とくらべて、最大周波数は低くなりますが、双方向カウントによるPWMモードの対称的な動作のため、このモードはモーターの制御に適しています。

 位相補正PWMモードでは、カウンターはTOP値までインクリメントされ、TOP値に達したとき、カウント方向を変更します。TCNT2の値は1タイマークロックサイクルの期間、TOPの値と等しくなります。位相補正PWMモードのタイミング・ダイアグラムをFigure 17-7に示します。タイミング・ダイアグラム中で、TCNT2の値は双方向カウント動作のグラフとして示されています。タイミング・ダイアグラムには、非反転および反転PWM出力もあわせて描かれています。小さな水平線で示されたTNT2の傾斜線上の位置はOCR2xとTCNT2の値が一致したことを表しています。

Figure 17-7. 位相補正PWMモード タイミング・ダイアグラム

 タイマー/カウンター・オーバーフローフラグ(TOV2)は、カウンターがBOTTOMの値に到達すると毎回セットされます。割り込みフラグを用いて、カウンターがBOTTOM値に達するたびに割り込みを発生させることが出来ます。

 位相補正PWMモードでは、比較ユニットによってOC2x端子にPWM波出力を発生させることが出来ます。COM2x1:0ビットの設定を2にすることで非反転PWM出力を、COM2x1:0ビットの設定を3にすることで反転PWM出力を生成します。TOP値は、WGM2:0 = 1のとき0xFFに、WGM2:0 = 5のとき(訳注:WGM値の誤記訂正)OCR2Aの値に設定されます(Table 17-4 (p.153)を参照)。 実際のOC2xの値がポート端子に反映されるのは、該当端子の入出力方向の設定が出力設定になっている場合だけです。比較一致時にOC2xレジスタのセット(またはクリア)が行われ、カウンターがクリアされる(TOP値からBOTTOM値に更新)タイマークロックサイクルにおいて、OC2xレジスタがクリア(またはセット)されることによって、PWM波出力が発生します。

 位相補正PWM波での出力周波数は次式で計算できます。

f_OCnxPCPWM = \frac{f_clk_I/O}{N * 510}

 Nの値はプリスケーラの分周比(1, 8, 32, 64, 128, 256, 1024)を表します。

 PWM波出力を位相補正PWMモードで発生させているときに、OCR2Aレジスタに極端な値を設定すると特殊な状態の出力となります。非反転出力モードでは、OCR2AレジスタがBOTTOM値と同じ値に設定されると、出力は常にLowとなり、MAX値と同じ値に設定すると常にHiとなります。反転出力モードでは、論理値を逆転した出力になります。

 Figure 17-7において、周期2の最初において、比較一致が起こらないにもかかわらず、OCnxが HiからLowへ変化しています。この出力変更はBOTTOM値の前後において、対称性を確保するためのものです。比較一致がないのに出力が変化するケースは、以下の二つあります。

17.8 タイマー/カウンター タイミング・ダイアグラム

 以下の図は、同期モードでのタイマー/カウンターの動作を表し、タイマー・クロック(clkT2)はクロック・イネーブル信号として示されています。非同期モードでは、clkI/Oをタイマー/カウンター発信器のクロックに置き換えてください。各図は割り込みフラグがいつセットされるのか、ということをあわせて描かれています。Figure 17-8は、タイマー/カウンターの基本的な動作についてのタイミング・データを含んでいます。図は位相補正PWMモード以外のすべてのモードにおいて、MAX値に近い部分のカウントシーケンスを示しています。

Figure 17-8. タイマー/カウンター タイミング・ダイアグラム プリスケーラなし

 Figure 17-9 はプリスケーラが有効になっている点以外は、同じタイミング・データを示しています。

Figure 17-9. タイマー/カウンター タイミング・ダイアグラム プリスケーラ (fclk_I/O/8)

 Figure 17-10 は、CTCモードを除くすべてのモードにおいて、OCF2Aフラグがセットされる様子を表しています。

Figure 17-10. タイマー/カウンター タイミング・ダイアグラム OCF2xのセット、プリスケーラ (fclk_I/O/8)

 Figure 17-11は、CTCモードにおけるOCF2AフラグのセットとTCNT2のクリアについて描かれています。

Figure 17-11. タイマー/カウンター タイミング・ダイアグラム CTCモード、プリスケーラ (fclk_I/O/8)

17.9 タイマー/カウンター2の非同期動作モード

 タイマー/カウンター2を非同期クロックで動作させる場合の注意点がいくつかあります。

 非同期動作中は、非同期タイマーの割込みフラグの同期に3CPUサイクルに加えて、1タイマー・クロック・サイクルの時間が必要です。したがって、その割込みを発生させたタイマーの値をCPUが読み取るまでに、タイマーは少なくとも1カウント進んでいます。比較出力端子はタイマー・クロックにおいて変更され、CPUのクロックとは同期していません。

17.10 タイマー/カウンターのプリスケーラ

Figure 17-12. タイマー/カウンター2のプリスケーラ
 タイマー/カウンター2のクロック源は、clkT2Sという名称で示されています。clkT2Sは、初期設定では、メイン・システムI/OクロックclkI/Oに接続されています。ASSRレジスタのAS2ビットをセットすると、タイマー/カウンター2はTOSC1端子からのクロックにより、非同期で動作します。この機能により、タイマー/カウンター2をリアルタイム・カウンタ(RTC)として使用することが可能です。AS2がセットされている場合、TOSC1およびTOSC2端子はポートCから切り離され、TOSC1とTOSC2端子にクリスタルを接続して、タイマー/カウンター2の専用クロックとして使用することができます。この発振回路は32.768kHzのクリスタルでの使用に特化されています。  タイマー/カウンター2用に、分周クロックを、clkT2S/8, clkT2S/32, clkT2S/64, clkT2S/128, clkT2S/256, clkT2S/1024から選択できます。さらに、clkT2Sとして、0 (停止)を選択することもできます。  GTCCRレジスタのPSRASYビットをセットすると、プリスケーラをリセットできます。この機能により、ユーザープログラムによって、プリスケーラ使用の動作を予測可能なものにします。

17.11 レジスタ詳細

17.11.1 TCCR2A – タイマー/カウンター・コントロール・レジスタA

ビット 7 6 5 4 3 2 1 0
(0xB0) COM2A1 COM2A0 COM2B1 COM2B0 - - WGM21 WGM20 TCCR2A
Read/Write R/W R/W R/W R/W R R R/W R/W
初期値 0 0 0 0 0 0 0 0

17.11.2 TCCR2B – タイマー/カウンター・コントロール・レジスタ B

ビット 7 6 5 4 3 2 1 0
(0xB1) FOC2A FOC2B - - WGM22 CS22 CS21 CS20 TCCR2B
Read/Write W W R R R/W R/W R/W R/W
初期値 0 0 0 0 0 0 0 0

17.11.3 TCNT2 – タイマー/カウンター・レジスタ

ビット 7 6 5 4 3 2 1 0
(0xB2) TCNT2[7:0] TCNT2
Read/Write R/W R/W R/W R/W R/W R/W R/W R/W
初期値 0 0 0 0 0 0 0 0

 タイマー/カウンター・レジスタによって、リード、ライトのどちらでも、タイマー/カウンターユニットの8ビット カウンターへの直接アクセスができます。TCNT2レジスタへの書き込みは、それに続く次のタイマークロックでの比較一致を無視(取り消し)します。カウント動作中にカウンター(TCNT2)の変更を行うと、TCNT2とOCR2xレジスタとの比較一致が正しく行われない可能性があります。

17.11.4 OCR2A – 比較レジスタA

ビット 7 6 5 4 3 2 1 0
(0xB3) OCR2A[7:0] OCR2A
Read/Write R/W R/W R/W R/W R/W R/W R/W R/W
初期値 0 0 0 0 0 0 0 0

 比較レジスタAは、カウンターの値(TCNT2)と毎回比較される、8ビットの値を保持しています。比較一致によって、比較一致割り込みを発生させたり、OC2A端子に波形出力を発生させることができます。

17.11.5 OCR2B – 比較レジスタB

ビット 7 6 5 4 3 2 1 0
(0xB4) OCR2B[7:0] OCR2B
Read/Write R/W R/W R/W R/W R/W R/W R/W R/W
初期値 0 0 0 0 0 0 0 0

 比較レジスタBは、カウンターの値(TCNT2)と毎回比較される、8ビットの値を保持しています。比較一致によって、比較一致割り込みを発生させたり、OC2B端子に波形出力を発生させることができます。

17.11.6 TIMSK2 – タイマー/カウンター2 割り込みマスクレジスタ

ビット 7 6 5 4 3 2 1 0
(0x70) - - - - - OCIE2B OCIE2A TOIE2 TIMSK2
Read/Write R R R R R R/W R/W R/W
初期値 0 0 0 0 0 0 0 0

17.11.7 TIFR2 – タイマー/カウンター2 割り込みフラグレジスタ

ビット 7 6 5 4 3 2 1 0
0x17(0x37) - - - - - OCF2B OCF2A TOV2 TIFR2
Read/Write R R R R R R/W R/W R/W
初期値 0 0 0 0 0 0 0 0

17.11.8 ASSR – 非同期ステータス・レジスタ

ビット 7 6 5 4 3 2 1 0
(0xB6) - EXCLK AS2 TCN2UB OCR2AUB OCR2BUB TCR2AUB TCR2BUB ASSR
Read/Write R R/W R/W R R R R R
初期値 0 0 0 0 0 0 0 0

 タイマー/カウンター2の5つのレジスタに対して、更新ビジー・フラグがセットされている間に書き込みを行うと、更新される値が破壊される恐れがあり、意図しない割込みを発生させる原因となります。

 TCNT2, OCR2A, OCR2B, TCCR2A, TCCR2Bレジスタの読み込みのしくみは異なっています。

 TCNT2レジスタを読み取る際には、実際のタイマーの値が読み込まれます。OCR2A, OCR2B, TCCR2A, TCCR2Bレジスタを読み取る際は、一時レジスタに保存されている値が読み込まれます。

17.11.9 GTCCR – タイマー/カウンター・全体コントロール・レジスタ

ビット 7 6 5 4 3 2 1 0
0x23 (0x43) TSM - - - - - PSRASY PSRSYNC GTCCR
Read/Write R/W R R R R R R/W R/W
初期値 0 0 0 0 0 0 0 0

目次に戻る