[H8-ML(4004)] Re: :Re:位相計数カウンタについて
From: 土屋 <hideki-tsuchiya@xxxxxxxxxx>
Date: 2003年10月09日(木)11時05分23秒

はじめまして。

位相カウンタの16bit以上への拡張方法ですが、
以下の方法ではどうでしょう?

volatile signed long TCNT32; //  32bits拡張カウンタ

signed long refreshTCNT32()
{
    static unsigned short TCNTold; //  前回のTCNT値を記憶。
    unsigned short TCNTnew;

    // disable_interrupt(); // 割り込み禁止
    TCNTnew = TCNT;
    signed short diff = TCNTnew - TCNTold; //  前回値と今回値の差を取得
    TCNTold = TCNTnew;
    TCNT32 += diff; // カウンタ値を更新
    // enable_interrupt(); // 割り込み許可

    return TCNT32;
}

上記のrefreshTCNT32()をTCNTが最大でも32767を超えない周期で呼ぶ。
(ex.1mSインターバル割り込み等)

普段の参照はTCNT32値を使用すれば、

>割り込みが起こり、この処理が行われる前に、
>もう一度、オーバーフロー/アンダーフローが、
>起きている可能性があるのです。

の問題にも引っかかりません。

・・・と思うんですけどどうでしょう?

土屋
スレッド概略
[3936(R)](起点)
 └[4002(U)]
   └[表示中]
     └[4006(1)]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]