ARM Cortex-M系列之中断向量表

本文详细介绍了ARM Cortex-M系列芯片的中断向量表,包括其格式、定义、偏移寄存器及其应用。中断向量表的每一位对应一个32bit地址,用于存放中断函数地址。中断向量表可以通过C或汇编语言定义,并需置于片上闪存起始地址。中断向量表偏移寄存器允许改变中断向量表的位置,提高系统灵活性,常在RTOS中使用。
摘要由CSDN通过智能技术生成

ARM Cortex-M架构的芯片的中断向量表(Interrupt Vector Table)前16位的中断由ARM核设定。16位以后的中断为芯片厂商自行定义。ARM Cortex-M架构芯片一般带有片上闪存(flash)。ARM Cortex-M手册规定在片上闪存起始地址处需要有一个有效的中断向量表。芯片上电或复位后首先从中向量表中读出入口函数地址和栈指针。将入口函数地址和栈指针装载入寻址寄存器(PC)和栈指针(SP)寄存器后,开始执行程序。

中断向量表格式

中断向量表每一位为一个32bit的地址。每一个地址对应一个中断函数的地址(第一位除外)。除了第一位以外,所有地址的目标都为寻址寄存器(PC)。当相应中断触发时,ARM Cortex-M硬件会自动把中断向量表中相应的中断函数地址装载入寻址寄存器(PC)然后开始执行中断函数。如上所述,前16位为ARM保留的系统中断,建议读者熟记。之后的中断为芯片自定义的外部中断,可以在使用时查询手册或者厂商提供的驱动程序。

Exception Number IRQ Number 中断 注释
NA NA SP 初始栈指针
1 NA Reset 复位函数地址
2 -14 NMI 不可屏蔽中断
3 -13 Hard fault
4 -12 Memory fault (Reserved in CM0/0+) 内存管理错误中断
5 -11 Bus fault (Reserved in CM0/0+) 总线错误中断
6 -10 Usage fault (Reserved in CM0/0+) 使用错误中断
7 -9 Reserved 保留位(未使用)
8 -8 Reserved 保留位(未使用)
9 -7 Reserved 保留位(未使用)
10 -6 Reserved 保留位(未使用)
11 -5 SVC 通常用于请求privileged模式,或者在OS中用于请求系统资源
12 -4 Reserved 保留位(调试用)
13 -3 Reserved 保留位(未使用)
14 -2 PendSV 通常用于在OS中切换任务
15 -1 SysTick 系统节拍时钟中断

中断向量表定义

中断向量表可以通过汇编语言定义也可以通过C语言定义。以下列出两种方式的示例程序。

C

这里我们定义了一个数组,数组的每一项对应相应的中断函数。如上所述,数组的第一项为初始栈指针,第二项为入口函数地址。余下的所有中断都指向了一个通用中断函数。开发者可以根据需求替代相应的中断函数。
上文还提到中断向量表需要放置于闪存起始地址处。这里__attribute__((section(".vectors")))为gcc的特定语法(如果开发者使用IAR或者其他编译器,语法有所不同),目的是告诉编译器在链接所有对象文件(objects)时把_vector[]数组放在链接脚本(linker script)中的.vectors段落(section)。在链接脚本中,.vector段落被定义于闪存起始处。

#ifndef ARMV7M_PERIPHERAL_INTERRUPTS
#  error ARMV7M_PERIPHERAL_INTERRUPTS must be defined to the number of I/O interrupts to be supported
#endif

extern void exception_common(void);
unsigned _vectors[] __attribute__((section(".vectors"))) =
{
   
  /* Initial stack */
  IDLE_STACK,
  /* Reset exception handler */
  (unsigned)&__start,
  /* Vectors 2 - n point directly at the generic handler */
  [2 ... (15 + ARMV7M_PERIPHERAL_INTERRUPTS
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值