2020年12月1日火曜日

[全般] タイマ割り込み処理の例

こんにちは、針山散策を今日もほのぼのと行います。


今回は、タイマ割り込みの定義の一例を記載します。


----------------------------------------------------

[ソース]

static unsigned long tau0_counter;


// function: タイマ割り込み処理

__interrupt static void timer_interrupt(void)

{

    if(tau0_counter!= 0)

    {

        tau0_counter--;

    }

}


// function: タイマを設定します。

void TIMER_SetTimer(unsigned long time)

{

   

    DisableInterrrupt();    // API名は変えてます。割り込み全体を禁止にします。

    tau0_counter= time;

    EnableInterrupt();        // API名は変えてます。割り込み全体を許可にします。

}


// function: 現在のタイマの値を取得します。

unsigned long TIMER_GetTimer(void)

{

    unsigned long result;

    result= tau0_counter;

    return result;

}


----------------------------------------------------

tau0_counter部分でいつもインクリメントをしていましたが、


今回はデクリメントすることでタイマを動作させています。


長所としては、tau0_counterがラップラウンドすることを

気にする必要がありません。


短所としては、複数のタイマ監視が同時に行えないことです。

(行う場合は複数個のtau0_counter相当を作っておく必要があります。)


イベントが必要なら、


tau0_counterが 0 になった時点でイベントフラグを立てて、

メインプログラムでそのフラグを見て処理を行えばよいです。


以上です。


0 件のコメント:

コメントを投稿