p.480
実際にはコンペアマッチしていないのに、コンペアマッチしたことを示す信号がウェーブフォームジェネレーターへ供給される。何に使うのかはわからない。
非公式訳:
FOC0A
ビットが意味を持つのは、WGM02:00の各ビットでPWMモード以外のモードを指定したときだけです。
ただし今後登場するデバイスとの互換性を保つ手段として、たといPWMモードのときでも、TCCR0B
レジスタに書き込むときにはFOC0A
ビットを0にしてください。FOC0A
ビットに1が書き込まれた瞬間、実際はコンペアマッチしていないのにコンペアマッチしたことを示す信号がウェーブフォームジェネレーターユニットへ供給され、OC0Aピン(PD6)の出力がCOM0A1:0
の各ビットの設定に応じて変化します。FOC0A
ビットはストロボ(ストローブ)として機能します(訳註: 光った瞬間の光景が切り取られる(=FOC0A
ビットがセットされた瞬間のCOM0A1:0
の各ビット値が適用される))。そのため、強制コンペアマッチ時の動作はCOM0A1:0
の各ビット値によって決まります。
FOC0A
ビットがセットされても、割り込みは発生しませんし、CTCモードのときでもトップ値OCR0A
に達したわけではないためタイマーがクリアされることもありません。
FOC0A
ビットは、いつ読み出しても必ず0です。
#define F_CPU 8000000UL #include <avr/io.h> #include <util/delay.h> int main(){ DDRD |= (1 << PD6); // コンペアマッチ時にトグル。 // ノーマルポート動作。すなわちOC0Aピンは切り離されている。 // Waveform Generation Modeはノーマル。 // 分周比の設定もしない。 TCCR0A |= (1 << COM0A0); while(1){ TCCR0B |= (1 << FOC0A); _delay_us(10); TCCR0B |= (1 << FOC0A); _delay_us(30); } return 0; }