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对异常和中断标识符、中断处理函数名以及中断向量异常号都有严格的要求。相关推荐

  1. python中的lambda函数用法--无需定义函数名的函数或子程序,避免代码充斥着大量单行函数

    匿名函数lambda:是指一类无需定义标识符(函数名)的函数或子程序. lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值. 要点: lambda 函数不能包含命令 包含 ...

  2. 嵌入式linux应用层中断函数,嵌入式LINUX驱动开发(中断处理函数)

    嵌入式LINUX驱动开发(中断处理函数) 2020年08月11日 | 萬仟网网络运营 | 我要评论 嵌入式LINUX驱动学习之7中断相关(一)中断处理函数一.函数.头文件及说明二.编译举例:一.函数. ...

  3. linux中断调用spi函数,基于Linux的ARM与FPGA SPI驱动,中断函数调用spidev_sync_read(),出现异常...

    基于Linux的ARM与FPGA SPI驱动,中断函数调用spidev_sync_read(),出现错误 BUG: scheduling while atomic: spidev_test/1034/ ...

  4. arm b bl 地址无关码_ARM_异常和中断

    ARM_异常和中断 问题1.中断向量表为于存储器的什么位置? ARM7系列,除ARM720T可以放高端地址,ARM9或更高都放高端地址上. 2.FIQ或IRQ异常返回指令是什么? 答案见下面.... ...

  5. 两篇文章说异常和中断之二

    一.基本概念 1.  产生的位置 发生的时刻 时序 中断 CPU外部 随机 异步 异常 CPU正在执行的程序 一条指令终止执行后 同步 2.由中断或异常执行的代码不是一个进程,而是一个内核控制路径,代 ...

  6. Linux 中断之中断处理浅析

    1. 中断的概念 中断是指在CPU正常运行期间,由于内外部事件或由程序预先安排的事件引起的 CPU 暂时停止正在运行的程序,转而为该内部或外部事件或预先安排的事件服务的程序中去,服务完毕后再返回去继续 ...

  7. Linux Kernel 5.14 arm64异常向量表解读-中断处理解读

    ★★★ 个人博客导读首页-点击此处 ★★★ . 说明: 在默认情况下,本文讲述的都是ARMV8-aarch64架构,linux kernel 5.14 文章目录 1.armv8-aarch64的异常向 ...

  8. windowsCE异常和中断服务程序初探

    windowsCE异常和中断服务程序初探 ---------by nasiry 转载请说明出处 1.中断/异常相量的装入和执行方式. 中断和异常都是异步发生的事件,当该事件发生,系统将停止目前正在执行 ...

  9. windowsCE异常和中断服务程序初探(-)

    1.中断/异常相量的装入和执行方式. 中断和异常都是异步发生的事件,当该事件发生,系统将停止目前正在执行的代码转而执行事件响应的服务程序.而事件服务程序的入口点就是中断/异常向量所在的位置.arm的中 ...

最新文章

  1. 1. 文件系统——磁盘分区、各目录功能、硬盘
  2. leetcode 108. Convert Sorted Array to Binary Search Tree | 108. 将有序数组转换为二叉搜索树(Java)
  3. Learning representations by back-propagating errors原文解读
  4. “约见”面试官系列之常见面试题第三十四篇之事件冒泡、事件捕获、事件代理(建议收藏)
  5. 第 2-3 课:抽象类和接口 + 面试题
  6. MongoDB官方C#驱动中查询条件Query用法
  7. LIBRARY_PATH和LD_LIBRARY_PATH
  8. db2 查看表结构_数据库结构文档的生成利器
  9. Qt学习笔记之GUI基本知识
  10. mysql io线程 原理_mysql 原理 ~ 线程与IO
  11. 【笔记】深入理解 Java 虚拟机:类文件结构
  12. 学习OpenCV 4(一)
  13. SovitChart工具1分钟快速开发前端统计图表
  14. 【枚举·习题】拉灯游戏or费解的开关
  15. qq小程序绑定服务器,QQ小程序 用户信息
  16. 2013 ACM-ICPC南京赛区全国邀请赛
  17. Linux磁盘分区与LVM详解
  18. 携程笔试__界面测试用例
  19. Excel VBA初级系列培训--课时1
  20. 【题解】Comet OJ 夏季欢乐赛(2019)A 完全k叉树⭐⭐ 【思维】

热门文章

  1. Swagger 入门使用
  2. 基于IPV6的数据包分析
  3. linux 检测日志文件内容变化
  4. java学习之静态内部类
  5. 变参标准函数的重新封装,如printf
  6. Linux中makefile项目管理
  7. 继BERT之后,这个新模型再一次在11项NLP基准上打破纪录
  8. 数据结构之堆的插入、取值、排序(细致讲解+图片演示)
  9. rabbitmq 学习-9- RpcClient发送消息和同步接收消息原理
  10. iOS开发系列--网络开发(转)