×
单片机 > 单片机程序设计 > 详情

arm异常与中断

发布时间:2021-03-16 发布时间:
|

1 swi中断的处理步骤:

1) 进中断时pc->lr, cpsr->spsr, cpsr_mode置为特权模式,均由硬件完成。

2)注册中断向量表由软件完成,可以用B指令,也可以用ldr跟dcd表的方式,在中断向量处放置一条跳转指令,跳到中断处理handler处。

3)一级中断处理程序主要目的是根据arm或者thumb状态获取swi号,期间注意保存寄存器和返回。

4)二级中断处理程序可以用C或者汇编,主要是一个分支结构,根据中断号做相应的事,可以用函数指针方式实现。


-----应用程序中使用软中断时,可以使用__swi (仅armcc)关键字声明软中断函数,调用时自动获取中断号。


2 基于s3c2410的irq中断

先上个直接从芯片手册里截的图

前面的subsrcpnd srcpnd intpnd都是三星提供的sfr,是做到芯片里面的,它们的清零方式比较特殊,是对相应的位赋1,联想到外部中断的置一方式只能由外部事件驱动,所以这个也不难理解。


当中断被送到irq时处理步骤如下:

1 查跳到异常向量表0x18处,取一条跳转指令,跳转到一级irq中断处理函数中。

2 一级中断处理函数的任务是通过intoffset寄存器,查的中断源的偏移号,然后根据偏移号和基地址得到二级中断处理函数的地址,将此地址赋给pc,然后跳转到二级中断处理函数处。

3 二级中断处理函数可能还要查相应的寄存器,得到具体的中断源,然后进行相应的处理。

4 中断返回,因为进入中断时用户态的cpsr已经压入spsr中,所以可以直接用subs pc, lr, 4这种格式恢复。恢复原来的寄存器模式和状态。


to be continue。。。

关键字:arm异常  中断  swi中断 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM基础知识八