SSブログ

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

1990557

MCF52233には、PIT、GPT、DMA、DTIM、UART、QSPI、PWM、など様々なモジュールが入っています。 GPIOを操作してLEDの点滅が出来たように、SilentCからレジスタを操作することでこれらのモジュールを使うことが出来るようになると思います。 ところが、どのモジュールをSilentCで使用しているのか、という情報は出ていませんし、情報を請求することも出来ません。 仕方が無いから、自分で調査しますか。

調査方針

もちろん、SilentCが使っているであろうモジュールは見当がつきます。 EPHYとFECは、まず間違いなく使っているでしょう。 UART0もコンソールとして使っているはずです。

ところが、タイマのように外から見ただけでは、どれを使っていて、どれを使っていないかという事が判断できないモジュールもあります。 例えば、「10msecごとにタスクを切り替える際に使用されるのは、どのタイマなのか」ということは、倫理的な問題が残るかも知れませんが、SilentCのプログラムを読むしか知る方法ありません。

そこで、ここではもっとお手軽に、「レジスタ領域がデフォルトから変更されていたら、そのモジュールは使用されている。」という判断をすることとします。 つまり、レジスタ領域を逐一調査するということです。 前回作成した、メモリ・ダンプ・プログラムが使えます。 ちょっと(かなり)、面倒かもしれないな。

ポート機能

手始めにポートレジスタを調べました。

40100060  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
40100070  00 55 00 00 0f 02 00 00 00 00 00 00 00 00 00 00  .U..............

このアドレス(IPSBAR+0x10_0060)には、"Port Pin Assignment Register"と呼ばれるレジスタが並んでいて、それぞれの端子がどのような用途で使用されているのかがわかります。

レジスタ端子名設定
PNQPAR (0x10_0068)PNG[7:1]0x00_00 PNQ[7:1] 端子 (/IRQ7 ~ /IRQ1)は、すべてGPIO(00)として設定されています。 ただし、MCF52233付録基板のLQFP80パッケージでは、PNQ[7] PNQ[4] PNQ[1] の三つの端子しか出ていません。 また、 PNQ[4] (/IRQ4) 端子は、リカバリ用のEzPORT制御で、EZPCS出力に使われるようになっています。
PANPAR (0x10_006A)PAN[7:0]0x00 デフォルトでは、PAN[7:0] 端子は、すべてGPIO(0)として設定されています。 ただし、InitAd(char)関数でADC入力としてイニシャライズすると、値が変更されます。
PASPAR (0x10_006B)PAS[3:0]0x00 デフォルトでは、PAS[7:0] 端子は、すべてGPIO(00)として設定されています。 PAS[3:2]の基本機能は、ADCの変換タイミングを決定するSYNCxという信号だそうです。 また、PAS[1:0]の基本機能は、I2Cバスです。
PQSPAR (0x10_006C)PQS[6:0]0x00_00 デフォルトでは、PQS[6:0] 端子は、すべてGPIO(00)として設定されています。 ただし、MCF52233付録基板のLQFP80パッケージでは、PQS[3:0] の四つの端子しか出ていません。 PQS[6:0]の基本機能は、QSPIです。 また、リカバリ用のEzPORT制御でも使われます。
PTAPAR (0x10_006E)PTA[3:0]0x00 デフォルトでは、PTA[3:0] 端子は、すべてGPIO(00)として設定されています。 PTA[3:0]の基本機能は、GPTです。 別のレジスタにあるDDRTAの値(0x08 AdInit() 実行後は0x0E)を見ると、PTA[3:1]が出力として使用されていることがわかります。 回路図を見ると、これらの端子は、加速度センサの制御信号につながっているように見えるのですが、加速度センサの制御に使用されているのはPTA[2:1]で、PTA[3]は使われていません。 はて、どうしたわけだろう。
PTCPAR (0x10_006F)PTC[3:0]0x00 デフォルトでは、PTC[3:0] 端子は、すべてGPIO(00)として設定されています。 PTC[3:0]の基本機能は、DMA Timerです。
PTDPAR (0x10_0070)PTD[3:0]0x00 デフォルトでは、PTD[3:0] 端子は、すべてGPIO(00)として設定されています。 ただし、MCF52233付録基板のLQFP80パッケージでは、どの端子も出ていないので、使えません。
PUAPAR (0x10_0071)PUA[3:0]0x55 デフォルトでは、PUA[3:0] 端子は、すべて基本機能(01)として設定されています。 これらの端子の基本機能は、UART0です。 SilentCでは、このUARTを使ったモニタを装備しているので当然の結果でしょう。
PUBPAR (0x10_0072)PUB[3:0]0x00 デフォルトでは、PUB[3:0] 端子は、すべてGPIO(00)として設定されています。 これらの端子の基本機能は、UART1です。
PUCPAR (0x10_0073)PUC[3:0]0x00 デフォルトでは、PUC[3:0] 端子は、すべてGPIO(0)として設定されています。 ただし、MCF52233付録基板のLQFP80パッケージでは、どの端子も出ていないので、使えません。
PDDPAR (0x10_0074)PDD[7:0]0x0F デフォルトでは、PDD[7:4] 端子がGPIO(0)として、PDD[3:0]端子が基本機能(1)として設定されています。 これらの端子の基本機能は、DEBUGです。 そのため、PDD[3:0]からPST[3:0]、すなわちプロセッサ・ステータスが出てきそうなのですが、MCF52233付録基板のLQFP80パッケージでは、どの端子も出ていないので、使えません。 開発を行ったときの時のなごりでしょうか。
PLDPAR (0x10_0075)PLD[6:0]0x02 デフォルトでは、PLD[1]端子が基本機能(1)として、そのほかの端子は、GPIO(0)として設定されています。 これらの端子については、PLD[1]は、LNKLED出力として使用されていることがわかっています。 また、PLD[2]は、DDRLDレジスタの値(0x01)から、出力として使用されていて、ACTLEDを制御していることがわかります。 MCF52233付録基板のLQFP80パッケージでは、PLD[6:5]は出ていないので、使えません。
PGPPAR (0x10_0076)PGP[7:0]0x00 デフォルトでは、PGP[3:0] (/IRQ15 ~ /IRQ8)端子は、すべてGPIO(0)として設定されています。 ただし、MCF52233付録基板のLQFP80パッケージでは、PGP[3] (/IRQ11) しか出ていないので、使えません。

やっぱり、かなり面倒だわい。

参考文献

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

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

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

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

nice! 0

コメント 0

コメントを書く

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

トラックバック 0

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