单片机
返回首页

Cortex-M3 (NXP LPC1788)之外部中断操作

2018-11-29 来源:eefocus

要使用LPC1788的外部中断,要进行两部分的操作。由于外部中断的管脚采用I/O复用的形式,显然我们首先要对管脚进行配置,使其工作在外部中断输入的模式。其次,我们需要配置中断相关的寄存器包括中断使能以及中断的触发方式等。


由于我们使用的是外部中断0,查阅数据手册,其GPIO管脚为P2_10,为此我们设置IOCON_P2_10寄存器的FUNC字段,设置成001即为EINT0模式。 配置完引脚后,还需要继续配置具体的中断功能。我们需要打开中断使能,设置ISER相应位;还要配置中断的触发方式如电平触发和边沿触发,相关寄存器为EXTMODE和EXTPOLAR;中断触发以后会将外部中断标志寄存器EXTINT相应位置位,这将会向NVIC提交中断请求,如果管脚中断使能,则会产生中断。中断响应后必须将EXTINT中的该位清零,否则不能产生下一次中断。


中断入口向量的地址在启动文件中定义,对于外部中断0,其标号为EINT0_IRQHandler。开发板上的电路图如图1所示 


EINTO

图1:按键SW6控制GPIO_P2_10的EINT0


按键按下时,GPIO_P2_10是低电平,没有按下为高电平。配置EINT0的中断触发方式为低电平触发,在中断函数中熄灭LED。在主函数中一直点亮。程序的效果为按下SW6,LED灯熄灭。松开则一直保持亮。程序如下:


  1. #define rFIO1DIR        (*(volatile unsigned*)0x20098020)  

  2. #define rFIO1MASK       (*(volatile unsigned*)0x20098030)  

  3. #define rFIO1PIN        (*(volatile unsigned*)0x20098034)  

  4. #define rFIO1SET        (*(volatile unsigned*)0x20098038)  

  5. #define rFIO1CLR        (*(volatile unsigned*)0x2009803c)  

  6.   

  7. #define rIOCON_P2_10            (*(volatile unsigned *)0x4002C128)  

  8. #define rIOIntStatus            (*(volatile unsigned *)0x40028080)  

  9. #define rIO2IntEnF      (*(volatile unsigned *)0x400280B4)  

  10. #define rIO2IntClr      (*(volatile unsigned *)0x400280AC)  

  11.   

  12. #define rEXTINT         (*(volatile unsigned *)0x400FC140)  

  13. #define rEXTMODE        (*(volatile unsigned *)0x400FC148)  

  14. #define rEXTPOLAR       (*(volatile unsigned *)0x400FC14C)  

  15.   

  16. #define rISER0          (*(volatile unsigned *)0xE000E100)  

  17. #define rIRP4           (*(volatile unsigned *)0xE000E410)  

  18.   

  19. void EINT0_IRQHandler()  

  20. {  

  21.     rEXTINT |= (0x1<<0);//中断产生之后必须清除该位  

  22.       

  23.     rFIO1PIN |= (1<<18);  

  24. }  

  25.   

  26. void GPIO_INIT()  

  27. {  

  28.     rFIO1DIR |= (0x1<<18);//P1.18设置为输出,控制LED  

  29.     rIOCON_P2_10 = (rIOCON_P2_10&(~0x7))|(0x1<<0);//配置FUNC字段为EINT0模式  

  30. }  

  31.   

  32. void EINT_INIT()  

  33. {  

  34.     rEXTMODE &= ~(0x1<<0);//配置成低电平触发  

  35.     rEXTPOLAR &= ~(0x1<<0);  

  36.       

  37.     rISER0 = (0x1<<18);//打开EINT0中断使能  

  38. }  

  39.   

  40. int main(void)  

  41. {  

  42.     GPIO_INIT();  

  43.     EINT_INIT();  

  44.     while(1)  

  45.     {  

  46.         rFIO1PIN &= ~(1<<18);  

  47.     }  

  48. }  

  49.   

  50. void SystemInit (void)  

  51. {  

  52. }  


进入单片机查看更多内容>>

上一篇:LPC1768-GPIO

下一篇:LPC-2124中断概述

相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 光控音效发生器电路

  • 非常简单的150W功放电路图

  • 一个简单的警笛电路图

  • 一个简单的立体声平衡指示器电路

  • 分享一个电网倾角计电路

  • 使用NE555和磁簧开关的橱柜照明电路

    相关电子头条文章