rt-thread官方版本已经支持了NXP的frdm-mcxa153、frdm-mcxn947、frdm-mcxn236这3个开发板。暂时没有MCXA156 BSP,那就自己做一个BSP吧。
比较一下FRDM-MCXA153和FRDM-MCXA156的资料,会发现两者很像。
FRDM-MCXA153
MCXA15x Arm® Cortex®-M33内核,高达128KB的闪存,高达32kB的RAM,带有8kB ECC LPLUART、LPSPI、LPI2C、FS USB、DMA和LDO
FRDM-MCXA156
MCXA156 Arm® Cortex®-M33 core Up to 1 MB flash with up to 128 KB RAM with 8 KB ECC, CAN-FD, FlexIO, FS USB, I3C, LPLUART, LPSPI, LPI2C, DMA and LDO
只是MCXA156比 MCXA153的ROM、RAM大一些,应该改一下就可以用。
1、从\rt-thread\bsp\nxp\mcx\mcxa\frdm-mcxa153拷贝一份到156

2、scf和ld
拷贝一份MCXA156_flash.scf(分散加载链接文件)到frdm-mcxa156\board\linker_scripts
MCXA156_flash.scf可以从156的例程keil工程中找到,156的RAM和ROM比153大,所以下面蓝框部分与153的scf不同。

同目录下还有一个MCXA153_flash.ld,可以改成MCXA156_flash.ld,用于gcc link,我没有用gcc,应该做如下修改吧。

3、frdm-mcxa156\board\MCUX_Config\board下文件
从MCXA156 keil模板工程中拷贝4个文件到frdm-mcxa156\board\MCUX_Config\board,其实原来153有这4个文件,直接用也应该可以。

注意BOARD_InitPins(pin_mux.c)函数应该添加以下代码:
void BOARD_InitPins(void)
{
/* PORT0: Peripheral clock is enabled */
CLOCK_EnableClock(kCLOCK_GatePORT0);
CLOCK_EnableClock(kCLOCK_GatePORT0);
CLOCK_EnableClock(kCLOCK_GatePORT1);
CLOCK_EnableClock(kCLOCK_GatePORT2);
CLOCK_EnableClock(kCLOCK_GatePORT3);
CLOCK_EnableClock(kCLOCK_GateGPIO0);
CLOCK_EnableClock(kCLOCK_GateGPIO1);
CLOCK_EnableClock(kCLOCK_GateGPIO2);
CLOCK_EnableClock(kCLOCK_GateGPIO3);
RESET_ReleasePeripheralReset(kLPUART0_RST_SHIFT_RSTn);
RESET_ReleasePeripheralReset(kLPUART1_RST_SHIFT_RSTn);
RESET_ReleasePeripheralReset(kLPUART2_RST_SHIFT_RSTn);
RESET_ReleasePeripheralReset(kPORT0_RST_SHIFT_RSTn);
RESET_ReleasePeripheralReset(kPORT1_RST_SHIFT_RSTn);
RESET_ReleasePeripheralReset(kPORT2_RST_SHIFT_RSTn);
RESET_ReleasePeripheralReset(kPORT3_RST_SHIFT_RSTn);
RESET_ReleasePeripheralReset(kGPIO0_RST_SHIFT_RSTn);
RESET_ReleasePeripheralReset(kGPIO1_RST_SHIFT_RSTn);
RESET_ReleasePeripheralReset(kGPIO2_RST_SHIFT_RSTn);
RESET_ReleasePeripheralReset(kGPIO3_RST_SHIFT_RSTn);4、\frdm-mcxa156\board\Kconfig文件修改
这部分是给menuconfig用的
menu "Hardware Drivers Config" config FRDM_MCXA156 bool select FRDM_MCXA156_SERIES select RT_USING_COMPONENTS_INIT select RT_USING_USER_MAIN default y menu "On-chip Peripheral Drivers" config BSP_USING_DMA bool "Enable DMA" select RT_USING_DMA default n config BSP_USING_PIN bool "Enable GPIO" select RT_USING_PIN default y menuconfig BSP_USING_UART bool "Enable UART" select RT_USING_UART default y select RT_USING_SERIAL if BSP_USING_UART config BSP_USING_UART0 bool "Enable LPUART(UART0) as UART" default y endif
5、rt-thread\bsp\nxp\mcx\mcxa\Libraries
copy 一份MCXA153到MCXA156,将153都改成156
将156的SDK(FRDM-MCXA156\SDK_2_16_100_FRDM-MCXA156\devices\MCXA156\drivers)拷贝到bsp\nxp\mcx\mcxa\Libraries\MCXA156\MCXA156\drivers覆盖原来内容。
从156 SDK拷贝 startup_MCXA156.S 到bsp\nxp\mcx\mcxa\Libraries\MCXA156\MCXA156\arm
拷贝以下文件到bsp\nxp\mcx\mcxa\Libraries\MCXA156\MCXA156

6、修改keil模板文件template.uvprojx
回到bsp\nxp\mcx\mcxa\frdm-mcxa156
双击template.uvprojx进入keil



然后保存,keil模板就做好了。
7、menuconfig
GPIO和UART已经缺省选择了。

8、生成keil工程

9、修改main.c
int main(void)
{
#if defined(__CC_ARM)
rt_kprintf("using armcc, version: %d\n", __ARMCC_VERSION);
#elif defined(__clang__)
rt_kprintf("using armclang, version: %d\n", __ARMCC_VERSION);
#elif defined(__ICCARM__)
rt_kprintf("using iccarm, version: %d\n", __VER__);
#elif defined(__GNUC__)
rt_kprintf("using gcc, version: %d.%d\n", __GNUC__, __GNUC_MINOR__);
#endif
rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT); /* Set GPIO as Output */
rt_kprintf("FRDM-MCXA156 评测二 rt-thread配置\r\n");
while (1)
{
rt_pin_write(LED_PIN, PIN_HIGH); /* Set GPIO output 1 */
rt_kprintf("LED_PIN is high\r\n");
rt_thread_mdelay(500); /* Delay 500mS */
rt_pin_write(LED_PIN, PIN_LOW); /* Set GPIO output 0 */
rt_kprintf("LED_PIN is low\r\n");
rt_thread_mdelay(500); /* Delay 500mS */
}
}10、运行效果

我要赚赏金
