打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
矢量中断

 某个中断源产生中断时,由硬件直接跳到中断服务程序的入口(有些cpu,如s3c440box内部有外部中断的中断向量表,因而支持矢量中断,而S3C2440等没有硬件向量表,不支持矢量中断。固定中断向量表中装的不是中断或异常服务程序的入口地址,而是一条转到异常或中断处理程序的转移指令

硬件中断向量表

软件中断向量表:在ram区的_ISR_STARTADDRESS处开辟一段空间,设置一张软件设定的中断向量表,用来存放中断和异常的服务程序入口地址。

 

 

非矢量中断

产生中断源时,先跳到一个总入口,再有软件查询中断挂起寄存器判断是哪个中断源,然后跳到入口服务程序。例如;arm接受到中断控制器的IRQ请求,cpu响应中断后,将在中断服务寄存器的对应位置位,cpu转到0x18处执行。在0x18处,放置一条转移指令:

B ISR_IRQ

ISR_IRQ为中断服务程序的总入口地址,也是非矢量中断模式的中断源判别及散转程序。在ISR_IRQ中通过查询中断服务寄存器的对应位判别出中断源,然后转至对应的中断服务程序。

ISR_IRQ:

STMDB R13!,{R0-R8,R12,R14}  ;保护现场(进入异常时已自动将断点保存到LR)

此处的R14用于异常返回

BL IRQ                         ; 此处的R14用于子程序返回

LDMIA R13!,{ R0-R8,R12,R14};恢复现场

SUBS PC,R14,#4;返回中断断点处继续执行(CPSR 也自动恢复)

IRQ:

SUB SP,SP,#4;腾出一个字以存放中断服务程序入口地址

STMFD SP!,{R8-R9};

LDR R9,=I_ISPR;中断服务寄存器地址送到R9  I_ISPR EQU 0X????????

LDR R9,[R9];ISPR 的内容送r9

MOV R8,#0;设置r8为地址偏移量,并初始化为0

10:          MOVS R9,R9,LSR #1;R9左移一位,移除位送到C

BCS 11

ADD R8,R8,#4

B 10

11:              LDR R9,=HANDLEADC;找到了,软件中断向量表的首项中的地址送R9

; HANDLEADC EQU _ISR_STARTADDRESS+4*8

ADD R9,R9,R8

LDR R9,[R9];将相应的中断服务程序入口地址送R9

STR R9,[SP,#8];中断服务程序入口入棧

LDMFD SP! ,{R8-R9,PC};转向执行中断服务程序

中断服务程序运行完毕,则返回到标记出,回到原来断点继续执行(中断服务程序中已经完成了返回到BL后一条指令的操作)相当于发生了两级跳转!

 

 

 

 

 

如果采用向量中断模式,cpu发生异常或响应或中断源后,将转到硬件固有中断向量表,自动转入相应的一次或中断向量地址处执行。以ENIT 4567为例

0x30:LDR PC,=HANDLERENT4567

............

HANDLERENT4567:

HANDLER HANDLEEINT4567; HANDLEEINT4567为软件设定的中断向量中中断入口的地址标号

HANDLER 宏的作用:将HANDLEEINT4567的内容赋给PC

MACRO HANDLER HANDLELABEL

SUB SP,SP,#4

STMFD SP!,{R0}

LDR R0,=HANDLELABEL

LDR R0,[R0]

STR R0,[SP,#4]

LDMFD SP!,{R0,PC}

ENDM

 

中断及异常的响应过程

程序装在ROM中断中断和异常相应情况:

对于简单的应用系统,通常将初始化和应用程序下载在0x0处,即在ROM或flash中,在硬件固定向量表中断对应位置放置转移指令,转到相应异常或中断服务程序进行处理。

由于RAM区程序执行速度快,而且可以修改,所以对于大多数系统和复杂程序,通常将具体的异常或中断处理程序下载到RAM区执行。

 

程序装在高端RAM中断中断或异常响应

(1)       软件实现地址映射

若程序下载到高端RAM,当异常中断发生时,S3C440B0X自动转到硬件固定向量表的歌地址处,所以需要在0x0开始的区域放置一个bootloader,它主要完成系统硬件初始化和地址映射工作。地址映射包含两部分,首先完成从0x0开始的固定向量表到0x0c000000(ram起始区,不同的系统不同)的转移,然后应用程序中的Isr_Init()函数完成到代码下载区RAM处的向量转移。

Bootloader地址映射:

在硬件固定表的各向量地址处放指令:ldr pc,=0x0000??,实现0x0000??->0x0c0000??的映射。

注意:若IRQ异常采用非向量模式,在开始地址区不必进行中断源的映射;复位异常发生,硬件初始化后,直接映射到代码下载区的0x0c008000处,并执行应用系统初始化。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
44B0 中断分析(一)
ARM中断处理过程
中断体系结构
S3C44B0的向量中断模式概念
ARM汇编 -- 嵌入式学习博客
启动代码和中断处理过程
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服