こんにちは、針山散策を今日もほのぼのと行います。
今回は、タイマ割り込みの定義の一例を記載します。
----------------------------------------------------
[ソース]
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 件のコメント:
コメントを投稿