Keil µVision4 + GCC (3) LPC2300 (2) Clock Setup2012年10月14日 20時58分54秒

コンフィギュレーションウィザード
修正した LPC2300.s がうまく動いた所でコンフィギュレーションウィザードを使ってPLLの設定をいろいろ変えて確認する。
その前にLPC2388のデータシートで概略を見てみよう。

・ARM7TDMI-S processor, running at up to 72 MHz.
・The flash memory is 128 bits wide and includes pre-fetching and buffering techniques to allow it to operate at SRAM speeds of 72 MHz.
・The nominal IRC frequency is 4 MHz.
・The PLL input, in the range of 32 kHz to 25 MHz.
・The resulting frequency must be in the range of 275 MHz to 550 MHz.
・CCLKCFG(CCLKSEL) is only 0 and odd values (1, 3, 5, ..., 255)
・a value ‘M’, in the range of 1 through 32768.
・a value ‘N’, which may be in the range of 1 to 256.
・MAMCR
 0 - MAM functions disabled
 1 - MAM functions partially enabled
 2 - MAM functions fully enabled
・MAMTIM
 1 - For a system clock slower than 20 MHz.
 2 - For a system clock between 20 MHz and 40 MHz.
 3 - For a system clock between 40 MHz and 60 MHz.
 4 - For system clocks of 60 MHz and above..

Datasheet と User manual では書いてある数値が異なる場合があるが主に Datasheet の記述を引用している。

さて、ここで気になるのは動作クロックとPLL出力周波数の最大と最小はどのくらいになるかということだ。幸いPLLを使えばクロックは自由に設定できるので気軽に試すことができる。
まず、PLL出力周波数 (Fcco) の最小値は?
OSC=RCosc
M=7
N=1
CCLKSEL=4
PCLK_TIMER0=0 (1/4)
Mが7未満では動かないので上記の設定が最小値になる。
Fcco = Foscx2xM/N = 4x2x7/1 = 56MHz
Fcclk = Fcclk/PCLK_TIMER0 = Fcco/CCLKSEL = 56/4 = 14MHz
PCLK = 14/4 = 3.5MHz
確認のため T0MR0 に 1750000-1 を設定して点滅速度で確認する。
結果:問題なく動作

それでは、PLL出力周波数 (Fcco) の最大値は?
OSC=RCosc
M=130
N=1
CCLKSEL=16
PCLK_TIMER0=1(1/1)
Mが141までは動くが点滅速度が逆に遅くなるのでPLLがうまく動作していないのだろう。従って、上記の設定を最大値ということにする。
Fcco = Foscx2xM/N = 4x2x130/1 = 1040MHz
Fcclk = Fcco/CCLKSEL = 1040/16 = 65MHz
PCLK = Fcclk/PCLK_TIMER0 = 65/1 = 65MHz
確認のため T0MR0 に 32500000-1 を設定して点滅速度で確認する。
結果:問題なく動作

最後は動作クロック (Fcclk) の最大値は?
OSC=RCosc
M=58
N=1
CCLKSEL=4
PCLK_TIMER0=1(1/1)
Mが59になると動かないので上記の設定が最大値ということになる。
Fcco = Foscx2xM/N = 4x2x58/1 = 464MHz
Fcclk = Fcco/CCLKSEL = 464/4 = 116MHz
PCLK = Fcclk/PCLK_TIMER0 = 116/1 = 116MHz
確認のため T0MR0 に 58000000-1 を設定して点滅速度で確認する。
結果:問題なく動作

少しは余裕があると思っていたが結構余裕があるものだ。ただし、Fcclk 116MHz になると MAMCR=0 MAMTIM=7 でしか動かない。従って、MAMCR=2 MAMTIM=3 で動く Fcclk 100MHz あたりが一番高速なのかもしれない。そして、細かく設定を変えて試したい場合必要な部分だけ簡単に変更できるコンフィギュレーションウィザードはありがたかった。しかし、自分で書くとなると頭が痛くなる。あまりなじみの無い書式だ。

環境:CQ-FRK-NXP-ARM
    + Keil MDK-ARM V4.53
    + GCC Sourcery CodeBench Lite 2012.03-56
    + KPIT Cummins GNU-Archive Editor v1.1
    + KPIT Cummins GNU-Map Viewer v1.0