cortex m0 lpc1114的NVIC中断如何使用
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中断如何使用的更多相关文章
- 灵动微电子ARM Cortex M0 MM32F0010 Timer定时器中断定时功能的配置
灵动微电子ARM Cortex M0 MM32F0010 Timer定时器中断定时功能的配置 目录: 1.Timer1高级定时器Timer3通用定时器Timer14基本定时器简介 2.Timer1高级 ...
- 灵动微电子ARM Cortex M0 MM32F0010 UART1和UART2中断接收数据
灵动微电子ARM Cortex M0 MM32F0010 UART1和UART2中断接收数据 目录: 1.MM32F0010UART简介 2.MM32F0010UART特性 3.MM32F0010使用 ...
- 【原创】NVIC中断
(1)NVIC 全称为Next Vector Interrupt Controoler,嵌套中断向量控制器,是ARM Cortex M3的内部设备之一,任何一款基于ARM Cortex M3的 ...
- 【STM32H7教程】第21章 STM32H7的NVIC中断分组和配置(重要)
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第21章 STM32H7的NVIC中断分组和配置( ...
- 灵动微电子ARM Cortex M0 MM32F0010 GPIO 的配置驱动LED灯
灵动微电子ARM Cortex M0 MM32F0010 GPIO的配置 目录: 1.前言 2.学习方法简要说明 3.要点提示 4.注意事项 5.MM32F0010系统时钟的配置 6.MM32F001 ...
- STM32学习笔记-NVIC中断知识点
STM32学习笔记-NVIC中断知识点总结 中断优先级设置步骤 1. 系统运行后先设置中断优先级分组 函数:void NVIC_PriorityGroupConfig(uint32_tNVIC_Pri ...
- cortex m0启动代码详解
转自:http://www.cnblogs.com/mddblog/p/4920063.html 阅读目录 概述 1.堆栈空间定义 2.存放中断向量表 3. 复位中断函数(Reset_Handler) ...
- ARM Cortex M0 程序映像和启动流程
- 嵌入式02 STM32 实验11 NVIC和中断总结
一.基础知识 1.cortex-m3支持256个中断,其中包含了16个内核中断,240个外部中断 2.STM32只有84个中断,包括16个内核中断和68个可屏蔽中断 3.STM32F103上只有60个 ...
随机推荐
- CSS——(1)基础
CSS(Cascading Style Sheets)层叠样式表 含义 一种计算机语言: 能够实现网页与内容分离: 用来表现文件样式,如HTML或XML: 比較 div与css 假设说div是容器的话 ...
- wdlinux 编译pdo_mysql
由于项目需要用到pdo 链接数据库 wdlinux在centos6.4下 没有pdomysql模块 ,所以重新编译 有的系统无法使用pdo_mysql 1 重新编译mysql http://www.w ...
- 再回首,Java温故知新(十一):Java反射
最近继续回顾Java基础,进行到了Java反射这一部分,个人感觉这部分应该算是Java的高级特性了,在日常开发中使用的并不多,应用人员主要是工具构建人员,所以这次学习中以了解为主,Java反射主要应用 ...
- FastDFS安装配置手册
文件服务器分布式系统安装手册 本文档详细的介绍了FastDFS的最小集群安装过程.集群环境如下: tracker:20.2.64.133 .用于调度工作,在访问上起负载均衡的作用. group1: s ...
- Java编程陷阱-类成员初始化
原文地址:http://blog.csdn.net/veryitman/article/details/6450523 如果你忽略Java的细节,恐怕你的代码会充满bug,下面讨论关于类成员初始化问题 ...
- CentOS6安装配置rsh
基本信息:节点一:ip:192.168.8.166 主机名:hadrtest01节点二:ip:192.168.8.250 主机名:hadrtest02 1.两节点分别安装rsh,rsh-server包 ...
- Python CMDB开发
Python CMDB开发 运维自动化路线: cmdb的开发需要包含三部分功能: 采集硬件数据 API 页面管理 执行流程:服务器的客户端采集硬件数据,然后将硬件信息发送到API,API负责将获取 ...
- 关于this 的一个问题
var name = "the window"; var object = { name:"my object"; getName:function(){ re ...
- 表单提交对chrome记住密码的影响
在处理注册.登录等含有用户名,密码的元素的表单时,chrome会主动的提示记住密码,然而这个功能在用户名的选择上真是耐人寻味,它总是寻找离password input控件最近的那一个文本框的内容,作为 ...
- [转]单例模式与静态变量在PHP中
在PHP中,没有普遍意义上的静态变量.与Java.C++不同,PHP中的静态变量的存活周期仅仅是每次PHP的会话周期,所以注定了不会有Java或者C++那种静态变量. 所以,在PHP中,静态变量的存在 ...