このドキュメントでは、LPCデバイスに存在するシステムクロックを生成する際に使用される各種ソースクロックと、それらのクロックソースを管理する主要モジュールについて説明します。
デバイスで利用可能な各種クロックソースを把握することは重要です。デフォルトのクロック構成を変更する目的には、プロセッサ性能の向上、シリアル通信の特定ボーレート達成、省電力、あるいはタイマの基準クロック取得などが挙げられます。
本ドキュメントで使用したハードウェアは以下のとおりです。
本ドキュメントで説明しているハードウェアおよびクロック管理モジュールは、各プラットフォームの概要を示したものであり、上記に列挙したデバイスはあくまで参考例です。同一プラットフォームでも、用語やハードウェアモジュールの機能が異なる場合があります。デバイスのハードウェアモジュールの詳細については、各デバイスのReference Manualを参照してください。
LPCプラットフォーム
システム制御ブロック(SYSCON)は、LPCプラットフォームでのクロック生成を容易にし、さまざまなクロックバリエーションが可能です。LPC55S6xプラットフォームの最大クロック周波数は150MHzです。
例えば、LPC55S69デバイスは外部クロックソースを2つ、内部クロックソースを3つサポートしています。
· 外部クロックソース
· 内部クロックソース
これらの96 MHzおよび12 MHzの出力周波数は、192 MHzのフリーラニングオシレータから生成されます。12 MHz出力はリセット時のデフォルトクロックとなり、電源ピンが動作電圧に達して間もなくクリーンなシステムクロックを提供します。
96MHz クロックは USB デバイスにのみ使用でき、データ信号レートの USB ホストのタイミング要件には信頼できないことに注意してください。
FROは電圧および温度の全範囲で±2%の精度にトリミングされています。このFROはDeep-Sleepモード、Power-Downモード、Deep-Power-Downモードなどの複数のパワーダウンモードで有効にでき、32ビットリアルタイムクロック(RTC)のクロックソースとしても使用されます。
この時計の精度は、組み立て中にトリミングを行った後、温度、電圧、シリコン処理の変動に対して±15%に制限されます。このFROはディープスリープモードで有効にでき、PLL0およびPLL1、WWDT(ウィンドウ・ウォッチドッグ・タイマー)のクロックソースとして使用できます。
LPC55S69は最大150 MHzで動作できますが、クロックソースは最終的なシステムクロック周波数(@150 MHz)より低速です。SYSCONブロック内の二つのフェーズループロックド(PLL0&PLL1)が、高周波数の外部クロックを用いずにCPUを最大動作周波数まで駆動します。
これらのPLLは、内部FRO@12 MHz、外部オシレータ、内部FRO@1 MHz、または32.768 kHz RTCオシレータから動作させることができます。これら複数のソースクロックは、2 kHz〜150 MHz という広い入力周波数範囲により、要求されるPLL周波数に適合します。PLLはソフトウェアで有効化/無効化できます。
以下の図は、使用可能な内部および外部クロックソース、SYSCONブロックとの相互作用、およびPLLモジュールの概要を示しています。
図 1. SYSCON概要図
SYSCONは、メインクロック、システムクロック、およびペリフェラルで使用されるクロックソースを管理します。
クロックソースを選択した後、アプリケーションに応じてPLLモジュールを使用して構成し、目的のクロック周波数を生成します。
また、SYSCONモジュールにはボード上の各ペリフェラル用に複数のクロックマルチプレクサがあり i.e(Systick, FullSpeed-USB, CTimer)、他のペリフェラルのクロックソース選択に関係なく各ペリフェラルが独自にソースクロックを選択できます。例えば、次の図は、前述のマルチプレクサと、そのモジュールで使用可能なすべてのソースクロックを示しています。
図 2. ペリフェラル用ソースクロック選択
詳細については、 LPC55S6x User Manualの「Chapter 4. System Control(SYSCON)」を参照してください。
例: PLLの有効化/無効化
MCUXpresso IDEで利用可能なクロックツールを使用すると、プラットフォーム内の周辺機器のクロックソースを理解し、構成できます。次の図は、150MHzで構成されたデフォルトのPLLモードを示しています。黄色のパスは、クロック構成に関与するすべての内部モジュールを示しています。
図 3. リセット時のLPC55S69におけるデフォルトPLLモード@150MHz
例として、Clock Toolsを用いてPLLのクロックソースを内部32MHz水晶発振器由来の clk_in に設定できます。この場合、PLLはバイパスモードに設定され、PLLが非アクティブとなるため省電力になります。
図 4. PLLのバイパス
PLL設定の詳細については、LPC55S6x User Manualの「Chapter 4.6.6.PLL0 and PLL1 functional description」を参照してください。
例: 以下の手順では、Clock Toolsを使って特定ペリフェラルのクロックソースを選択する方法を説明します。
1.1 特定ペリフェラルのクロック設定
T図17に示すように周辺機器を設定するには、Clock Toolsを使用して目的の周辺機器のクロックソースを設定することも役立ちます。たとえば、CTimer0 を使用する場合、利用可能なクロックソースは以下の通りです。
図5. CTimer0クロックソースセレクタ
CTIMERCLKSEL0 マルチプレクサを選択し、次に、記載されたクロックソースのいずれかに切り替えます。たとえば、 main_clk(メインクロック @150MHz)を選択すると、クロックマルチプレクサがアクティブになり、次の画像のように黄色のパスが強調表示されます。
図 6. CTimer0にメインクロックを接続
1.2 クロック構成をプロジェクトにエクスポート
クロック設定を完了すると、Clock Toolは clock_config.c および clock_config.hのソースコードを更新し、ツールで作成したすべてのクロック機能グループを含めます。これには 特定ペリフェラルのクロックソースが含まれます。前の例では、CTimer0をmain_clkに設定しました。これはソースコード内で次の命令に変換されます:“CLOCK_AttachClk(kMAIN_CLK_to_CTIMER0);”―この命令は“BOARD_BootClockPLL150M();”関数内に配置されます。
図 7. clock_config.cファイルから呼び出されるAPI
注意。周辺機器の内部レジスタを設定する前に、そのクロックソースを接続する必要があることを覚えておいてください。そうしないと、ハードフォールトが発生します。
参考情報
LPC55S6x/LPC55S2x/LPC552xユーザーマニュアル
またご覧ください