概要
disableTimer()は、tone()で設定したタイマ/カウンタを初期化します。
tone()の出力に利用しているタイマ/カウンタの番号を調べてタイマ/カウンタを停止します。
ソースコード
disableTimer()は、hardware/arduino/avr/cores/arduino/Tone.cpp に定義されています。以下に全ソースコードを示します。
|
|
disableTimer()の入力は_timerでuint8_t型の変数です。返却値はありません。
_timerの値によって分岐します。現状の実装では、2か-1が渡ってきます。_timerが-1のときは何もせずに終了します。_timerが2のときは、TIMSK2とTCCR2A、TCCR2B、OCR2Aを設定し、tone()で設定したタイマ/カウンタをもとに戻します。
|
|
TIMSK2は、割り込みマスクを制御するレジスタで、tone()関数でOCIE2Aビットを1に設定し、割り込みを許可しています。ここでは、bitWrite()を使ってOCIE2Aビットを0にすることで、割り込みを禁止しています。
TCCR2A、TCCR2Bは、タイマ/カウンタ2を制御するレジスタです。詳細は、analogWrite()のページを見てください。
TCCR2Aの、WGM20だけを1にしています。他のビットは0になります。この場合、タイマ/カウンタ2は、Phase Correct PWMモードで動作します。analogWrite()で利用するモードで、init()でも同様の設定を行っています。
TCCR2Bは、0b11111000と論理積をとったうえで、CS22ビットを設定しています。上位5ビットは元の値を保持したうえで、下位3ビットのうちCS22ビットだけを1に設定しています。これによりクロックの分周比を64にしています。これも、analogWrite()で利用する際の値で、init()で設定した値と同じです。
バージョン
Arduino AVR Boards 1.8.6
最終更新日
March 21, 2023