6. 3色LEDの制御#
Hello Worldのプロジェクトに、LEDを制御するHWの設定と、SWの設定を追加していきます。 ここでは、MCUXpresso IDEに組込まれているConfig Toolsを起動して、設定を行います。
6.1. FRDM-MCXN947評価ボードの確認#
D2に搭載されているRGB LEDをGPIOを用いて制御します。

回路図上のRGB LEDとMCX Nのピンの接続は以下のようになっている。 P_xxは、ピン名

6.2. Config Toolsの起動#
MCUXpresso IDEの右側のエクスプローラウィンドウから、”Open MCUXpresso Configuratin"ボタンの▽から"Open Pins"クリックして、Config Toolsを起動します。

ワーニングメッセージが表示されたばあいは、OKをクリックしてそのまま進めてください。

6.3. GPIOのPin設定#
LEDとICの端子は以下のように接続されています。
LED |
Pin No |
Pin Name |
Red |
B12 |
P0_10 |
Green |
E10 |
P0_27 |
Blue |
C4 |
P1_2 |
赤色のLED制御設定

緑色のLED制御設定

青色のLED制御設定

追加したGPIOの初期設定
Identifer: 信号を区別するために入力します。自動的にLabelの項目もアップデートされます。
Direction: Outputに設定します。
GPIO output initial state: Logical 1に設定します。(初期状態で、LEDは消灯)

設定を反映させる為に、"Update Code"をクリックします。

アップデートされるコードと、新規作成されるコードが確認できます。OKをクリックして、ウィンドウを閉じます。 Changeをクリックすると差分を確認することが可能です。
6.4. GPIOのAPIを用いてLEDを制御#
GPIOのドライバをメインソースに、インクルードします。
1 #include "fsl_device_registers.h"
2 #include "fsl_debug_console.h"
3 #include "pin_mux.h"
4 #include "clock_config.h"
5 #include "board.h"
6
7 #include "fsl_clock.h"
8
9 #include "fsl_gpio.h" // <- このコードを追加
次に、LEDをON/OFFの為に、ピンのWriteを行うコーどを追加します。 コンソールに'r'と入力した場合は、赤色LEDが点灯し、'g'は緑、'b'は青が点灯するようにします。
赤色LEDの制御を行うコードを追加します。 ピンがHighの場合は、LEDが消灯し、Lowの場合は、LEDが点灯します。
1 while (1)
2 {
3 ch = GETCHAR();
4 PUTCHAR(ch);
5
6 if('r' == ch)
7 {
8 GPIO_PinWrite(BOARD_INITPINS_LED_RED_GPIO, BOARD_INITPINS_LED_RED_GPIO_PIN, 0);
9 GPIO_PinWrite(BOARD_INITPINS_LED_GREEN_GPIO, BOARD_INITPINS_LED_GREEN_GPIO_PIN, 1);
10 GPIO_PinWrite(BOARD_INITPINS_LED_BLUE_GPIO, BOARD_INITPINS_LED_BLUE_GPIO_PIN, 1);
11 }
12 }
GPIOのWrite APIとして、GPIO_PinWrite()がfsl_gpio.hに用意されています。
1 /*! @name GPIO Output Operations */
2 /*@{*/
3
4 /*!
5 * @brief Sets the output level of the multiple GPIO pins to the logic 1 or 0.
6 *
7 * @param base GPIO peripheral base pointer (GPIOA, GPIOB, GPIOC, and so on.)
8 * @param pin GPIO pin number
9 * @param output GPIO pin output logic level.
10 * - 0: corresponding pin output low-logic level.
11 * - 1: corresponding pin output high-logic level.
12 */
13 static inline void GPIO_PinWrite(GPIO_Type *base, uint32_t pin, uint8_t output)
pin_mux.hで、GPIOの定義が行われています。
1 /*! @name PORT0_10 (coord B12), LED_RED
2 @{ */
3
4 /* Symbols to be used with GPIO driver */
5 #define BOARD_INITPINS_LED_RED_GPIO GPIO0 /*!<@brief GPIO peripheral base pointer */
6 #define BOARD_INITPINS_LED_RED_GPIO_PIN 10U /*!<@brief GPIO pin number */
7
8 /*! @name PORT0_27 (coord E10), LED_GREEN
9 @{ */
10
11 /* Symbols to be used with GPIO driver */
12 #define BOARD_INITPINS_LED_GREEN_GPIO GPIO0 /*!<@brief GPIO peripheral base pointer */
13 #define BOARD_INITPINS_LED_GREEN_GPIO_PIN 27U /*!<@brief GPIO pin number */
14
15 /*! @name PORT1_2 (coord C4), LED_BLUE
16 @{ */
17
18 /* Symbols to be used with GPIO driver */
19 #define BOARD_INITPINS_LED_BLUE_GPIO GPIO1 /*!<@brief GPIO peripheral base pointer */
20 #define BOARD_INITPINS_LED_BLUE_GPIO_PIN 2U /*!<@brief GPIO pin number */
最後に、緑と青のLEDの制御を追加します。
1 while (1)
2 {
3 ch = GETCHAR();
4 PUTCHAR(ch);
5
6 if('r' == ch)
7 {
8 GPIO_PinWrite(BOARD_INITPINS_LED_RED_GPIO, BOARD_INITPINS_LED_RED_GPIO_PIN, 0);
9 GPIO_PinWrite(BOARD_INITPINS_LED_GREEN_GPIO, BOARD_INITPINS_LED_GREEN_GPIO_PIN, 1);
10 GPIO_PinWrite(BOARD_INITPINS_LED_BLUE_GPIO, BOARD_INITPINS_LED_BLUE_GPIO_PIN, 1);
11 }
12 else if('g' == ch)
13 {
14 GPIO_PinWrite(BOARD_INITPINS_LED_RED_GPIO, BOARD_INITPINS_LED_RED_GPIO_PIN, 1);
15 GPIO_PinWrite(BOARD_INITPINS_LED_GREEN_GPIO, BOARD_INITPINS_LED_GREEN_GPIO_PIN, 0);
16 GPIO_PinWrite(BOARD_INITPINS_LED_BLUE_GPIO, BOARD_INITPINS_LED_BLUE_GPIO_PIN, 1);
17 }
18 else if('b' == ch)
19 {
20 GPIO_PinWrite(BOARD_INITPINS_LED_RED_GPIO, BOARD_INITPINS_LED_RED_GPIO_PIN, 1);
21 GPIO_PinWrite(BOARD_INITPINS_LED_GREEN_GPIO, BOARD_INITPINS_LED_GREEN_GPIO_PIN, 1);
22 GPIO_PinWrite(BOARD_INITPINS_LED_BLUE_GPIO, BOARD_INITPINS_LED_BLUE_GPIO_PIN, 0);
23 }
24 }
6.5. プログラムのビルドと書き込み#
Hello worldのの時と同じように、Buildを行います。

Debugを行いプログラムを書き込みます。

標準出力を確認するために、「Terminal」を選択後、「new terminal」をクリックしてターミナルを開きます。

プルダウンメニュから「Serial Terminal」を選び、ボーレートを115200、8-bit、パリティなし、1ストップビットに設定します。

ウインドウ上部の「run」アイコンをクリックし、プログラムを実行すると、ターミナルに「Hello World」が表示されます。

6.6. プログラムの動作確認#
Terminalに、r g bと打ち込み、LEDが点灯することを確認します。
