在线时间4067 小时
UID3441752
注册时间2017-11-21
NXP金币759444
TA的每日心情 | 开心 2024-3-26 15:16 |
---|
签到天数: 266 天 [LV.8]以坛为家I
管理员
- 积分
- 32017
- 最后登录
- 2024-4-9
|
Cortex-M3和A7中断向量表对比 最近学习了Cortex A7内核的i.MX6ULL的中断部分,发现A7的中断向量表和M3的向量表不太一样。
第一点:
A7的中断向量表内容很少,只有8个中断向量。而M3的中断向量表内容很多,存放了每个外部中断。这其实是因为A7有FIQ或IRQ,当某一外设产生中断时首先进入FIQ或IRQ中断服务函数,然后软件再来识别具体是哪一个中断发生了。A7需要软件进一步识别才能执行具体中断服务函数,而M3硬件直接识别到了具体的中断服务函数。
第二点:
在以前接触的M3,M0,M4等内核单片机中,中断向量表都是通过汇编一个数据段,然后使用DCD指令把各个中断服务函数的入口地址填充到这个数据段。
- Vector Table Mapped to Address 0 at Reset
- AREA RESET, DATA, READONLY
- EXPORT __Vectors
- EXPORT __Vectors_End
- EXPORT __Vectors_Size
- __Vectors DCD __initial_sp ; Top of Stack
- DCD Reset_Handler ; Reset Handler
- DCD NMI_Handler ; NMI Handler
- DCD HardFault_Handler ; Hard Fault Handler
- DCD MemManage_Handler ; MPU Fault Handler
- DCD BusFault_Handler ; Bus Fault Handler
- DCD UsageFault_Handler ; Usage Fault Handler
- DCD 0 ; Reserved
- DCD 0 ; Reserved
- DCD 0 ; Reserved
- DCD 0 ; Reserved
- DCD SVC_Handler ; SVCall Handler
- DCD DebugMon_Handler ; Debug Monitor Handler
- DCD 0 ; Reserved
- DCD PendSV_Handler ; PendSV Handler
- DCD SysTick_Handler ; SysTick Handler
- ; External Interrupts
- DCD WWDG_IRQHandler ; Window Watchdog
- DCD PVD_IRQHandler ; PVD through EXTI Line detect
复制代码 而现在接触的A7中断向量表是通过跳转指令填充的。如下。
- _start:
- ldr pc, =Reset_Handler
- ldr pc, =Undefined_Handler
- ldr pc, =SVC_Handler
- ldr pc, =PrefAbort_Handler
- ldr pc, =DataAbort_Handler
- ldr pc, =NotUsed_Handler
- ldr pc, =IRQ_Handler
- ldr pc, =FIQ_Handler
复制代码 此时我产生了一个疑问,M3的向量表能不能用跳转指令取而代之呢?亦或是A7的向量表能不能用中断服务函数的入口地址填充呢?经过一番折腾,是不行的。其实这在M3权威指南和A7编程参考手册有明确说明,如下。
M3的中断向量表:存放的是各个中断服务函数的入口地址。
A7的中断向量表:存放的是当中断发生时,响应对应中断服务函数的跳转指令。
虽然都是来自ARM家庭的,但是这一点有本质的区别。
|
|