SilentCが使っていないモジュールを探せ(3) [ColdFire V2]
モジュール探訪の旅。 今日は、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モジュールが怪しいですね。 レジスタのビット・フィールドごとに解析しました。
フィールド | 値 | 考察 |
---|---|---|
PRE | 0101 |
プリスケーラの分周比を指定します。
32分周が行われているので、基準クロックの周期は
2 × 32 ÷ 60MHz = 1.0667usec と計算されます。 |
DOZE | 0 | マイコンがdoze(うたた寝)モードに入ったときにタイマを止めるかどうかを決めます。 この設定では、dozeモードでもタイマは止まりません。 |
DBG | 0 | マイコンがdebugモードに入ったときにタイマを止めるかどうかを決めます。 この設定では、debugモードでもタイマは止まりません。 |
OVW | 1 | モジュラス・レジスタに値を書き込んだときに同時にカウンタも書き換えるかどうかを決めます。 デフォルトでは、次のアンダーフローまで待って書き換えるようになっているのですが、ここでは同時にカウンタを書き換える設定になっています。 |
PIE | 1 | PIFフラグがセットされたときに割り込みを発生するかを決めます。 この設定では、割り込みが発生します。 |
PIF | 0 | タイマのカウンタが0に達したときにセットされるフラグです。 |
RLD | 1 | タイマのカウンタが0に達したときにモジュロ・レジスタの値をカウンタに書き込むかどうかを決めます。 この設定では、カウント0でモジュロ・レジスタの値が書き込まれるので、「モジュロ・レジスタの値+1」の周期で割り込みが発生します。 |
EN | 1 | タイマ・モジュールをイネーブル・ディセーブルします。 この設定では、タイマはイネーブルされています。 |
PMR0 | 0x249F | 割り込みの周期を決めます。 0x249Fは、10進数では、9375です。 |
PCNTR0 | 0x040F | カウンタの値です。 読み出すたびに値が変わっているはずなので、値に意味はありません。 |
以上の調査から、割り込みの周期は、以下のように計算されます。
2 × 32 × (9375 + 1) ÷ 60MHz = 10.001msec
これが、SilentCで使用されている10msecの基準時間になっていると見て間違いないでしょう。
また、PIT1は、全く使われていないらしいことがわかります。 でも、割り込みしか能がないんじゃ、SilentCからは使いにくいな。
割り込みハンドラなどについては、後の課題とします。
参考文献
Interface (インターフェース) 2008年 09月号 [雑誌]
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2008/07/25
- メディア: 雑誌
コメント 0