Cortex-A7 内核中断原理
Cortex-M3 内核中断原理
中断向量表
单片机的中断会稍稍简单点。
STM32 的中断向量表,放在所有的代码的最前面,从 0x00000000 开始执行,M3 内核,从0x00000000 处拿到的 4Byte 放到 SP ,跳转复位中断开始执行。也就是说 STM32 一上电栈指针已经初始化好了,发生中断后,按中断号直接找到对应地址存放的中断函数入口地址,按照名称实现对应函数就可以了。
中断向量偏移
在 OTA 升级时,需要两套程序,一套 bootloader 一套 userapp,这两个程序肯定不能使用同一套中断向量表,因此就需要设置中断向量偏移值,在中断号对应地址上加上 userapp 的起始地址。
事实上,STM32 内部 flash 的地址为 0x08000000,在初始化时也要设置偏移地址。在 systemint 函数中,有一句 SCB-VTOR = FLASH_BASE | VECT_TAB_OFFSET 其中 flash_base 就是 0x08000000,。
NVIC 中断控制器
中断控制器完成中断的使能、关闭、中断优先级等管理。
中断服务函数
使用中断到最后就是实现这个函数
Cortex-A7 中断向量表
8 个中断向量
0x00 复位中断 SVC特权模式
0x04 未定义指令中断
0x08 软中断SWI SVC特权模式
0x0C 指令预取终止中断
0x10 数据访问终止中断
0x14 未使用
0x18 IRQ 中断
0x1C FIQ 中断
外部所有的中断都会触发 IRQ 中断,
中断向量表需要自己写
GIC 中断控制器,
需要两个中断函数,一个IRQ,然后判断具体的中断来源。
最后更新于