[H8-ML(3351)] ソフトウエア・ウエイトの自動較正 (was Re:LCDのバス駆動について)
From: Shigeru Makino <mac@xxxxxxxxxxxxxx>
Date: 2003年06月03日(火)22時26分10秒
macです。

"Masanobu Suzuki" <signas@xxxxxxxxxxxxxxx> wrote:

> 適当なソフトウエア・ウエイトを挿入すれば特にBUSYをチェック
> する必要はありません。私は適当なループ回数で使っています
> が特に問題を起こしたことはありません。(厳密にはウエイト時間
> を計算すればいいんでしょうが・・・)

割り込みでドライブしているタイマーより、
短いWaitがちょっとほしいとき、

static void
stop(void)
{
        end = 0;
}

void
msleepInit(void)
{
        end = 1;
        tickloop = 0;

        timer(stop, TPS / 10, SNGL);

        while (end != 0) {
                tickloop--;
        }
        tickloop = -tickloop / 100;
}


void
msleep(unsigned long t)
{
        volatile long           cnt;

        cnt = t * tickloop;

        while (cnt != 0) {
                cnt--;
        }
}

のように、ループの時間を自分で較正してしまうと、
クロック周波数が変わっても、書き換えする必要がない、
汎用的な、Software Loopを作れます。

msleepInit()とmsleep()の構造を、
ぴったりあわせておくのがミソです。

-- mac

スレッド概略
[3349(R)](起点)
 └[3350(U)]
   └[表示中]


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


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