Cortex-M0 LPC1114中断优先级怎么设置
LPC1114的中断,由中断控制模块NVIC控制。一共32个中断,每个中断的优先级可编程为 0~3 四种级别。级别越高对应的优先级越低。因此,级别0 是最高的中断优先级。
设置中断优先级的函数,CMISIS已经写好,并嵌入到了编译器中,例如,我们用KEIL开发的话,设置中断优先级的函数位于core_cm0.h文件当中,函数如下所示:
/** \brief Set Interrupt Priority The function sets the priority of an interrupt. \note The priority cannot be set for every core interrupt. \param [in] IRQn Interrupt number. \param [in] priority Priority to set. */ __STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) { ) { SCB->SHP[_SHP_IDX(IRQn)] = (SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) | (((priority << ( - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); } else { NVIC->IP[_IP_IDX(IRQn)] = (NVIC->IP[_IP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) | (((priority << ( - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); } }
从上面函数可以看出,该函数有两个参数,IRQn是指你要设置的中断向量,priority是中断优先级,优先级可以是0 1 2 3四个数,0的优先级最大,3的优先级最小。假设你要设置GPIO1中断的优先级最高,那么就是:
NVIC_SetPriority(EINT1_IRQn, 0);
这时,有人会问,”EINT1_IRQn”从哪里来?答:这个可以在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;
Cortex-M0 LPC1114中断优先级怎么设置的更多相关文章
- cortex m0 lpc1114的NVIC中断如何使用
LPC1114单片机的NVIC中断函数,有开中断.关中断.设置优先级.挂起等操作函数.这些函数位于core_cm0.h文件里面.比如开中断的函数如下: /** \brief Enable Extern ...
- 灵动微电子ARM Cortex M0 MM32F0010 UART1和UART2中断接收数据
灵动微电子ARM Cortex M0 MM32F0010 UART1和UART2中断接收数据 目录: 1.MM32F0010UART简介 2.MM32F0010UART特性 3.MM32F0010使用 ...
- 灵动微电子ARM Cortex M0 MM32F0010 Timer定时器中断定时功能的配置
灵动微电子ARM Cortex M0 MM32F0010 Timer定时器中断定时功能的配置 目录: 1.Timer1高级定时器Timer3通用定时器Timer14基本定时器简介 2.Timer1高级 ...
- 灵动微电子ARM Cortex M0 MM32F0010 GPIO 的配置驱动LED灯
灵动微电子ARM Cortex M0 MM32F0010 GPIO的配置 目录: 1.前言 2.学习方法简要说明 3.要点提示 4.注意事项 5.MM32F0010系统时钟的配置 6.MM32F001 ...
- cortex m0启动代码详解
转自:http://www.cnblogs.com/mddblog/p/4920063.html 阅读目录 概述 1.堆栈空间定义 2.存放中断向量表 3. 复位中断函数(Reset_Handler) ...
- ARM Cortex M0 程序映像和启动流程
- 一步一步学FRDM-KE02Z(一):IAR调试平台搭建以及OpenSDA两种工作模式设置
摘要:FRDM-KE02Z是飞思卡尔公司较为新的微控制器,学习和开发资料较少.从本篇开始会陆续介绍其相关的开发流程,并完成一个小型的工程项目.这是本系列博客的第一篇,主要介绍开发环境IAR for A ...
- STM32-M0中断优先级介绍
先解释中断优先级,后面讲代码的实现. 差异:M0的中断优先级相比于M4,没有用到分组,且只用到了2个bit位(即0~3)来设置,数值越小,优先级越高:同等优先级,根据终端号的大小来决定谁先执行. 根据 ...
- HC32L110 系列 M0 MCU 的介绍和Win10下DAP-Link, ST-Link, J-Link的烧录
HC32L110 系列 Cortex M0 MCU Hackaday 在三月份的时候介绍了一款最小的MCU NEW PART DAY: SMALLEST ARM MCU UPROOTS COMPETI ...
随机推荐
- oracle 常用博客网址
使用oradebug修改数据库scn – 提供专业ORACLE技术咨询和支持@Phone13429648788 - 惜分飞 Solaris上使用DTrace进行动态跟踪 老熊的三分地-Oracle及数 ...
- MyEclipse8.6安装svn(非link方式)
此方法经试验可行,暂时可以作为最佳解决方案. 本文所使用的MyEclipse版本为:8.6.1 svn的eclipse插件版本为:1.6.17,下载地址:http://subclipse.tigris ...
- [转] 考验你的JavaScript底细
http://sentsin.com/ 尽管今日的JavaScript已经突飞猛进,但JS的许多特性仍然保留,以下题目并不是有意设坑,许多地方将验证你的JS底细,如果错了一半,请别告诉我你从事前端. ...
- Android中多线程下载列表的封装实现(含进度反馈)
来源:http://blog.csdn.net/u011638883/article/details/17347015 实现了一下Android中的文件多线程下载模块,支持自定义线程数.断点续传.下载 ...
- 数据结构 : Hash Table
http://www.cnblogs.com/lucifer1982/archive/2008/06/18/1224319.html 作者:Angel Lucifer 引子 这篇仍然不讲并行/并发. ...
- 运行yum报错:Error: Cannot retrieve metalink for repository: epel. Please verify its path
Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again 当我们安装第三方扩 ...
- Getting Started with Testing ——开始单元测试
Android tests are based on JUnit, and you can run them either as local unit tests on the JVM or as i ...
- CentOS7下安装SVN服务端
CentOS7下安装SVN服务 1. yum命令即可方便的完成安装# sudo yum install subversion 测试安装是否成功:# svnserve --version 更改svn的默 ...
- 不能错过的XCode插件
以便自己记忆网上找的! 以下是搜集的一些有力的XCode插件. 全能搜索家CodePilot 2.0 你要找的是文件?是文件夹?是代码?Never Mind,CMD+SHIFT+X调出CodePilo ...
- 【vc】14_网络编程_socket编程
1.计算机网络基本知识 最简单的网络程序如图: 提示:IP地址就相当于一个公司的总机号码,端口号就相当于分机号码.在打电话时,拨通总机后,还需要转到分机上. (1)协议 ·为进行网络中的数据交换(通信 ...