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の処理もお忘れなく。
コメント 0