LPC1114单片机的NVIC中断函数,有开中断、关中断、设置优先级、挂起等操作函数。这些函数位于core_cm0.h文件里面。比如开中断的函数如下:

/** \brief Enable External Interrupt
The function enables a device-specific interrupt in the NVIC interrupt controller.
\param [in] IRQn External interrupt number. Value cannot be negative.
 */
__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn)
{
 NVIC->ISER[] = ( << ((uint32_t)(IRQn) & 0x1F));
}

/**/里面的注释告诉我们,这是一个中断函数,函数的功能是允许一个中断,也就是开中断的意思。

比如我们要开P1口的中断,可以这样使用这个函数:NVIC_EnableIRQ(EINT1_IRQn)

该函数里面,NVIC_EnableIRQ是函数名,EINT1_IRQn是参数,表示P1口的中断,这个参数可以在头文件lpc11xx.h文件中找到。如下所示:

* ==========================================================================
* ---------- Interrupt Number Definition -----------------------------------
* ==========================================================================
*/
typedef enum IRQn
{
/****** Cortex-M0 Processor Exceptions Numbers ******************************/
Reset_IRQn = -, /*!< 1 Reset Vector, invoked on Power up and warm reset */
NonMaskableInt_IRQn = -, /*!< 2 Non maskable Interrupt, cannot be stopped or preempted */
HardFault_IRQn = -, /*!< 3 Hard Fault, all classes of Fault */
SVCall_IRQn = -, /*!< 11 System Service Call via SVC instruction */
PendSV_IRQn = -, /*!< 14 Pendable request for system service */
SysTick_IRQn = -, /*!< 15 System Tick Timer */

/****** LPC11Cxx or LPC11xx Specific Interrupt Numbers *************************/
WAKEUP0_IRQn = , /*!< All I/O pins can be used as wakeup source. */
WAKEUP1_IRQn = , /*!< There are 13 pins in total for LPC11xx */
WAKEUP2_IRQn = ,
WAKEUP3_IRQn = ,
WAKEUP4_IRQn = ,
WAKEUP5_IRQn = ,
WAKEUP6_IRQn = ,
WAKEUP7_IRQn = ,
WAKEUP8_IRQn = ,
WAKEUP9_IRQn = ,
WAKEUP10_IRQn = ,
WAKEUP11_IRQn = ,
WAKEUP12_IRQn = ,
CAN_IRQn = , /*!< CAN Interrupt */
SSP1_IRQn = , /*!< SSP1 Interrupt */
I2C_IRQn = , /*!< I2C Interrupt */
TIMER_16_0_IRQn = , /*!< 16-bit Timer0 Interrupt */
TIMER_16_1_IRQn = , /*!< 16-bit Timer1 Interrupt */
TIMER_32_0_IRQn = , /*!< 32-bit Timer0 Interrupt */
TIMER_32_1_IRQn = , /*!< 32-bit Timer1 Interrupt */
SSP0_IRQn = , /*!< SSP0 Interrupt */
UART_IRQn = , /*!< UART Interrupt */
Reserved0_IRQn = , /*!< Reserved Interrupt */
Reserved1_IRQn = ,
ADC_IRQn = , /*!< A/D Converter Interrupt */
WDT_IRQn = , /*!< Watchdog timer Interrupt */
BOD_IRQn = , /*!< Brown Out Detect(BOD) Interrupt */
FMC_IRQn = , /*!< Flash Memory Controller Interrupt */
EINT3_IRQn = , /*!< External Interrupt 3 Interrupt */
EINT2_IRQn = , /*!< External Interrupt 2 Interrupt */
EINT1_IRQn = , /*!< External Interrupt 1 Interrupt */
EINT0_IRQn = , /*!< External Interrupt 0 Interrupt */
} IRQn_Type;

可以看到,共有32种中断,在使用的时候,你要开什么中断,就用NVIC开中断函数把对应的中断打开。

开了中断以后,中断函数怎么写呢?

例如P1口的中断函数这样写:

void PIOINT1_IRQHandler()
{
  // 进中断以后执行的代码
}

为什么P1口的中断函数名称是PIOINT1_IRQHandler,这个其实在startup_lpc11xx.s文件中已经定义好了:

; External Interrupts
 DCD WAKEUP_IRQHandler ; + : Wakeup PIO0.
 DCD WAKEUP_IRQHandler ; + : Wakeup PIO0.
 DCD WAKEUP_IRQHandler ; + : Wakeup PIO0.
 DCD WAKEUP_IRQHandler ; + : Wakeup PIO0.
 DCD WAKEUP_IRQHandler ; + : Wakeup PIO0.
 DCD WAKEUP_IRQHandler ; + : Wakeup PIO0.
 DCD WAKEUP_IRQHandler ; + : Wakeup PIO0.
 DCD WAKEUP_IRQHandler ; + : Wakeup PIO0.
 DCD WAKEUP_IRQHandler ; + : Wakeup PIO0.
 DCD WAKEUP_IRQHandler ; + : Wakeup PIO0.
 DCD WAKEUP_IRQHandler ; +: Wakeup PIO0.
 DCD WAKEUP_IRQHandler ; +: Wakeup PIO0.
 DCD WAKEUP_IRQHandler ; +: Wakeup PIO1.
 DCD CAN_IRQHandler ; +: CAN
 DCD SSP1_IRQHandler ; +: SSP1
 DCD I2C_IRQHandler ; +: I2C
 DCD TIMER16_0_IRQHandler ; +: -bit Counter-Timer
 DCD TIMER16_1_IRQHandler ; +: -bit Counter-Timer
 DCD TIMER32_0_IRQHandler ; +: -bit Counter-Timer
 DCD TIMER32_1_IRQHandler ; +: -bit Counter-Timer
 DCD SSP0_IRQHandler ; +: SSP0
 DCD UART_IRQHandler ; +: UART
 DCD USB_IRQHandler ; +: USB IRQ
 DCD USB_FIQHandler ; +: USB FIQ
 DCD ADC_IRQHandler ; +: A/D Converter
 DCD WDT_IRQHandler ; +: Watchdog Timer
 DCD BOD_IRQHandler ; +: Brown Out Detect
 DCD FMC_IRQHandler ; +: IP2111 Flash Memory Controller
 DCD PIOINT3_IRQHandler ; +: PIO INT3
 DCD PIOINT2_IRQHandler ; +: PIO INT2
 DCD PIOINT1_IRQHandler ; +: PIO INT1
 DCD PIOINT0_IRQHandler ; +: PIO INT0

总结:NVIC的函数使用,就是这么简单,KEIL已经给我们写好,我们直接使用即可!

cortex m0 lpc1114的NVIC中断如何使用的更多相关文章

  1. 灵动微电子ARM Cortex M0 MM32F0010 Timer定时器中断定时功能的配置

    灵动微电子ARM Cortex M0 MM32F0010 Timer定时器中断定时功能的配置 目录: 1.Timer1高级定时器Timer3通用定时器Timer14基本定时器简介 2.Timer1高级 ...

  2. 灵动微电子ARM Cortex M0 MM32F0010 UART1和UART2中断接收数据

    灵动微电子ARM Cortex M0 MM32F0010 UART1和UART2中断接收数据 目录: 1.MM32F0010UART简介 2.MM32F0010UART特性 3.MM32F0010使用 ...

  3. 【原创】NVIC中断

    (1)NVIC     全称为Next Vector Interrupt Controoler,嵌套中断向量控制器,是ARM Cortex M3的内部设备之一,任何一款基于ARM Cortex M3的 ...

  4. 【STM32H7教程】第21章 STM32H7的NVIC中断分组和配置(重要)

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第21章       STM32H7的NVIC中断分组和配置( ...

  5. 灵动微电子ARM Cortex M0 MM32F0010 GPIO 的配置驱动LED灯

    灵动微电子ARM Cortex M0 MM32F0010 GPIO的配置 目录: 1.前言 2.学习方法简要说明 3.要点提示 4.注意事项 5.MM32F0010系统时钟的配置 6.MM32F001 ...

  6. STM32学习笔记-NVIC中断知识点

    STM32学习笔记-NVIC中断知识点总结 中断优先级设置步骤 1. 系统运行后先设置中断优先级分组 函数:void NVIC_PriorityGroupConfig(uint32_tNVIC_Pri ...

  7. cortex m0启动代码详解

    转自:http://www.cnblogs.com/mddblog/p/4920063.html 阅读目录 概述 1.堆栈空间定义 2.存放中断向量表 3. 复位中断函数(Reset_Handler) ...

  8. ARM Cortex M0 程序映像和启动流程

  9. 嵌入式02 STM32 实验11 NVIC和中断总结

    一.基础知识 1.cortex-m3支持256个中断,其中包含了16个内核中断,240个外部中断 2.STM32只有84个中断,包括16个内核中断和68个可屏蔽中断 3.STM32F103上只有60个 ...

随机推荐

  1. android 43 SQLite数据库

    SQLite数据库很小,占用内存只有几百K,安卓和IOS都是用的SQLite数据库. 页面: <LinearLayout xmlns:android="http://schemas.a ...

  2. iOS--iOS7摄像头识别二维码功能

    iOS–iOS7摄像头识别二维码功能 属性介绍: AVFoundation 框架基于以下几个类实现图像捕捉 ,通过这些类可以访问来自相机设备的原始数据并控制它的组件. AVCaptureDevice ...

  3. RHEL7重置root密码

    一.rd.break方法 在linux16那一段的最后,空一格输入rd.break 按Ctrl+启动到单用户模式,如下: 进去后输入命令mount,发现根为/sysroot/,并且不能写,只有ro=r ...

  4. jQuery Capty 图片标题插件

    jQuery Capty是可以为图片添加漂亮的字幕的插件 文件包含: <link type="text/css" rel="stylesheet" hre ...

  5. .NET中TextBox控件设置ReadOnly=true后台取不到值三种解决方法

    当TextBox设置了ReadOnly=true后要是在前台为控件添加了值,后台是取不到的,值为空,多么郁闷的一个问题经过尝试,发现可以通过如下的方式解决这个问题.感兴趣的朋友可以了解下 当TextB ...

  6. br与p标签区别

    首先,相同之处是br和p都是有换行的属性及意思其次,区别<br />是只需一个单独使用,而<p>和</p>是一对使用再次,br标签是小换行提行,p标签是大换行(分段 ...

  7. (转载)Javascript 进阶 作用域 作用域链

    载请标明出处:http://blog.csdn.net/lmj623565791/article/details/25076713 一直觉得Js很强大,由于长期不写js代码,最近刚好温故温故. 1.J ...

  8. Web Service属性介绍

    每个 Web Service都需要唯一的命名空间,它可使客户端应用程序区分出可能使用相同方法名称的 Web Service.在 Visual Studio.NET中创建的Web Service的默认命 ...

  9. mysqldump备份、还原数据库路径名含有空格的处理方法(如:Program Files)

    虽然以下的方法也可以解决,不过最简单直接的,还是直接在路径前后加双引号-" ",这个方法简单有效. 首先要说明的是mysqldump.exe在哪里不重要,重要的是要处理好路径中的非 ...

  10. 关于c:\fakepath\的解决办法

    (2014.11.25 最后更新) 一.碎碎念:关于访问本地图片的路径的问题,比较典型的例子就是上传头像.在以往的解决办法中,我们大多是先将图片上传到服务器然后从服务器返回图片,显示在页面上以达到预览 ...