
1
请求中断
当某一中断源需要CPU为其进行中断服务时,就输出中断请求信号,使中断控制系统的中断请求触发器置位,向CPU请求中断。系统要求中断请求信号一直保持到CPU对其进行中断响应为止。
2
中断响应
CPU对系统内部中断源提出的中断请求必须响应,而且自动取得中断服务子程序的入口地址,执行中断 服务子程序。对于外部中断,CPU在执行当前指令的最后一个时钟周期去查询INTR引脚,若查询到中断请求信号有效,同时在系统开中断(即IF=1)的情 况下,CPU向发出中断请求的外设回送一个低电平有效的中断应答信号,作为对中断请求INTR的应答,系统自动进入中断响应周期。
3.
关闭中断
CPU响应中断后,输出中断响应信号,自动将状态标志寄存器FR或EFR的内容压入堆栈保护起来,然后将FR或EFR中的中断标志位IF与陷阱标志位TF清零,从而自动关闭外部硬件中断。因为CPU刚进入中断时要保护现场,主要涉及堆栈 *** 作,此时不能再响应中断,否则将造成系统混乱。
4.
保护断点
保护断点就是将CS和IP/EIP的当前内容压入堆栈保存,以便中断处理完毕后能返回被中断的原程序继续执行,这一过程也是由CPU自动完成。
5.
中断源识别
当系统中有多个中断源时,一旦有中断请求,CPU必须确定是哪一个中断源提出的中断请求,并由中断控制器给出中断服务子程序的入口地址,装入CS与IP/EIP两个寄存器。CPU转入相应的中断服务子程序开始执行。
6.
保护现场
主程序和中断服务子程序都要使用CPU内部寄存器等资源,为使中断处理程序不破坏主程序中寄存器的内容,应先将断点处各寄存器的内容压入堆栈保护起来,再进入的中断处理。现场保护是由用户使用PUSH指令来实现的。
7.
中断服务
中断服务是执行中断的主体部分,不同的中断请求,有各自不同的中断服务内容,需要根据中断源所要完成的功能,事先编写相应的中断服务子程序存入内存,等待中断请求响应后调用执行。
8
恢复现场
当中断处理完毕后,用户通过POP指令将保存在堆栈中的各个寄存器的内容d出,即恢复主程序断点处寄存器的原值。
9
中断返回
在中断服务子程序的最后要安排一条中断返回指令IRET,执行该指令,系统自动将堆栈内保存的 IP/EIP和CS值d出,从而恢复主程序断点处的地址值,同时还自动恢复标志寄存器FR或EFR的内容,使CPU转到被中断的程序中继续执行。
冯诺依曼结构的意思是程序指令存储器和数据存储器合并在一起的存储,也就是说在取指令的时候不能同时 *** 作数据区。不论什么结构,ram和rom都是统一编址的,裸奔不需要从rom中取出指令放在ram中。
从rom中取出指令放在ram的情况是开放式 *** 作系统需要运行外来应用程序,cpu的应用程序入口只有一个,而应用程序的地址不固定(可能放在rom中有地址,放在sd卡中连地址都说不上,只能说路径),这就需要把应用程序加载到cpu的程序入口处,能加载程序的只有RAM(ROM不可写),这样把ram放在cpu程序入口的地址上,这也就出现了程序运行需要从ROM中copy到RAM中的现象。
PS:具体细节请查阅MMU及ARM920T手册。
N
EQU
5
;定义N
代表5
AREA
Adding,
CODE,
READONLY
;定义段名Adding
读代码段
ENTRY
;指定程序入口
MOV
R0,#0
;
立即数0加载
R0
MOV指令
能加载8位立即数
MOV
R1,#1
;
立即数1加载
R1
#代表
立即数
REPEAT
;
设置标号
ADD
R0,R0,R1
;
R0
R1项加并存储
R0
ADD
R1,R1,#1
;;
R1
立即数1项加并存储
R1
CMP
R1,#N
;比较R1
立即数N
N前面定义代表5;
BLE
REPEAT
;
相等跳转
标号REPEAT
相等继续往
执行
LDR
R2,=RESULT
;加载表RESULT
址
R2
STR
R0,[R2]
;
R0存储
R2指向
表
HERE
B
HERE
;
B
条件跳转
标号HERE
AREA
DataSpace,
DATA,
READWRITE
;定义段名DataSpace
读写数据段
RESULT
DCD
0;定义表
END
;程序结束
以上就是关于简述ARM对异常中断的处理过程全部的内容,包括:简述ARM对异常中断的处理过程、arm7是冯诺依曼结构,那复位芯片后,哪里的代码负载把程序从ROM搬到RAM中运行、帮忙解释一下这段ARM汇编程序代码,谢谢!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)