So-net無料ブログ作成

SilentCが使っていないモジュールを探せ(3) [ColdFire V2]このエントリーを含むはてなブックマーク#

2047506

モジュール探訪の旅。 今日は、Programmable Interrupt Timer (PIT) を走ります。

まずは、レジスタ領域ダンプ

PITモジュールの役目は、周期的に割り込みをかけることです。 割り込みをかける以外に特別な機能は持っていません。 また、MCF52233には、同じ構成のモジュールが2セット入っています。 タスク切り替え割り込みの本命ですね。

さっそく、レジスタ領域のダンプ・リストを取りましたが、いずれのPITも途中で止まってしまいます。

40150000  05 1b 24 9f 04 0f
40160000  00 00 ff ff ff ff

どうも、仕様上の正規のレジスタ以外の部分では、バス・エラーか何かが発生するようです。 ダンプ・プログラムに終了アドレスが指定できるように修正を加えてもいいのですが、6バイト分のデータは確認できたので、このまま調べます。

レジスタの考察

アドレス 0x40150000 からのPIT0モジュールが怪しいですね。 レジスタのビット・フィールドごとに解析しました。

フィールド考察
PRE0101 プリスケーラの分周比を指定します。 32分周が行われているので、基準クロックの周期は

2 × 32 ÷ 60MHz = 1.0667usec

と計算されます。
DOZE0 マイコンがdoze(うたた寝)モードに入ったときにタイマを止めるかどうかを決めます。 この設定では、dozeモードでもタイマは止まりません。
DBG0 マイコンがdebugモードに入ったときにタイマを止めるかどうかを決めます。 この設定では、debugモードでもタイマは止まりません。
OVW1 モジュラス・レジスタに値を書き込んだときに同時にカウンタも書き換えるかどうかを決めます。 デフォルトでは、次のアンダーフローまで待って書き換えるようになっているのですが、ここでは同時にカウンタを書き換える設定になっています。
PIE1 PIFフラグがセットされたときに割り込みを発生するかを決めます。 この設定では、割り込みが発生します。
PIF0 タイマのカウンタが0に達したときにセットされるフラグです。
RLD1 タイマのカウンタが0に達したときにモジュロ・レジスタの値をカウンタに書き込むかどうかを決めます。 この設定では、カウント0でモジュロ・レジスタの値が書き込まれるので、「モジュロ・レジスタの値+1」の周期で割り込みが発生します。
EN1 タイマ・モジュールをイネーブル・ディセーブルします。 この設定では、タイマはイネーブルされています。
PMR00x249F 割り込みの周期を決めます。 0x249Fは、10進数では、9375です。
PCNTR00x040F カウンタの値です。 読み出すたびに値が変わっているはずなので、値に意味はありません。

以上の調査から、割り込みの周期は、以下のように計算されます。

2 × 32 × (9375 + 1) ÷ 60MHz = 10.001msec

これが、SilentCで使用されている10msecの基準時間になっていると見て間違いないでしょう。

また、PIT1は、全く使われていないらしいことがわかります。 でも、割り込みしか能がないんじゃ、SilentCからは使いにくいな。

割り込みハンドラなどについては、後の課題とします。

参考文献

Interface (インターフェース) 2008年 09月号 [雑誌]

Interface (インターフェース) 2008年 09月号 [雑誌]

  • 作者:
  • 出版社/メーカー: CQ出版
  • 発売日: 2008/07/25
  • メディア: 雑誌

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

nice! 0

コメント 0

コメントを書く

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

トラックバック 0

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

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