SSブログ

ColdFire V1 でTPMモジュールを使う - 何だ、HCS08と同じじゃん。 [ColdFire (ColdeFire) V1]このエントリーを含むはてなブックマーク#

クロック速度を計測するために、本格的にタイマ・モジュールを使うことにしました。 TPM1モジュールのCH0を "software only" の "output capture" で使います。

タイマの初期設定

初期設定は、こんなもんです。

TPM1SC_CLKSx = 1; // タイマにBUSCLK=4MHzを供給する
TPM1SC_PS = 2; // 1/4プリスケーラで 1µ秒周期でカウンタを動作させる
TPM1C0SC_MS0x = 1; // software output compare
TPM1C0SC_ELS0x = 1; // software output compare

バスクロックを4MHz、プリスケーラの出力を1µ秒周期にして、後の計算で楽をします。 タイマは、フリーランニングで使うので、モジュロ設定はしません。

タイマイベントを捕まえる

"output compare" イベントの待ち合わせには、 割り込みを使わずにフラグを監視します。

while (!TPM1C0SC_CH0F) {
  // Do nothing
}

whileの後ろに「セミコロンだけの空文」をつけると警告が出たので、 「括弧つき空文」としました。

イベントが発生したら、次回のイベント時刻を設定し、フラグをクリアします。

TPM1C0V += 10000; // 10msec later
TPM1C0SC_CH0F = 0; // clear flag

16ビットのタイマに1µ秒周期のクロックをあたえると、 10m秒周期でイベントを発生させるのが精一杯です。 ColdFireに16-bitタイマというのは、ちと物足りないな。

イベント50回、0.5秒ごとにポートをトグルすると、1秒周期でLEDが点滅します。

if (++count >= 50) { // 500msec event
  RGPIO_TOG = RGPIO_TOG_TOG8_MASK;
  count = 0;
}

HCS08と同じモジュールが入っているので、使い方もまったく同じです。 Cでプログラムを書いていると、CodFireを使っているのを忘れてしまいそうです。

ポートのトグルに使ったRGPIOモジュールの初期設定は、 ColdFire V1 のバス周波数を目で確認するに書きました。 実際のプログラムでは、COPの処理もお忘れなく。


nice!(0)  コメント(0)  トラックバック(0)  このエントリーを含むはてなブックマーク#

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。