2012年1月10日火曜日

何となく動いたような(LED時計)

先のエントリーにあるように、CPUクロックとタイマーの駆動クロックを同一として、時計として動作させた場合に一秒のカウントが不規則に余分なカウントアップを起こす問題がありました。

マイコンチップ内部の動作状況を観測することはできませんので、あくまでも想像ですが原因としては、CPUからのタイマのレジスタ読み出しアクセスのタイミングと、タイマのレジスタが変化するタイミングがぶつかる事によって、内部のフリップフロップがメタステーブルを起こしているのではないかと考えました。

そこで、問題の起きていたソフトウェアでは、ポーリングによってタイマーの秒カウントの制御を行なっていた部分を、タイマ割り込みによって秒カウントの制御を行うように変更しました。全体の修正を行なってから未だ24時間経過して居ませんが、概ね正常にカウントしているように見えます。

0 件のコメント:

コメントを投稿

フォロワー