yinwuqing 发表于 2024-11-11 23:45:38

【Avnet | NXP FRDM-MCXN947试用活动】开箱着手点灯

本帖最后由 yinwuqing 于 2024-11-12 00:16 编辑

一、前言   

FRDM-MCXN947试用活动由安富利与eefocus联合举办,非常荣幸能够获得此次试用机会。其实早在今年三月份,在NXP技术交流社区,申请到MCX-N947-BRK板,当时没注意就将这两块板搞混,后面在实际评测中才发觉硬件电路上是有明显差异的。我们知道MCXN947采用双核架构,集成两个Cortex-M33内核和神经处理单元,工作主频150MHz,搭配2048KB Flash/512KB RAM,是一款高度集成的微控制器,板卡上采用BGA封装,占用PCB面积小,为高性能要求、低成本设计的项目提供了可能。

二、获取资料

关于FRDM-MCXN947开发板的资料包,用户可通过MCUXpresso SDK构建工具构建FRDM-MCXN947,当然用户必须先得在NXP官网上注册一个账号,然后进入到该网页,选择使用该SDK应用在的主机操作系统,一般是windows系统,选择导出适用的工具链即IDE平台。这里建议选择“所有工具链”,接着勾选集成相对应功能接口的工程参考示例,最后选择底下的“构建SDK”,然后下载即可。

    这里笔者还是采用先前构建的“SDK_2.14.0_FRDM-MCXN947”版本,当前NXP官方已经提供了“SDK_2.16.100_FRDM-MCXN947”版本,两个版本大体上相同,只是对部分功能接口进行了优化。

三、开箱上电

   板卡拿到手已有一段时间了,跟其它坛友一样,来晒晒这块高性能的开发板吧。

    上面为纸盒中的全部物料,接下来拆开防静电袋,对核心板来个特写。


使用Type-C数据线给板卡上电,板卡出厂默认的点灯状态变化如下:


四、环境搭建

    官方主推采用MCUXpressoIDE进行SDK导入,使用该IDE导入不需要将构建好的SDK包解压。直接拖入IDE底下的表格中。不过笔者习惯与MDK工具,因此这里介绍一下使用Keil开发FRDM-MCXN947。既然使用Keil开发,首先我们得安装好基于MCXN947的pack支持包,“NXP.MCXN947_DFP.19.0.0.pack”文件分享如下附件:

   将构建好的“SDK_2_14_0_FRDM-MCXN947.zip”文件解压到无中文字符、无空格的文件夹路径下,然后进入到“\boards\frdmmcxn947\demo_apps\led_blinky”目录,使用Keil uVision5打开led_blinky工程,此时工程全编译ok,要想实现点亮RGB的其它颜色,需要修改系统默认的工程源码。

五、代码编写

      编写之前,需要了解一下这款开发板的整体硬件布局,开发板的资源框图,官方已在原理图中给出。


   主要是注意RGB灯的管脚,因为官方闪灯只用到RGB的红色管脚,在原理图中的第11页,我们可得知RGB灯信号引脚分布。

    由上图可知,RGB的三颗灯都是低电平有效,因此在代码中增加逻辑处理代码如下:
pin_mux.c增加绿灯、蓝灯的初始化设置。pin_mux.c
#include "fsl_common.h"
#include "fsl_port.h"
#include "pin_mux.h"

void BOARD_InitBootPins(void)
{
    BOARD_InitPins();
}

void BOARD_InitPins(void)
{
    /* Enables the clock for PORT0 controller: Enables clock */
    CLOCK_EnableClock(kCLOCK_Port0);
    /* Enables the clock for PORT1 controller: Enables clock */
    CLOCK_EnableClock(kCLOCK_Port1);

    const port_pin_config_t port0_10_pinB12_config = {/* Internal pull-up/down resistor is disabled */
                                                      kPORT_PullDisable,
                                                      /* Low internal pull resistor value is selected. */
                                                      kPORT_LowPullResistor,
                                                      /* Fast slew rate is configured */
                                                      kPORT_FastSlewRate,
                                                      /* Passive input filter is disabled */
                                                      kPORT_PassiveFilterDisable,
                                                      /* Open drain output is disabled */
                                                      kPORT_OpenDrainDisable,
                                                      /* Low drive strength is configured */
                                                      kPORT_LowDriveStrength,
                                                      /* Pin is configured as PIO0_10 */
                                                      kPORT_MuxAlt0,
                                                      /* Digital input enabled */
                                                      kPORT_InputBufferEnable,
                                                      /* Digital input is not inverted */
                                                      kPORT_InputNormal,
                                                      /* Pin Control Register fields are not locked */
                                                      kPORT_UnlockRegister};
    /* PORT0_10 (pin B12) is configured as PIO0_10 */
    PORT_SetPinConfig(PORT0, 10U, &port0_10_pinB12_config);                                                                                    
    const port_pin_config_t port0_27_pinE10_config = {/* Internal pull-up/down resistor is disabled */
                                                      kPORT_PullDisable,
                                                      /* Low internal pull resistor value is selected. */
                                                      kPORT_LowPullResistor,
                                                      /* Fast slew rate is configured */
                                                      kPORT_FastSlewRate,
                                                      /* Passive input filter is disabled */
                                                      kPORT_PassiveFilterDisable,
                                                      /* Open drain output is disabled */
                                                      kPORT_OpenDrainDisable,
                                                      /* Low drive strength is configured */
                                                      kPORT_LowDriveStrength,
                                                      /* Pin is configured as PIO0_27 */
                                                      kPORT_MuxAlt0,
                                                      /* Digital input enabled */
                                                      kPORT_InputBufferEnable,
                                                      /* Digital input is not inverted */
                                                      kPORT_InputNormal,
                                                      /* Pin Control Register fields are not locked */
                                                      kPORT_UnlockRegister};
    /* PORT0_27 (pin E10) is configured as PIO0_27 */
    PORT_SetPinConfig(PORT0, 27U, &port0_27_pinE10_config);

    const port_pin_config_t port1_2_pinC04_config = {/* Internal pull-up/down resistor is disabled */
                                                      kPORT_PullDisable,
                                                      /* Low internal pull resistor value is selected. */
                                                      kPORT_LowPullResistor,
                                                      /* Fast slew rate is configured */
                                                      kPORT_FastSlewRate,
                                                      /* Passive input filter is disabled */
                                                      kPORT_PassiveFilterDisable,
                                                      /* Open drain output is disabled */
                                                      kPORT_OpenDrainDisable,
                                                      /* Low drive strength is configured */
                                                      kPORT_LowDriveStrength,
                                                      /* Pin is configured as PIO1_2 */
                                                      kPORT_MuxAlt0,
                                                      /* Digital input enabled */
                                                      kPORT_InputBufferEnable,
                                                      /* Digital input is not inverted */
                                                      kPORT_InputNormal,
                                                      /* Pin Control Register fields are not locked */
                                                      kPORT_UnlockRegister};
    /* PORT1_2 (pin C04) is configured as PIO1_2 */
    PORT_SetPinConfig(PORT1, 2U, &port1_2_pinC04_config);                                                                                                                                                                                          
    const port_pin_config_t port0_2_pinB16_config = {/* Internal pull-up/down resistor is disabled */
                                                   kPORT_PullDisable,
                                                   /* Low internal pull resistor value is selected. */
                                                   kPORT_LowPullResistor,
                                                   /* Fast slew rate is configured */
                                                   kPORT_FastSlewRate,
                                                   /* Passive input filter is disabled */
                                                   kPORT_PassiveFilterDisable,
                                                   /* Open drain output is disabled */
                                                   kPORT_OpenDrainDisable,
                                                   /* High drive strength is configured */
                                                   kPORT_HighDriveStrength,
                                                   /* Pin is configured as SWO */
                                                   kPORT_MuxAlt1,
                                                   /* Digital input enabled */
                                                   kPORT_InputBufferEnable,
                                                   /* Digital input is not inverted */
                                                   kPORT_InputNormal,
                                                   /* Pin Control Register fields are not locked */
                                                   kPORT_UnlockRegister};
    /* PORT0_2 (pin B16) is configured as SWO */
    PORT_SetPinConfig(PORT0, 2U, &port0_2_pinB16_config);
}
led_blinky.c
#include "pin_mux.h"
#include "peripherals.h"
#include "board.h"

/*******************************************************************************
* Variables
******************************************************************************/
volatile uint32_t g_systickCounter;
/*******************************************************************************
* Code
******************************************************************************/
void SysTick_Handler(void)
{
    if (g_systickCounter != 0U)
    {
      g_systickCounter--;
    }
}

void SysTick_DelayTicks(uint32_t n)
{
    g_systickCounter = n;
    while (g_systickCounter != 0U){}
}

int main(void)
{
    /* Board pin init */
    CLOCK_EnableClock(kCLOCK_Gpio0);
    CLOCK_EnableClock(kCLOCK_Gpio1);
    BOARD_InitPins();
    LED_RED_INIT(LOGIC_LED_OFF);
    LED_BLUE_INIT(LOGIC_LED_OFF);
    LED_GREEN_INIT(LOGIC_LED_OFF);
      
   /* Set systick reload value to generate 1ms interrupt */
    if (SysTick_Config(SystemCoreClock / 1000U))
    {
      while (1){}
    }

    while (1)
    {
      /* Delay 300 ms */
      SysTick_DelayTicks(300U);
      GPIO_PortToggle(BOARD_LED_GREEN_GPIO, 1u << BOARD_LED_GREEN_GPIO_PIN);
      SysTick_DelayTicks(300U);
      GPIO_PortToggle(BOARD_LED_BLUE_GPIO, 1u << BOARD_LED_BLUE_GPIO_PIN);
      SysTick_DelayTicks(300U);
      GPIO_PortToggle(BOARD_LED_RED_GPIO, 1u << BOARD_LED_RED_GPIO_PIN);
    }
}
六、编译下载

    点击编译图标,完成整个工程编译,此时生成的固件针对core0内核,选择“CMSIS-DAP”接口方式

    添加相应的下载算法



七、在线运行闪灯效果

      由于编译后的固件程序是下载到core0中运行的,Keil工程中有release版与debug版,直接在线调试debug版,全速运行,则能看到固件程序在core0内核中执行的效果。


页: [1]
查看完整版本: 【Avnet | NXP FRDM-MCXN947试用活动】开箱着手点灯