PLLCTL

PLLCTL( PLL Control )はシステムクロックを供給するPLLの制御を行います。PLLの制御は繊細な部分があり、HRを熟読する必要があります。特に逓倍率の変更やパワーダウンへの移行は注意して行ってください。

レジスタの構造

図1にビット配置を示します。初期値は0x0010です。ハーフトーンの部分は予約領域です。予約領域には必ず0を書き込んでください。

図1 レジスタの構造

以下に各ビットの概略を説明します。詳細については必ずHRを参照してください。

DF : Divide Frequency
  • 1のとき、CLKINを1/2にします
  • 0のとき、CLKINをそのまま使います
PO : PLL Off
  • 1のとき、PLLを停止します
  • 0のとき、PLLは通常動作します
STOPALL : Stop All PLL Output
  • 1のとき、CCLKとHCLKは停止します
  • 0のとき、通常動作です
STOPCK : Stop Core Clock
  • 1のとき、CCLKが停止します
  • 0のとき、通常動作です
IOSEL : Core:Peripheral Clock ratio
  • 1のとき、HCLK=CCLK/2です
  • 0のとき、HCLK=CCLKです
PDWN : Power Down
  • 1のとき、DSPコアがパワーダウンモードに入ります
  • 0のとき、通常動作です
CKOUTEN : CLKOUT Enable
  • 1のとき、CLKOUTピンにクロックを出力します
  • 0のとき、CLKOUTピンは0です
DIV2 : Divide CLKIN/2 in Bypass Enable
  • 1のとき、バイパスモードでCCORE=CLKIN/2です
  • 0のとき、バイパスモードでCCORE=CLKINです
BYPASS : Bypasss PLL Mutiplier
  • 1のとき、PLL周波数シンセサイザをパスします。
  • 0のとき、PLL周波数異シンセサイザを使います。
MSEL4-0 : CLKIN Multipler Ratio

PLLの逓倍率を決めます。1-31の値は1-31倍の意味です。0を設定すると32倍になります。

MSEL5 : Second Stage Multiplier enable
  • 1のとき、MSEL4-0で決めた逓倍率をさらに2倍にします
  • 0のとき、MSEL4-0の値をそのまま使います。

MSEL5=1のときには、必ずDFも1にしてください。

MSEL6 : Output Multiplier Enable

名前が間違っています。これは逓倍ではなく分周を指定します。

  • 1のとき、HCLK=CCLK/2です
  • 0のとき、HCLK=CCLKです

PLL周辺回路の様子はなぜかHRで示されていません。ADSP-2199xのHRを参考にして調べたブロック図を下に示します。PLLの前後にそれぞれ分周器が入っているのを不信に感じるかもしれません。PLLの前の分周器はPLL入力周波数レンジを拡大するためのもので、より高いクロック周波数を許すことでシステム設計の負担を軽くします。一方、MSEL6は低消費電力モードへの以降をすばやく行うものです。MSEL6を使えば即座に周波数を半分にできるので消費電力も半分になります。一方、DFやMSEL4:0、MSEL5を変更するとPLLの動作周波数が変わるため、出力が安定するまでバイパスモードで待機しなければなりません。

バイパスモードはPLLを使わずにCLKINからの入力を直接利用します。PLLを止めれば大幅な消費電力低減を図ることができます。

図2 PLL周辺のブロックダイアグラム

最後にクロック入出力と内部のクロックの配分の様子を図3に示します

図3 PLLとクロックの分配

API

C/C++言語用に以下のインターフェースが用意されています。宣言はsysreg.hとdef2191.hで行われています。PLLCTLにアクセスする前には必ずIOPGにClock_and_System_Control_Pageを設定してください。

// #include <sysreg.h>
// #include <def2191.h>

sysreg_write(sysreg_IOPG, Clock_and_System_Control_Page)     // クロックページに設定
io_space_write(PLLCTL, 値)         // PLLCTLに値を設定
変数 = io_space_read(PLLCTL)       // PLLCTLの値を取得

アナログデバイセズが配布しているmcmの中のビット定義ファイルdef2191bit.hから関連するビット定義部分をここに引用します。

#define MSEL6                   BIT_15
#define MSEL5                   BIT_14
#define MSEL40_OFST             9
#define MSEL40_MASK             ( 0x1f << MSEL40_OFST )
#define MSEL40_0                ( 0 << MSEL40_OFST )
#define MSEL40_1                ( 1 << MSEL40_OFST )
#define MSEL40_2                ( 2 << MSEL40_OFST )
#define MSEL40_3                ( 3 << MSEL40_OFST )
#define MSEL40_4                ( 4 << MSEL40_OFST )
#define MSEL40_5                ( 5 << MSEL40_OFST )
#define MSEL40_6                ( 6 << MSEL40_OFST )
#define MSEL40_7                ( 7 << MSEL40_OFST )
#define MSEL40_8                ( 8 << MSEL40_OFST )
#define MSEL40_9                ( 9 << MSEL40_OFST )
#define MSEL40_10               ( 10 << MSEL40_OFST )
#define MSEL40_11               ( 11 << MSEL40_OFST )
#define MSEL40_12               ( 12 << MSEL40_OFST )
#define MSEL40_13               ( 13 << MSEL40_OFST )
#define MSEL40_14               ( 14 << MSEL40_OFST )
#define MSEL40_15               ( 15 << MSEL40_OFST )
#define MSEL40_16               ( 16 << MSEL40_OFST )
#define MSEL40_17               ( 17 << MSEL40_OFST )
#define MSEL40_18               ( 18 << MSEL40_OFST )
#define MSEL40_19               ( 19 << MSEL40_OFST )
#define MSEL40_20               ( 20 << MSEL40_OFST )
#define MSEL40_21               ( 21 << MSEL40_OFST )
#define MSEL40_22               ( 22 << MSEL40_OFST )
#define MSEL40_23               ( 23 << MSEL40_OFST )
#define MSEL40_24               ( 24 << MSEL40_OFST )
#define MSEL40_25               ( 25 << MSEL40_OFST )
#define MSEL40_26               ( 26 << MSEL40_OFST )
#define MSEL40_27               ( 27 << MSEL40_OFST )
#define MSEL40_28               ( 28 << MSEL40_OFST )
#define MSEL40_29               ( 29 << MSEL40_OFST )
#define MSEL40_30               ( 30 << MSEL40_OFST )
#define MSEL40_31               ( 31 << MSEL40_OFST )
#define BYPASS                  BIT_8   
#define DIV2                    BIT_7
#define CKOUTEN                 BIT_6
#define PDWN                    BIT_5
#define IOSEL                   BIT_4
#define STOPCK                  BIT_3
#define STOPALL                 BIT_2
#define PO                      BIT_1
#define DF                      BIT_0

参照情報

項目 マニュアルのページ等
ビット割り当て HR B-15
PLL解説 HR 14-32
パワーダウンモード HR 14-47
2191空挺団 | プログラム | EZ-KIT | こぼれ話 | アーキテクチャー | 命令 | レジスタ | DSP掲示板 | FAQ |