LOCKCNT

LOCKCNT( PLL Lock Counter )はPLLが安定するまで待つときに使うカウンターです。

不可解なことに(というか、アナデバの場合よくあることなんですが┐(・_・)┌)、このレジスタをどう使うか、HRにはまったく書いてありません。ただ、リセット時には不定であり、間違ってロック信号をだすことがあると書いてあるだけです。どうやら、219xコアの仕様をそのままコピーしているようです。

またHR 14-40にはBYPASSモードからCLOCK MULTIPLYモードへの遷移時にはLOCKCNTによってプロセッサが自動的にPLLのロックを待ってくれそうな意味合いのことが書いてあります。しかし実験してみるとそうではなくてBYPASSから抜ける前にPLLがロックしたかどうか自分で判断しなければなりません。

レジスタの構造

このレジスタには内部構造はありません。16ビット符号なし整数レジスタです。リセット後の初期値は不定ですが、十分に長い時間のリセットパルスを与えれば、リセット後の値は有意な値になっているようです。

API

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

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

sysreg_write(sysreg_IOPG, Clock_and_System_Control_Page)     // クロックページに設定

io_space_write(LOCKCNT, 値)         // LOCKCNTに値を設定
変数 = io_space_read(LOCKCNT)       // LOCKCNTの値を取得

参照情報

項目 マニュアルのページ等
説明 HR B-17

補足

以下の記述は推測を多く含みます。

ADSP-2199xにも同じレジスタがあり、ADSP-2199x HRはこれについてより深い説明を行っています。それによると、LOCKCNTはPLLをリセットした場合、逓倍率を変えた場合、PLLをオンにした場合などに0に初期化され、HCLKによってインクリメントされます。そして、値が0x200になったら停止します。

一方ADSP-219xのHR 14-34には、PLLが安定するのに500サイクルかかるとかいてあり、また、定常実行中に実チップのLOCKCNTを読み出すと0x200になっています。さらにBYPASSモードでMSEL4-0の値を変えると、LOCKCNTは0から始まって0x200で止まります。

こういったことを総合すると、LOCKCNTは次のような動作をします。

もっとも、LOCKCNTを使わずにプログラマーが0から0x1FFまで数え上げれば済むのですからそれほどLOCKCNTにしがみつく必要もありません。

2191空挺団 | プログラム | EZ-KIT | こぼれ話 | アーキテクチャー | 命令 | レジスタ | DSP掲示板 | FAQ |