[NXP マイコン初心者ガイド 7]へ | |||
NXP マイコン初心者ガイド まとめサイト |
目次
- はじめに
- 1. hello_world プロジェクトの確認
- 2. Pins Tool を使用して hello_world プロジェクトに GPIO pin を追加
- 3. hello_world プロジェクトの main() 関数に LED 点滅コードを追加
- 4. Clocks Tool で Clock 周期を変更して LED 点滅速度の変化を確認
- まとめ
はじめに
このコンテンツでは MCUXpresso IDE に付属されている MCUXpresso Config Tools についての紹介と実際の操作方法を紹介しています。
この記事では『[NXP マイコン初心者ガイド 7] MCUXpresso IDE Config Tools 紹介編(Pins と Clocks)』 でご紹介した内容を元に、実際に Pins Tool と Clocks Tool を使用してみます。
NXP i.MXRT1050 Evaluation Kit 向けの evkbimxrt1050_hello_world サンプル・プロジェクト(以降、hello_world プロジェクト)に LED を点滅させるプログラムを追加します。
Pins Tool により GPIO(USER_LED)を追加して、Clocks Tool により Clock を変更して、LED を点滅させる速度を変更してみます。
なお MCUXpresso IDE Config Tools の詳しい内容については、下記 User Guide をご覧ください。
参考: User Guide for MCUXpresso Config Tools (Desktop)
また、NXP i.MXRT1050 Evaluation Kit の詳しい内容については、下記ページをご覧ください。
参考: NXP i.MXRT1050 Evaluation Kit
1. hello_world プロジェクトの確認
まずはじめに hello_world プロジェクトについて確認してみます。
hello_world.c ソースコード・ファイルを見てみると、その main() 関数は下図のように単に printf により "hello world" を表示しているものです。
【図 1】 hello_world.c ソースコード・ファイル
次に [Manage SDK Components] ボタンをクリックして、hello_world プロジェクトに含まれている Driver を確認してみます。gpio と Clock の driver が含まれていれば、Pins Tool による GPIO pin の追加と、Clocks Tool による Clock の変更が確認しやすいのですがどうでしょうか?確認してみると下図の通り最初から含まれていました。
【図 2】 hello_world プロジェクトに含まれている Driver の確認
なお、サンプル・プロジェクトのインポートやデバッグ方法については以下の記事をご参照ください。
参考: [NXP マイコン初心者ガイド 4] i.MXRT1050 でサンプルプロジェクトをカスタマイズする(ソースコードの編集)
2. Pins Tool を使用して hello_world プロジェクトに GPIO pin を追加
evkbimxrt1050_iled_blinky サンプル・プロジェクト(以降、led_blinky プロジェクト)を参考にして、hello_world プロジェクトに GPIO pin を追加して USER_LED を点滅させます。
2-1. 参考とする led_blinky プロジェクトの確認
led_blinky プロジェクトを確認して、USER_LED を点滅させている仕組みを調べてみます。
led_blinky.c ソースコード・ファイルを見てみると、その main() 関数は下図のように SysTick による
1 秒周期ごとに GPIO_PinWrite() 関数により GPIO pin を操作して USER_LED を点滅させています。hello_world プロジェクト内で USER_LED を点滅させる場合、この仕組みがそのまま使用できそうです。
【図 3】 led_blinky.c ソースコード・ファイル
Project Explorer の [Open Pins] をクリックすることで、Pin の設定を GUI で行うことができます。
led_blinky プロジェクトにおいて、USER_LED として割り当てられている Pin を確認してみると、下図のように GPIO の pin F14 (GPIO_AD_B0_09) に割り当てられています。hello_world プロジェクト内で USER_LED を点滅させる場合、この GPIO pin 設定がそのまま参考になりそうです。
【図 4】 led_blinky プロジェクトの GPIO pin 設定を確認
2-2. hello_world プロジェクトの GPIO pin を有効化し USER_LED として使用するための設定
hello_world プロジェクトにおいて、Project Explorer の[Open Pins]をクリックして Pin の設定を確認してみると、GPIO の pin F14(GPIO_AD_B0_09)は使用されていません。
ではここで、下図のように GPIO1_09 のチェックボックスにチェックを入れて [Done] ボタンをクリックすることで、GPIO pin F14(GPIO_AD_B0_09)を有効化します。
【図 5】 GPIO pin F14(GPIO_AD_B0_09)を有効化
次に、GPIO pin F14(GPIO_AD_B0_09)に対する設定を行います。
① [Label] と [Identifire] にはピンのラベルと識別子を設定します。
この例では USER_LED の記述を追加します。
【図 6】 [Label] と [Identifire] の追加
② [Direction] にはピンの方向を設定します。この例では Output を指定します。
【図 7】 [Direction] の指定
③ [Pull Up/Down Config] にはピンのプルアップ/プルダウン抵抗を設定します。
この例では100K Ohm Pull Down を指定します。
【図 8】 [Pull Up/Down Config] の指定
④ [Pull/Keeper select] では 内部 PullUp バイアス、内部 Keeper 回路 の選択をおこないます。
この例では Keeper を指定します。
【図 9】 [Pull/Keeper select] の指定
⑤ [Drive strength] には出力のドライブ能力を設定します。この例では R0/6 を指定します。
【図 10】 [Drive strength] の指定
2-3. 追加した GPIO pin を反映したソースコードの生成
Pin の編集が完了したら、[Update Code] ボタンをクリックして変更内容を反映したソースコードを生成します。
【図 11】 変更した Pin 情報を反映したソースコードを生成
hello_world プロジェクトのソースコードに USER_LED_GPIO が追加されていることを確認します。board.h ヘッダーファイルを確認してみると、もともとは存在しなかった USER_LED(GPIO)に関するコードが追加されています。
【図 12】 board.h ヘッダーファイル
また、pin_mux.h ヘッダーファイル、pin_mux.c ソースコード・ファイルについても、もともとは存在しなかった USER_LED(GPIO)に関するコードが追加されていることがわかります。
【図 13】 pin_mux.h ヘッダーファイル
【図 14】 pin_mux.c ソースコード・ファイル
3. hello_world プロジェクトの main() 関数に LED 点滅コードを追加
3-1. LED 点滅コードの追加とプロジェクトの Build
hello_world.c ソースコード・ファイルのオリジナルは【図 1】に示した通り printf により "hello world" を表示しているだけのものです。
このコードに led_blinky プロジェクトを参考にして、GPIO_PinWrite() 関数により GPIO pin を操作して、USER_LED を周期的に点滅させるコードを追加します。また、"Hello World" も周期的に表示を繰り返すように変更してみます。変更後の hello_world.c を下図に示します。
【図 15】 変更後の hello_world.c ソースコード・ファイル
変更後の hello_world.c をセーブしてからプロジェクトを Build します。
MCUXpresso IDE の Quickstart Panel から [Build] アイコンをクリックし Build が完了すると、Debug フォルダー下に evkbimxrt1050_hello_world.axf 実行ファイルが生成されます。
【図 16】 hello_world プロジェクトを Build
3-2. Evaluation Kit 上で変更後の hello_world プロジェクトを Debug
ホスト PC と NXP i.MXRT1050 Evaluation Kit を、キット付属の USB ケーブルで接続します。
MCUXpresso IDE の Quickstart Panel から [Debug] アイコンをクリックして実行させます。
【図 17】 NXP i.MXRT1050 Evaluation Kit の接続と Debug の実行
Debug を実行することにより、"hello world" の表示と USER_LED の点滅が周期的に実行されます。
【図 18】 hello_world プロジェクトの Debug 実行
【動画 1】 "hello world" 表示と USER_LED の点滅
4. Clocks Tool で Clock 周期を変更して LED 点滅速度の変化を確認
Clocks Tool を使用して hello_world プロジェクトの clock 周期を変更してみます。これにより Clock に関するソースコードが変更され、"hello world" の表示と USER_LED の点滅速度が変わることを確認してみます。
4-1. Clock 周期を変更する前の hello_world プロジェクトの内容を確認
まず Clock 周期を変更する前の clock_config.h ヘッダーファイルの内容を確認してみます。
下図のように、BOARD_BOOTCLOCKRUN_CORE_CLOCK と BOARD_BOOTCLOCKRUN_AHB_CLK_ROOT が 600000000U(600MHz)と定義されていることがわかります。
【図 19】 Clock 周期を変更する前の clock_config.h ヘッダーファイルの内容
Clocks Tool を使用して hello_world プロジェクトのオリジナル Clock 設定を確認してみます。
[Clocks] アイコンをクリックして、[Clocks Diagram] タブを選択すると、Clock の構成がブロック・ダイアグラムとして表示されます。
【図 20】 [Clocks Diagram] タブを選択し Clock の構成をブロック・ダイアグラムで表示
また、[Clocks Table] タブを選択すると、Clock の構成がテーブルとして表示されます。
【図 21】 [Clocks Table] タブを選択し Clock の構成をテーブルで表示
4-2. Clock 周期を変更して動作確認
hello_world プロジェクトの Clock 周期を変更してみます。
オリジナルの状態では、下図のように AHB_CLK_ROOT が System のクロックとなっていて 600MHz で動作しています。
【図 22】 オリジナル状態での AHB_CLK_ROOT(600MHz)
この状態から、AHB_divider の設定を /1 から /4 に変更することで、AHB_CLK_ROOT を 150MHz に変更します。デフォルトの状態では、AHB_divider の部分が鍵マークが付いていて Rock されています。
- AHB_divider を右クリックすることにより Unlock を選択します。
- Unlock 状態になると、AHB_divider を左クリックすることで divider 値を選択することができます。
【図 23】 AHB_divider の Unlock と divider 値の変更
変更したことにより、AHB_CLK_ROOT が 150MHz になっていることがわかります。変更が完了したら、[Update Code] ボタンをクリックしてソースコードを生成します。[Update Files] ウインドウが表示されたら [OK] ボタンをクリックします。
【図 24】 [Update Code] ボタンをクリックして Clock 変更後のソースコードを生成
Clock 変更後の clock_config.h ヘッダーファイルを確認してみると、下図のようにBOARD_BOOTCLOCKRUN_CORE_CLOCK と BOARD_BOOTCLOCKRUN_AHB_CLK_ROOT が 150000000U(150MHz)と定義されていることがわかります。
【図 25】 Clock 周期を変更した後の clock_config.h ヘッダーファイルの内容
その後、MCUXpresso IDE の Quickstart Panel から [Build] してから [Debug] を実行して、"hello world" 表示と USER_LED 点滅の速度が、Clock 変更前(【動画 1】)の 4 倍の周期になったことを確認します。
【動画 2】 Clock 周期変更後の "hello world" 表示と USER_LED の点滅
まとめ
この記事では MCUXpresso Config Tools の中の Pins Tool により GPIO(USER_LED)を追加し、Clocks Tool により Clock を変更することで USER_LED の点滅周期が変わることを確認しました。
実際に MCUXpresso Config Tools をご使用いただく際の参考にしていただければ幸いです。
[NXP マイコン初心者ガイド 7]へ | |||
NXP マイコン初心者ガイド まとめサイト |