MCUXpressoでFRDM-MCXA153を使う
いつぞやのCQ出版のセミナーでもらった、NXP製のFRDM-MCXA153に久しぶりに触った。IDEとしては、基本であるMCUXpresso IDEを使う。備忘録レベルの内容。
手順(参考記事)
本家サイトにある記事「MCUXpresso IDEとSDKのインストール (日本語ブログ)」に従って進める。まずは、ダウンロード(NXPアカウント必要)。
以降、本IDEの使い方などの解説。文字が小さいキャプチャが多数あるが、ご容赦願いたい。
サンプル
MCUXpresso IDE起動。
IDE(赤枠)をクリック。
温度センサー
FRDM-MCXA153にはI3Cでハンドリングできる温度センサーがある。これを例とする。トップ画面かIDE画面で「Import from Application Code Hub」をクリック(上図赤枠)。
I3Cで検索。
「GitHub Link」をクリックすると、Nextできる。
適宜、続ける。
格納場所を指定。
「Eclipse projects」選択。
FRDM-MCXA153を選択。
Warningが出るが、そのまま進むと、下記となる。
ソースコードの一部を抜粋。
/*
* Copyright 2024 NXP
*
* SPDX-License-Identifier: BSD-3-Clause
*/
<略>
int main( void )
{
init_pin_control();
i3c.set_IBI_callback( ibi_trigger_output );
PRINTF("P3T1755 (Temperature sensor) I3C operation sample: getting temperature data and IBI\r\n");
DAA_set_dynamic_ddress_from_static_ddress( P3T1755_ADDR_I2C, P3T1755_ADDR_I3C );
p3t1755.address_overwrite( P3T1755_ADDR_I3C );
float ref_temp = p3t1755;
float low = ref_temp + 1.0;
float high = ref_temp + 2.0;
p3t1755.thresholds( low, high );
PRINTF( " T_LOW / T_HIGH registers updated: %8.4f˚C / %8.4f˚C\r\n", low, high );
PRINTF( " based on current temperature: %8.4f˚C\r\n", ref_temp );
p3t1755.bit_op8( P3T1755::Conf, ~0x02, 0x02 ); // ALART pin configured to INT mode
p3t1755.ccc_set( CCC::DIRECT_ENEC, 0x01 ); // Enable IBI
info( p3t1755 );
float temp;
uint8_t ibi_addr;
uint32_t count = 0;
while ( true )
{
if ( (ibi_addr = i3c.check_IBI()) )
PRINTF("*** IBI : Got IBI from target_address: 7’h%02X (0x%02X)\r\n", ibi_addr, ibi_addr << 1 );
temp = p3t1755;
PRINTF( "Read at %4lu sec: Temperature: %8.4f˚C\r\n", count++, temp );
led_set_color( temp, ref_temp );
wait( WAIT_SEC );
}
}
<略>
Build(下記赤枠)。
そのまま続ける。
実行(下記赤枠)。
実行中のConsoleの様子は下記となる。
OK。
SDK:GPIO
本IDEから辿れるSDKサンプルにGPIO制御が見つかる。ボタン押下を検知し、メッセージを表示するもの。
本ボード(FRDM-MCXA153)を選択。
「gpio_input_interrupt」を選ぶ。
ここでも、ソースコードの一部抜粋。
/*
* Copyright (c) 2015, Freescale Semiconductor, Inc.
* Copyright 2016-2018, 2023 NXP
* All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
<略>
int main(void)
{
/* Define the init structure for the input switch pin */
gpio_pin_config_t sw_config = {
kGPIO_DigitalInput,
0,
};
/* Define the init structure for the output LED pin */
gpio_pin_config_t led_config = {
kGPIO_DigitalOutput,
0,
};
BOARD_InitHardware();
PRINTF("MCUX SDK version: %s\r\n", MCUXSDK_VERSION_FULL_STR);
/* Print a note to terminal. */
PRINTF("\r\n GPIO Driver example\r\n");
PRINTF("\r\n Press %s to turn on/off a LED \r\n", BOARD_SW_NAME);
/* Init input switch GPIO. */
#if (defined(FSL_FEATURE_PORT_HAS_NO_INTERRUPT) && FSL_FEATURE_PORT_HAS_NO_INTERRUPT) || \
(!defined(FSL_FEATURE_SOC_PORT_COUNT))
GPIO_SetPinInterruptConfig(BOARD_SW_GPIO, BOARD_SW_GPIO_PIN, kGPIO_InterruptFallingEdge);
#else
PORT_SetPinInterruptConfig(BOARD_SW_PORT, BOARD_SW_GPIO_PIN, kPORT_InterruptFallingEdge);
#endif
EnableIRQ(BOARD_SW_IRQ);
GPIO_PinInit(BOARD_SW_GPIO, BOARD_SW_GPIO_PIN, &sw_config);
/* Init output LED GPIO. */
GPIO_PinInit(BOARD_LED_GPIO, BOARD_LED_GPIO_PIN, &led_config);
while (1)
{
if (g_ButtonPress)
{
PRINTF(" %s is pressed \r\n", BOARD_SW_NAME);
/* Toggle LED. */
GPIO_PortToggle(BOARD_LED_GPIO, 1U << BOARD_LED_GPIO_PIN);
/* Reset state of button. */
g_ButtonPress = false;
}
}
}
<略>
「Start Debugging」(赤枠)をクリックするとBuild実行。
「Resume」(赤枠)で実行。
が、ボタンを押しても、Consoleに何も表示されない(下記)。
調べると、Terminalタブでシリアル設定が必要とのこと。下記赤枠クリック。
設定画面が表示される。
適切なシリアルポートおよび115200bpsを選択。
すると、TerminalにPRINTF()の内容が表示される(ボタン押下の状況など)。
終わりに
シリアルを使って表示ができれば、他のマイコンボードと同じように扱える。適宜、トライしていく。

























