« USB | トップページ | インプットキャプチャ »

2021年5月17日 (月)

割り切れない分周比でインターバル動作

動的にコンペアマッチの値を操作することで、
いろいろ柔軟なことができるネタ。

固定の定数では割り切れない分周比でも
有理数で表すことのできる分周比なら
ソフトウエアで実現できる。


サンプルコード

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
インターバルを作ったりできる。

つづく

| |

« USB | トップページ | インプットキャプチャ »

コメント

コメントを書く



(ウェブ上には掲載しません)




« USB | トップページ | インプットキャプチャ »