M3中断向量表与A7中断向量表对比

最近学习了Cortex A7内核的中断,发现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家庭的,但是这一点有本质的区别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值