客户想在MIMXRT1050-EVK开发板上实现NMI中断,但是,在参考手册中,关于NMI引脚的介绍很少,也没有给出配置NMI引脚的步骤,这样客户就比较犯难,所以小编就在Hello_World工程的基础上实现NMI中断函数,并与大伙儿分享一下使能过程。 配置NMI引脚i.MX RT1050的GPIO5_IO00和GPIO_AD_B0_12脚都可以作为NMI引脚,在本次测试中,小编选择的是GPIO5_IO00。
在MCUXpresso IDE中,加载SDK软件库中的Hello_World工程,单击Open pins (如图1所示)打开集成的MCUXpresso config工具,检索NMI并使能对应的引脚(如图2所示),最后单击Update Code生成NMI引脚配置代码。 Fig 1 Fig 2 测试代码- /*
- * Copyright (c) 2013 - 2015, Freescale Semiconductor, Inc.
- * Copyright 2016-2017 NXP
- * All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
- #include "fsl_device_registers.h"
- #include "fsl_debug_console.h"
- #include "board.h"
- #include "pin_mux.h"
- #include "clock_config.h"
- #include "fsl_iomuxc.h"
- /*******************************************************************************
- * Definitions
- ******************************************************************************/
- void NMI_Handler(void)
- {
- PRINTF("NMI_Handler happens\n");
- }
- /*******************************************************************************
- * Prototypes
- ******************************************************************************/
- /*******************************************************************************
- * Code
- ******************************************************************************/
- /*!
- * @brief Main function
- */
- int main(void)
- {
- char ch;
- /* Init board hardware. */
- BOARD_ConfigMPU();
- BOARD_InitPins();
- BOARD_InitBootClocks();
- BOARD_InitDebugConsole();
- PRINTF("NMI interrupt test.\r\n");
- //NMI引脚初始化
- IOMUXC_SetPinMux(
- IOMUXC_SNVS_WAKEUP_NMI_GLUE_NMI, /* WAKEUP is configured as NMI_GLUE_NMI */
- 0U); /* Software Input On Field: Input Path is determined by functionality */
- while (1)
- {
- ch = GETCHAR();
- PUTCHAR(ch);
- }
- }
复制代码
注意点对于i.MX RT1050, GPIO5_IO00为高电平时,才会触发NMI中断,因为默认的引脚配置是pull-up,所以在GPIO5_IO00引脚初始化完成后就会触发中断,在测试时,按下板子上的SW8按钮才会关闭NMI中断。 Fig 3
|