割り切れない分周比でインターバル動作
動的にコンペアマッチの値を操作することで、
いろいろ柔軟なことができるネタ。
固定の定数では割り切れない分周比でも
有理数で表すことのできる分周比なら
ソフトウエアで実現できる。
サンプルコード
void TIM2_IRQHandler(void) {
static int rot = 0;
if (TIM2->SR & (1 << 1)) {
TIM2->SR = ~(1 << 1);
rot++;
if (rot > 2){
rot = 0;
TIM2->CCR1 += 3334;
}
else {
TIM2->CCR1 += 3333;
}
}
}
なんてやると、例えば10MHzのベースクロックから、
”正確な” 3KHz インターバルが生成できたりする。
(デジタル処理由来のジッタはあるが、
トータルでは正確なタイミングになる。)
上の例では、インターバル周期3333.3333 ..... となる。
例えば、最近ではあまり見ないけど、
ビデオ信号のカラーバーストの4fc、
14.31818MHzから、正確な1msec
インターバルを作ったりできる。
つづく
| 固定リンク | 0
« USB | トップページ | インプットキャプチャ »
コメント