MCUXpressoは、NXPが提供するマイコン開発用ソフトウェアプラットフォームで、MCUXpresso IDEに加えて、MCUXpresso for VSC (Visual Studio Code)や、 ペリフェラル設定を支援するConfig Toolsも提供しています。
Config Toolsは、ピン設定を行う「Pins Tool」や、クロック構成を設定する「Clocks Tool」などで構成されており、マイコン周辺の初期設定をGUI上で直感的に分かりやすく行える点が特長です。本記事では、この中から クロック設定を担当する「Clocks Tool」 に焦点を当てて解説します。
クロック設定は、マイコンの性能・消費電力・各ペリフェラルの動作に直結する重要な要素です。一方で、クロックツリーは構成が複雑で、「どのクロックがどこで使われているのか分かりにくい」と感じる方も多いのではないでしょうか。Clocks Toolを使うことで、クロックソースや分周設定、各ペリフェラルへのクロック供給状況を可視化しながら設定・確認できます。また設定内容に応じた初期化コードを自動生成することもできます。
MCUXpresso IDEをインストールした場合には、Config Toolsも一緒にインストールされるため、IDEに内蔵された機能として利用可能です。一方、近年組み込み開発においても利用が広がっている Visual Studio Code(VSC)環境では、MCUXpresso関連の拡張機能をインストールすることで、同様にConfig Tools(Clocks Toolを含む)を利用できます。Config Toolsの機能自体は、IDE版とVSC版で大きな違いはありません。
本記事では、VS Code環境におけるConfig Toolsのインストール方法から、ツールの使い方を説明し、最後にFRDM-MCXN947を用いて、実際にClocks Tool内でCPUクロック設定を変更し、LEDの点滅速度を変えるデモンストレーションを紹介します。
VS Code環境におけるConfig Toolsのインストール方法について解説します。
※MCUXpresso for VS Codeのインストールがお済みでない方はこちらのブログをご参照ください。
VS Codeを起動後、左側のパネルからMCUXpressoを選択し、Quick Start PanelよりOpen MCUXpresso Installerをクリックしてください。
Installerが立ち上がりますので、MCUXpresso Configuration Toolsを選択し、右上のInstallをクリックしてください。
(今回のブログではMCUXpresso Config Tools v26.03 をInstallしています)
インストールの開始と同時にMyNXPへのログインを求められます。
ログインの後、License Agreementが表示されますので内容をご確認のうえ同意してください。
※インストール後は、VS Codeを再起動してください。
Q. もしインストールに失敗した場合は?
A. 以下ウェブサイトからのご自身のPC OS環境に応じたインストーラーをダウンロードして、試してください。
MCUXpresso Config Tools | NXPマイクロコントローラ (MCU) 向けソフトウェア開発 | NXP Semiconductors)
インストールを進めると初期画面で以下のような画面が表示されますが、該当がなければ閉じて問題ありません。
VS CodeからConfig Toolsを呼び出すにはSDKをインストールし、サンプルをインポート後、プロジェクトを右クリックすると Open with MCUXpresso Config Toolsが現れますので、こちらをクリックしてください。
※この一連のプロセスは最後のデモンストレーションで詳細に説明するので、ここでは割愛します。
しばらくするとConfig Toolsが起動します。
なおMCUXpresso IDEを使用している場合、Config Toolsは標準で統合されており、上部タブから直接起動できます。
Config Tools起動後、画面右側のパネルでツールの切り替えが可能です。
今回は「Clocks」を選択します。
クロック設定を変更する際によく使用するClocks Diagramは、画面左上から選択することができます。
画面右下のProblemビューには、設定内容に関するエラーや警告が表示されます。
クロック設定に誤りがあり、エラーが発生するとProblemビューにはエラーの発生箇所と原因が表示されます。またClock Diagram上にも該当箇所が赤色でハイライト表示されるため、問題箇所を視覚的に特定できます。
例えば、CPUクロックが規定の最大値を超えるような設定を行った場合、その旨のエラー(下記)が表示されます。
ここではClocks Toolを使用するうえで、Clock Diagram上に表示される基本用語を整理します。
Clock Tree (クロック・ツリー)
クロックがどこで生成され、どのように分配・選択され、各ブロックへ供給されるかを示した構成図(ツリー図)です。Clocks Toolでは、このClock Treeを視覚的に確認しながら設定を行います。
Clock Source (クロック供給源)
クロックの起点となる信号源です。内蔵RCクロックや外部クリスタル(振動子)、外部クロック入力などが該当し、クロックツリーの上流に配置されます。
MCX N947では、標準で48MHzの内蔵RCクロック(FIRC)がClock Sourceとして使用されます。
PLL (Phase Locked Loop)
Clock Sourceを入力として、安定した高周波クロックを生成する回路です。
倍率設定や分周設定によって出力周波数を調整でき、CPUや高速バス向けのクロックを柔軟に作ることができます。
ここでは、Clock Sourceである48MHzの入力クロックをもとに300MHzのクロック(48MHz/8*50=300MHz)を生成しています。
DIV (Divider : 分周器)
クロック周波数を分割して調整するための機能です。
CPU、バス、各ペリフェラルごとに分周設定が用意されており、必要な動作周波数に調整するために使用されます。
以下では、PLL0で生成された300MHzのクロックから150MHzのクロック(300MHz/2=150MHz)を生成しています。
Mux (Multiplexer:マルチプレクサ)
複数のクロック候補の中から、どのクロックを使用するかを切り替えるための機構です。
選択を切り替えることで、下流に供給されるクロックが変わります。
下図では、2つのMUXが存在し、左側は内蔵RCクロックからの48MHzのクロックを選択、右側はDIV(PLL0_PDIV)により分周された150MHzを選択しています。
ここでは実際にClocks Tool上でCPUに供給されるクロックを変更し、評価ボード上のLEDの点滅速度が変更するかを見ていきます。
ハードウェアの準備
本稿で使用する評価ボード
・FRDM-MCXN947
SDKのインストール
VS Code内の左側のパネルからMCUXpressoのアイコンを選択した状態で「Import Repository」をクリックしてください。
その後、左から2番目の「REMOTE ARCHIVE」をクリックし、Packageにて「FRDM-MCXN947」を検索してください。「947」と打ち込むとすぐにFRDM-MCXN947が候補として表示されます。
Name名、Location名、Create Gitへのチェックは任意に設定して下さい。
※NameおよびLocation名については、「小文字の英数字」「アンダースコア(_)またはハイフン(-)」のみを使用し、(\, /, :, *, ?, ", <, >, |、スペック)などの記号(プログラムの動作不良の原因になりうる)を避けるのが無難です。
最後に「I agree」にチェックを入れた後、「Import」をクリックするとSDKのインストールが開始しますので、しばらくお待ちください。画面右下に"Repository successfully imported"が表示されたら完了です。
サンプルコードのインポート
SDKのインストールが完了したら、サンプルコードのインポートへと進みます。
左側のパネルから「Import Example From Repository」をクリックしてください。
右側に表示された各タブ内で、「Repository」では先ほどインポートしたSDKを選択、
「Board」はFRDM-MCXN947を選択してください。
「Template」では、今回はLEDの点滅速度を変えるデモンストレーションですので、
「led」と打ち込んで表示される「driver_examples/gpio/gpio_led_output_cm33_core0」で試してみます。
その後、Toolchainを選択して「Import」をクリックしてください。
ConfigToolsを開く
インポートしたサンプル上で右クリックして、「Open with MCUXpresso Config Tools」を選択してください。少し待つとConfig Toolsが立ち上がります。
Config Toolsが開いたらまずは右側のパネルにあるOverviewを確認します。このサンプルにおいては、ClocksとPinsの2つが緑色(ONの状態)になっており、2つのツールが有効であることを示しています。
では、Clock Diagramを見てみましょう。
Clock SourceであるFIRC 48MHzからPLL(PLL0)、DIV(PLL0_PDIV)、MUX(SCSSEL)を経由して、MAIN Clock 150MHzが生成されています。
続いて、少し下にスクロールダウンしてCPUに供給されるクロックを見てみます。今回のサンプル・アプリケーションでは、「System_clock」がCPUコア・クロックに該当します。
MAIN Clock 150MHzは途中でDIVを経由しますが、System Clockに150MHzのまま供給されています。後ほど、この途中に存在するDIVの値を変更し、System Clockに入力されるクロックを変更することでLEDの点滅速度の変化を見ます。
CPU Clock 150MHzの状態のLEDの点滅速度を確認する
先ずは、何の変更もしていない150MHzの状態でLEDの点滅速度を見てみましょう。一旦Config Toolsを閉じて、VS Codeを開きます。
ビルドの前にボード(FRDM-MCXN947)とPCを接続します。
接続が完了したらインポートしたサンプルをデバッグ(ビルド&書き込み&アプリケーションの実行)します。
デバッグのプロセスが完了したら、プログラムがブレイクポイントで止まっているので、画面上部のアイコン内の"|▶"をクリックします。
動画のように赤色のLEDが点滅を開始します。これがクロック150MHz時(デフォルト設定)の点滅速度です。
CPU Clockを50MHzに変更してLEDの点滅速度を確認する
続いて、Clocks Toolを用いてCPUコア・クロックを150MHzから50MHzへと変更します。
再度Config ToolsのClocks Toolを開いてください。Clocks Diagramを少し下にスクロールダウンして、System ClockにつながるDIV(AHBCLKDIV)を変更します。変更の際には変更したいDIVの内の数字をクリックするとプルダウンで選択することができます。ここで1/3を選択するとSystem Clockが50MHzに変化します。
※クロック設定を変更する際には、Clock Sourceに近い上流のクロック設定を変更すると、下流に存在する複数のクロック設定に影響を及ぼす可能性があるので注意してください。
この状態でサンプルコードを書き換えます。まずはConfig Toolsの画面左上にあるUpdate Codeをクリックしてください。表示されるダイアログで「OK」を選択してください。
この状態でVS Codeに戻ると、画面上部にチェックボックスが3つ並んで表示されますので、チェックが入った状態でOKをクリックしてください。少し待つと、Clocks Toolでの変更がVS Code上のサンプルコードに適応されます。
成功すると画面右下に以下のメッセージが表示されます。
もう一度デバッグの実行し、完了したら"|▶"でサンプルアプリケーションを実行してください。
LEDが点滅を開始します。こちらがクロック 50MHz時の点滅速度です。150MHz時の速度と比べて明らかに遅くなりました。
以上でデモンストレーションは完了です。お疲れ様でした。
なお、これまでの手順ではDIVを使ってクロックの変更をしましたが、Clocks Toolにはあらかじめ複数のクロック設定がプリセットとして用意されています。Config ToolsにてClocks Toolを選択し、画面上部からFRO 12MHz / FRO HF 48MHz / FRO HF 144MHz…と任意のクロックを選ぶことができます。
たとえば「BOARD_BootClockPLL_100M」を選んでみると、Clock Source、PLL、DIV、それぞれが先ほどと異なることがわかります。例としてClock Sourceは24MHzの外部クロック(SOSC)となっています。
Clock Toolsを用いてクロック設定を自動更新(Update Code)した後、実際の初期化コードにどのように反映されるのかを見てみます。
インポートしたサンプルのProject FilesからCソースファイル(gpio_led_output.c)を確認します。
Cソースファイルの中身を見ていくと、Pin、Clock、Debug consolの初期化を実行するコードが存在します。
BOARD_InitHardware(); 上で右クリックし、Go to Definition をクリックするとさらに詳細を見ることができます。
Pin、Clock、Debug consolのそれぞれ初期化を実行するためのコードがあります。BOARD_InitBootClocks(); で右クリックし「Go to Definition(もしくは"fn + F12")」を選択し、さらに詳細を見てみます。
遷移先のファイル(clock_config.c)は、FRDM‑MCXN947 の起動時クロック構成を定義する生成コードです。
スクロールダウンしていくと先ほど説明した通り、複数のクロック構成(FRO 12MHz / FRO HF 48MHz / FRO HF 144MHz / PLL 150MHz / PLL 100MHz)がプリセットとして用意されていることがわかります。下記画像では規定値である PLL150Mとなっていますが、
例えばこの部分をBOARD_BootClockFROHF48Mに変更すると
プリセットとして準備されているFRO HF 48Mのクロック構成にて初期化が実行されます。
次にFRO HF 48Mのまま、Clocks Tool上で直接DIVの変更を行うとクロック構成およびコードがどのように変化するか見てみます。赤枠で囲んだテキスト&設定部分が変更されます。
更に、Clocks Tool上でSystem ClockへとつながるDIVを1/2、つまり48→24MHzへ変更し、Update Codeを行うと、DIVの変更により赤枠が変わったことがおわかりいただけると思います。
なお、Clocks Tool側でも変更前後の差分を確認することができます。
クロック設定を変更後、Update Codeをクリックした際に以下のようなダイアログが表示されます。差分が生じたファイルにはファイル名の右側に change と表示されます。これをクリックすると差分を見ることができます。
clock_config.c の差分を確認します。左側(Newly generated)が変更後のファイル、右側(On disk)が変更前のファイルです。System Clockに差分が生じているのが確認できると思います。
差分が生じた箇所は色が変更しているので視覚的にわかりやすいです。
マイコン、プロセッサには、機能集約が進んでいるため、内部のクロックツリーも非常に複雑化しています。このようなクロック可視化ツールがないと、現実的に設計・評価は難しいと思いますので、是非ご活用ください。
=========================
本投稿の「Comment」欄にコメントをいただいても、現在返信に対応しておりません。
お手数をおかけしますが、お問い合わせの際には「NXPへの技術質問 - 問い合わせ方法 (日本語ブログ)」をご参照ください。
(既に弊社NXP代理店、もしくはNXPとお付き合いのある方は、直接担当者へご質問いただいてもかまいません。)
MCUXpresso Config Toolsの中から「Clocks Tool」にフォーカスし、クロック設定の基本および設定方法を解説します。VS Code環境での導入方法から、CPUクロック変更によるLED点滅デモまで紹介します。
(作業時間:10分 *MCUXpresso for VSC (Visual Studio Code), SDKをインストールしている前提)