CMSIS对异常和中断标识符、中断处理函数名以及中断向量异常号都有严格的要求。
CMSIS:Cortex Microcontroller Software Interface Standard
CMSIS对异常和中断标识符、中断处理函数名以及中断向量异常号都有严格的要求。异常和中断标识符需加后缀_IRQn,系统
异常向量号必须为负值,而设备的中断向量号是从 0 开始递增,具体的定义在 M451Series.h 文件,如下所示(以 M451 微控制器系列为例):下面是 M451 的中断异常:
typedef enum IRQn
{
/****** Cortex-M4 Processor Exceptions Numbers ******/
NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */
MemoryManagement_IRQn = -12, /*!< 4 Memory Management Interrupt */
BusFault_IRQn = -11, /*!< 5 Bus Fault Interrupt */
UsageFault_IRQn = -10, /*!< 6 Usage Fault Interrupt */
SVCall_IRQn = -5, /*!< 11 SV Call Interrupt */
DebugMonitor_IRQn = -4, /*!< 12 Debug Monitor Interrupt */
PendSV_IRQn = -2, /*!< 14 Pend SV Interrupt */
SysTick_IRQn = -1, /*!< 15 System Tick Interrupt */
/****** M451 Specific Interrupt Numbers *****/
BOD_IRQn = 0, /*!< Brown Out detection Interrupt */
IRC_IRQn = 1, /*!< Internal RC Interrupt */
PWRWU_IRQn = 2, /*!< Power Down Wake Up Interrupt */
RAMPE_IRQn = 3, /*!< SRAM parity check failed Interrupt */
CKFAIL_IRQn = 4, /*!< Clock failed Interrupt */
RTC_IRQn = 6, /*!< Real Time Clock Interrupt */
TAMPER_IRQn = 7, /*!< Tamper detection Interrupt */
WDT_IRQn = 8, /*!< Watchdog Timer Interrupt */
WWDT_IRQn = 9, /*!< Window Watchdog Timer Interrupt */
EINT0_IRQn = 10, /*!< External Input 0 Interrupt */
EINT1_IRQn = 11, /*!< External Input 1 Interrupt */
EINT2_IRQn = 12, /*!< External Input 2 Interrupt */
EINT3_IRQn = 13, /*!< External Input 3 Interrupt */
EINT4_IRQn = 14, /*!< External Input 4 Interrupt */
EINT5_IRQn = 15, /*!< External Input 5 Interrupt */
GPA_IRQn = 16, /*!< GPIO Port A Interrupt */
GPB_IRQn = 17, /*!< GPIO Port B Interrupt */
GPC_IRQn = 18, /*!< GPIO Port C Interrupt */
GPD_IRQn = 19, /*!< GPIO Port D Interrupt */
GPE_IRQn = 20, /*!< GPIO Port E Interrupt */
GPF_IRQn = 21, /*!< GPIO Port F Interrupt */
SPI0_IRQn = 22, /*!< SPI0 Interrupt */
SPI1_IRQn = 23, /*!< SPI1 Interrupt */
BRAKE0_IRQn = 24, /*!< BRAKE0 Interrupt */
PWM0P0_IRQn = 25, /*!< PWM0P0 Interrupt */
PWM0P1_IRQn = 26, /*!< PWM0P1 Interrupt */
PWM0P2_IRQn = 27, /*!< PWM0P2 Interrupt */
BRAKE1_IRQn = 28, /*!< BRAKE1 Interrupt */
PWM1P0_IRQn = 29, /*!< PWM1P0 Interrupt */
PWM1P1_IRQn = 30, /*!< PWM1P1 Interrupt */
PWM1P2_IRQn = 31, /*!< PWM1P2 Interrupt */
TMR0_IRQn = 32, /*!< Timer 0 Interrupt */
TMR1_IRQn = 33, /*!< Timer 1 Interrupt */
TMR2_IRQn = 34, /*!< Timer 2 Interrupt */
TMR3_IRQn = 35, /*!< Timer 3 Interrupt */
UART0_IRQn = 36, /*!< UART 0 Interrupt */
UART1_IRQn = 37, /*!< UART 1 Interrupt */
I2C0_IRQn = 38, /*!< I2C 0 Interrupt */
I2C1_IRQn = 39, /*!< I2C 1 Interrupt */
PDMA_IRQn = 40, /*!< Peripheral DMA Interrupt */
DAC_IRQn = 41, /*!< DAC Interrupt */
ADC00_IRQn = 42, /*!< ADC0 Source 0 Interrupt */
ADC01_IRQn = 43, /*!< ADC0 Source 1 Interrupt */
ACMP01_IRQn = 44, /*!< Analog Comparator 0 and 1 Interrupt */
ADC02_IRQn = 46, /*!< ADC0 Source 2 Interrupt */
ADC03_IRQn = 47, /*!< ADC0 Source 3 Interrupt */
UART2_IRQn = 48, /*!< UART2 Interrupt */
UART3_IRQn = 49, /*!< UART3 Interrupt */
SPI2_IRQn = 51, /*!< SPI2 Interrupt */
USBD_IRQn = 53, /*!< USB device Interrupt */
USBH_IRQn = 54, /*!< USB host Interrupt */
USBOTG_IRQn = 55, /*!< USB OTG Interrupt */
CAN0_IRQn = 56, /*!< CAN0 Interrupt */
SC0_IRQn = 58, /*!< Smart Card 0 Interrupt */
TK_IRQn = 63 /*!< Touch Key Interrupt */
} IRQn_Type;
CMSIS 对系统异常处理函数以及普通的中断处理函数名的定义也有所不同。
(1)系统异常处理函数名需加后缀“_Handler”。
(2)普通中断处理函数名则加后缀“_IRQHandler”。
这些异常中断处理函数被定义为 weak 属性, 以便在其他的文件中重新实现时不出现重复定义的错误。这些处理函数的地址用来填充中断异常向量表,并在启动代码中给以声明,例如:BOD_IRQHandler、WDT_IRQHandler、TMR0_IRQHandler、UART0_IRQHandler 等。
CMSIS对异常和中断标识符、中断处理函数名以及中断向量异常号都有严格的要求。相关推荐
- python中的lambda函数用法--无需定义函数名的函数或子程序,避免代码充斥着大量单行函数
匿名函数lambda:是指一类无需定义标识符(函数名)的函数或子程序. lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值. 要点: lambda 函数不能包含命令 包含 ...
- 嵌入式linux应用层中断函数,嵌入式LINUX驱动开发(中断处理函数)
嵌入式LINUX驱动开发(中断处理函数) 2020年08月11日 | 萬仟网网络运营 | 我要评论 嵌入式LINUX驱动学习之7中断相关(一)中断处理函数一.函数.头文件及说明二.编译举例:一.函数. ...
- linux中断调用spi函数,基于Linux的ARM与FPGA SPI驱动,中断函数调用spidev_sync_read(),出现异常...
基于Linux的ARM与FPGA SPI驱动,中断函数调用spidev_sync_read(),出现错误 BUG: scheduling while atomic: spidev_test/1034/ ...
- arm b bl 地址无关码_ARM_异常和中断
ARM_异常和中断 问题1.中断向量表为于存储器的什么位置? ARM7系列,除ARM720T可以放高端地址,ARM9或更高都放高端地址上. 2.FIQ或IRQ异常返回指令是什么? 答案见下面.... ...
- 两篇文章说异常和中断之二
一.基本概念 1. 产生的位置 发生的时刻 时序 中断 CPU外部 随机 异步 异常 CPU正在执行的程序 一条指令终止执行后 同步 2.由中断或异常执行的代码不是一个进程,而是一个内核控制路径,代 ...
- Linux 中断之中断处理浅析
1. 中断的概念 中断是指在CPU正常运行期间,由于内外部事件或由程序预先安排的事件引起的 CPU 暂时停止正在运行的程序,转而为该内部或外部事件或预先安排的事件服务的程序中去,服务完毕后再返回去继续 ...
- Linux Kernel 5.14 arm64异常向量表解读-中断处理解读
★★★ 个人博客导读首页-点击此处 ★★★ . 说明: 在默认情况下,本文讲述的都是ARMV8-aarch64架构,linux kernel 5.14 文章目录 1.armv8-aarch64的异常向 ...
- windowsCE异常和中断服务程序初探
windowsCE异常和中断服务程序初探 ---------by nasiry 转载请说明出处 1.中断/异常相量的装入和执行方式. 中断和异常都是异步发生的事件,当该事件发生,系统将停止目前正在执行 ...
- windowsCE异常和中断服务程序初探(-)
1.中断/异常相量的装入和执行方式. 中断和异常都是异步发生的事件,当该事件发生,系统将停止目前正在执行的代码转而执行事件响应的服务程序.而事件服务程序的入口点就是中断/异常向量所在的位置.arm的中 ...
最新文章
- 1. 文件系统——磁盘分区、各目录功能、硬盘
- leetcode 108. Convert Sorted Array to Binary Search Tree | 108. 将有序数组转换为二叉搜索树(Java)
- Learning representations by back-propagating errors原文解读
- “约见”面试官系列之常见面试题第三十四篇之事件冒泡、事件捕获、事件代理(建议收藏)
- 第 2-3 课:抽象类和接口 + 面试题
- MongoDB官方C#驱动中查询条件Query用法
- LIBRARY_PATH和LD_LIBRARY_PATH
- db2 查看表结构_数据库结构文档的生成利器
- Qt学习笔记之GUI基本知识
- mysql io线程 原理_mysql 原理 ~ 线程与IO
- 【笔记】深入理解 Java 虚拟机:类文件结构
- 学习OpenCV 4(一)
- SovitChart工具1分钟快速开发前端统计图表
- 【枚举·习题】拉灯游戏or费解的开关
- qq小程序绑定服务器,QQ小程序 用户信息
- 2013 ACM-ICPC南京赛区全国邀请赛
- Linux磁盘分区与LVM详解
- 携程笔试__界面测试用例
- Excel VBA初级系列培训--课时1
- 【题解】Comet OJ 夏季欢乐赛(2019)A 完全k叉树⭐⭐ 【思维】