大大通开发板评测专区
直播中

tinnu

8年用户 133经验值
擅长:可编程逻辑 嵌入式技术 控制/MCU
私信 关注
[经验]

【大联大世平 NXP i.MX RT1064开发板试用体验】外部中断

(一)外部中断与GPIO
IMX1064的外部中断属于GPIO功能之一,相关参考在参考手册12章。

General Purpose Input/Output (GPIO)


值得一提的是,IMX1064的GPIO设计是一个引脚两组IO的模式,GPIO1-5和GPIO6-9一一对应,使用的是相同的物理引脚,但GPIO1-5是普通速度的GPIO,而GPIO6-9则是高速GPIO ,运行在更高主频的时钟总线上。


(二)配置代码
IMX1064的外部中断的特性与大部分ARM单片机相似,都是使能GPIO及相关输入、中断功能,使能中断管理相关开关,以及编写中断函数。
如果从零开始可能需要查阅API手册,阅读参考手册查询每个寄存器功能。但MCUXpresso IDE的图形配置功能极大地简化了工作,只需要短短几步即可完成外部中断配置:


1-查询原理图,用户案件位于SW8,所连接引脚为GPIO5,0

KEY2.png
相关引脚:
KEY3.png



2-配置GPIO5,0,设置input+falling edge
配置1.png


3-此时即使配置了中断函数依然不会触发中断。
观察右下角的警告栏,有关于GPIO配置未初始化的提示,实际依照代码,GPIO已经配置完毕,但相关中断未使能,即在其他ARM单片机里面常见的NVIC中断管理。
这里表现为:
EnableIRQ(GPIO5_Combined_0_15_IRQn);
图形配置软件提供了方便的配置通道,只需要右键第一个选项,即可修复这个问题。 配置2.png


4-拷贝这个中断函数到main文件里面,中断函数里处理消抖及翻转LED的操作:

  1. /* GPIO5_Combined_0_15_IRQn interrupt handler */
  2. void BOARD_GPIO5_GPIO_COMB_0_15_IRQHANDLER(void) {
  3.   /*  Place your code here */
  4.         static int t_lastTtl = 0;
  5.     /* clear the interrupt status */
  6.     GPIO_PortClearInterruptFlags(GPIO5, 1U << 0);
  7.     /* Change state of switch. */
  8. //    g_InputSignal = true;
  9.     if(t_lastTtl==1)
  10.             GPIO_PinWrite(GPIO1, 9 , 0);
  11.     else
  12.             GPIO_PinWrite(GPIO1, 9 , 1);
  13.     while(GPIO_PinRead(GPIO5, 0)==0);
  14.     for (int i = 0; i < 10000000; ++i)
  15.             __asm("NOP");
  16.     t_lastTtl = !t_lastTtl;
  17.   /* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F
  18.      Store immediate overlapping exception return operation might vector to incorrect interrupt. */
  19.   #if defined __CORTEX_M && (__CORTEX_M == 4U)
  20.     __DSB();
  21.   #endif
  22. }




更多回帖

发帖
×
20
完善资料,
赚取积分