回答

收藏

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

NXP NXP 2029 人阅读 | 0 人回复 | 2024-11-11

本帖最后由 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”文件分享如下附件:
NXP.MCXN947_DFP.19.0.0.zip (8.92 MB, 下载次数: 0)

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

五、代码编写

      编写之前,需要了解一下这款开发板的整体硬件布局,开发板的资源框图,官方已在原理图中给出。
FRDM-MCXN947原理图.pdf (3.63 MB, 下载次数: 0)


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

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

  4. void BOARD_InitBootPins(void)
  5. {
  6.     BOARD_InitPins();
  7. }

  8. void BOARD_InitPins(void)
  9. {
  10.     /* Enables the clock for PORT0 controller: Enables clock */
  11.     CLOCK_EnableClock(kCLOCK_Port0);
  12.     /* Enables the clock for PORT1 controller: Enables clock */
  13.     CLOCK_EnableClock(kCLOCK_Port1);

  14.     const port_pin_config_t port0_10_pinB12_config = {/* Internal pull-up/down resistor is disabled */
  15.                                                       kPORT_PullDisable,
  16.                                                       /* Low internal pull resistor value is selected. */
  17.                                                       kPORT_LowPullResistor,
  18.                                                       /* Fast slew rate is configured */
  19.                                                       kPORT_FastSlewRate,
  20.                                                       /* Passive input filter is disabled */
  21.                                                       kPORT_PassiveFilterDisable,
  22.                                                       /* Open drain output is disabled */
  23.                                                       kPORT_OpenDrainDisable,
  24.                                                       /* Low drive strength is configured */
  25.                                                       kPORT_LowDriveStrength,
  26.                                                       /* Pin is configured as PIO0_10 */
  27.                                                       kPORT_MuxAlt0,
  28.                                                       /* Digital input enabled */
  29.                                                       kPORT_InputBufferEnable,
  30.                                                       /* Digital input is not inverted */
  31.                                                       kPORT_InputNormal,
  32.                                                       /* Pin Control Register fields [15:0] are not locked */
  33.                                                       kPORT_UnlockRegister};
  34.     /* PORT0_10 (pin B12) is configured as PIO0_10 */
  35.     PORT_SetPinConfig(PORT0, 10U, &port0_10_pinB12_config);                                                                                    
  36.     const port_pin_config_t port0_27_pinE10_config = {/* Internal pull-up/down resistor is disabled */
  37.                                                       kPORT_PullDisable,
  38.                                                       /* Low internal pull resistor value is selected. */
  39.                                                       kPORT_LowPullResistor,
  40.                                                       /* Fast slew rate is configured */
  41.                                                       kPORT_FastSlewRate,
  42.                                                       /* Passive input filter is disabled */
  43.                                                       kPORT_PassiveFilterDisable,
  44.                                                       /* Open drain output is disabled */
  45.                                                       kPORT_OpenDrainDisable,
  46.                                                       /* Low drive strength is configured */
  47.                                                       kPORT_LowDriveStrength,
  48.                                                       /* Pin is configured as PIO0_27 */
  49.                                                       kPORT_MuxAlt0,
  50.                                                       /* Digital input enabled */
  51.                                                       kPORT_InputBufferEnable,
  52.                                                       /* Digital input is not inverted */
  53.                                                       kPORT_InputNormal,
  54.                                                       /* Pin Control Register fields [15:0] are not locked */
  55.                                                       kPORT_UnlockRegister};
  56.     /* PORT0_27 (pin E10) is configured as PIO0_27 */
  57.     PORT_SetPinConfig(PORT0, 27U, &port0_27_pinE10_config);

  58.     const port_pin_config_t port1_2_pinC04_config = {/* Internal pull-up/down resistor is disabled */
  59.                                                       kPORT_PullDisable,
  60.                                                       /* Low internal pull resistor value is selected. */
  61.                                                       kPORT_LowPullResistor,
  62.                                                       /* Fast slew rate is configured */
  63.                                                       kPORT_FastSlewRate,
  64.                                                       /* Passive input filter is disabled */
  65.                                                       kPORT_PassiveFilterDisable,
  66.                                                       /* Open drain output is disabled */
  67.                                                       kPORT_OpenDrainDisable,
  68.                                                       /* Low drive strength is configured */
  69.                                                       kPORT_LowDriveStrength,
  70.                                                       /* Pin is configured as PIO1_2 */
  71.                                                       kPORT_MuxAlt0,
  72.                                                       /* Digital input enabled */
  73.                                                       kPORT_InputBufferEnable,
  74.                                                       /* Digital input is not inverted */
  75.                                                       kPORT_InputNormal,
  76.                                                       /* Pin Control Register fields [15:0] are not locked */
  77.                                                       kPORT_UnlockRegister};
  78.     /* PORT1_2 (pin C04) is configured as PIO1_2 */
  79.     PORT_SetPinConfig(PORT1, 2U, &port1_2_pinC04_config);                                                                                                                                                                                            
  80.     const port_pin_config_t port0_2_pinB16_config = {/* Internal pull-up/down resistor is disabled */
  81.                                                      kPORT_PullDisable,
  82.                                                      /* Low internal pull resistor value is selected. */
  83.                                                      kPORT_LowPullResistor,
  84.                                                      /* Fast slew rate is configured */
  85.                                                      kPORT_FastSlewRate,
  86.                                                      /* Passive input filter is disabled */
  87.                                                      kPORT_PassiveFilterDisable,
  88.                                                      /* Open drain output is disabled */
  89.                                                      kPORT_OpenDrainDisable,
  90.                                                      /* High drive strength is configured */
  91.                                                      kPORT_HighDriveStrength,
  92.                                                      /* Pin is configured as SWO */
  93.                                                      kPORT_MuxAlt1,
  94.                                                      /* Digital input enabled */
  95.                                                      kPORT_InputBufferEnable,
  96.                                                      /* Digital input is not inverted */
  97.                                                      kPORT_InputNormal,
  98.                                                      /* Pin Control Register fields [15:0] are not locked */
  99.                                                      kPORT_UnlockRegister};
  100.     /* PORT0_2 (pin B16) is configured as SWO */
  101.     PORT_SetPinConfig(PORT0, 2U, &port0_2_pinB16_config);
  102. }
复制代码

led_blinky.c
  1. #include "pin_mux.h"
  2. #include "peripherals.h"
  3. #include "board.h"

  4. /*******************************************************************************
  5. * Variables
  6. ******************************************************************************/
  7. volatile uint32_t g_systickCounter;
  8. /*******************************************************************************
  9. * Code
  10. ******************************************************************************/
  11. void SysTick_Handler(void)
  12. {
  13.     if (g_systickCounter != 0U)
  14.     {
  15.         g_systickCounter--;
  16.     }
  17. }

  18. void SysTick_DelayTicks(uint32_t n)
  19. {
  20.     g_systickCounter = n;
  21.     while (g_systickCounter != 0U){}
  22. }

  23. int main(void)
  24. {
  25.     /* Board pin init */
  26.     CLOCK_EnableClock(kCLOCK_Gpio0);
  27.     CLOCK_EnableClock(kCLOCK_Gpio1);
  28.     BOARD_InitPins();
  29.     LED_RED_INIT(LOGIC_LED_OFF);
  30.     LED_BLUE_INIT(LOGIC_LED_OFF);
  31.     LED_GREEN_INIT(LOGIC_LED_OFF);
  32.         
  33.      /* Set systick reload value to generate 1ms interrupt */
  34.     if (SysTick_Config(SystemCoreClock / 1000U))
  35.     {
  36.         while (1){}
  37.     }

  38.     while (1)
  39.     {
  40.       /* Delay 300 ms */
  41.       SysTick_DelayTicks(300U);
  42.       GPIO_PortToggle(BOARD_LED_GREEN_GPIO, 1u << BOARD_LED_GREEN_GPIO_PIN);
  43.       SysTick_DelayTicks(300U);
  44.       GPIO_PortToggle(BOARD_LED_BLUE_GPIO, 1u << BOARD_LED_BLUE_GPIO_PIN);
  45.       SysTick_DelayTicks(300U);
  46.       GPIO_PortToggle(BOARD_LED_RED_GPIO, 1u << BOARD_LED_RED_GPIO_PIN);
  47.     }
  48. }
复制代码

六、编译下载

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

    添加相应的下载算法



七、在线运行闪灯效果

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


分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条