ARM-CORE实现中断异常原理

以51单片机中断例程为例为例,如下图:

首先,MCU的启动文件(*.S)里面会定义异常向量表,当中断来临时,CPU触发异常跳转到异常向量表地址.而该地址存储的是跳转到中断处理程序指令:

如下图,异常向量表里面以及定义了串行口中断 异常地址0x0023H,而0x0023里面具体内容是LJMP UART0_ISP

当串口0产生中断后,触发CPU跳转到0x0023,在执行跳转函数,进而执行uart0的中断处理函数UART0_ISR(void)函数

2.ARM的异常有哪些:

ARMV7上:ARM异常有RESET,swi(系统调用),undef,prefetch,data abort,irq,fiq.其中RESET,swi是同步异常,其余是异步异常.

ARMV8上:ARM异常有serror,irq,fiq,synchronous,其中Synchronous是同步异常,seoor,irq,fiq是异步异常.

同步异常:软件触发行为,知道什么时候发生,

异步异常:软硬件行为,不知道什么时候发送,发生时间是随机的.

当异常发生时,ARM CORE跳转到异常向量地址(异常基地址+偏移地址)

 

3.Linux kernel下的arm32如何设置像量表基地址(VBAR)的?

在entry-armv.S中,软件中定义了像量表,_vectors_start是像量表基地址,vector_irq/vector_fiq是像量表中的offset

需要:1.将_vectors_start基地址写入到VBAR寄存器,  2.向量表中的offset要和arm文档中定义的一致.

在vmlinux.lds.S描述了_vectors_start的起始地址位置,从0xff0000开始

在nommu.c中,setup_vectors_base函数通过操作cp15协处理器j将定义在cp15.h中的CR_V(0xffff0000)来写入VBAR.

(其实就是地址开始处,空出64Kb地址给vector使用)

setup_vectors_base会在开机的时候被调用,从而实现VBAR的写入

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九月天-深圳专业软硬件开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值