2016-12-15 14 views
0

私はSTM8タイマーで作業しています(私のコードではなく、それを維持しています)。タイマーを使用しています。どうやら、クロックは16MHzのerfo 0.0625uSに設定されています。タイマーの設定はARRH = 0x03です。したがって、ARRL = 0x20(0x0320 = 800)は800(ergo 50us)でリセットされます。 PSCRは0に設定されているため、タイマーはマイクロと同じ周波数になります。STM8タイマーが正しいタイミングでチクチクしていない

とにかく、これをオシロスコープでチェックすると、良好な読みが得られません。 タイマ割り込みがで呼び出されます(?) 56us、54uS、54uS、52uS、52uS、52us、38us(!!!)、42us、50US、50US ....

はcurioslyそれは500USを与えるまとめそれは10回50uSとして数えます

タイマ割り込みで最初の8回は何らかのAD変換が起こっているので、AD割り込みが間にも呼び出されている可能性があります。

1)これはタイマーの頻度に影響していると思いますか?

2)38uSで割り込みを発生させると、なぜそれが「正しい」か?

私は、正確な答えは、コードを検討する必要があります知っているので、私は、私はあなたがまだ答えを必要とするかどうかわからないんだけど...、

答えて

2

をお使いの埋め込みまたはSTM8経験に基づいて、任意のコメントをいただければ幸いです。私は一度同じことをして、長い時間を探しました。私の場合、単純な解決策:

私は高いジッタを持つADC ISRを持っていました。それは私のメインループから来たものです。いくつかのサブサブ・サブ・ルーチンでは、クリティカル・セクション(割り込みとメイン・ループ・コンテキスト間のデータ転送)に対してADC割り込みが一時的に非アクティブ化されていました。その効果は、あなたが明記している通りです。

割り込みが再度有効になるまで、割り込みが保留中で実行を待っているため、2つの割り込みの間の時間が長くなることがあります。タイマーは引き続き実行されています。タイミング例は:

  1. 割り込みは割り込みフラグがタイマーで設定されて
  2. メインループ(またはサブルーチン)で無効になっている - >
  3. 割り込みを保留すると、再び有効になっている割り込み - > ISRは遅すぎる実行され
  4. 割り込みが
  5. 割り込みフラグがタイマーで設定されたメインループで無効になっている - >
  6. 割り込みを保留すると、再び有効になっている - > ISRはあまり遅すぎる実行され
  7. メインループは、場合によっては割り込みを無効にしません(おそらくは制御フローによって、おそらくはタイミングの問題)
  8. 次の割り込みは、最後の割り込みを発生してから50us、最後のISRを呼び出した後で50usです。 ISR通話の時間が短縮されます。

私は助けてくれることを願っています。

関連する問題