关于 44b0 向量中断的疑问
2008-01-22 13:23
239 查看
2007-12-25 09:11:35
s3c44b0的IRQ中断包括了向量中断模式和非向量中断模式,这两种模式只能取其一:即允许了向量中断,就不允许非向量中断。
根据三星的资料,提供向量中断模式主要是减少中断的延迟时间,提高其响应速度。其发生的过程是:如果ARM7TDMI从中断控制器收到IRQ中断,ARM7TDMI将在0X18处执行一条指令。那条分支指令将会修改PC的值为中断服务程序的入口地址,接着会跳到相应的中断服务程序。在此过程中,中断控制器将会产生跳到相应的向量中断入口地址的机器码,其产生的规则为:=0xea000000+((>destination address< - >vector address< -0x08)<<2.
而这个机器码通常是由编译器自动产生,因此用户不需要根据上述规则计算。
AREA Init,CODE,READONLY
ENTRY
ResetEntry
b ResetHandler ;for debug
b HandlerUndef ;handlerUndef
b HandlerSWI ;SWI interrupt handler
b HandlerPabort ;handlerPAbort
b HandlerDabort ;handlerDAbort
b . ;handlerReserved
b HandlerIRQ
b HandlerFIQ
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IMPORTANT NOTE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;If the H/W vectored interrutp mode is enabled, The above two instructions should be changed like below, to work-around with H/W bug of S3C44B0X interrupt controller.
b HandlerIRQ-(_RAM_STARTADDRESS+0x20);i+=4)
{
*((volatile unsigned *)i)=0xEA000000+0x1FFE;
}
该段程序的作用是装异常服务程序的入口地址吗,在开始的汇编程序中,我们已经做了这步操作,这个操作应该没什么意义吧,从C程序中装异常服务程序的入口地址应该根据0xea000000+((>destination address< - >vector address< -0x08)<<2进行,这点在ARM的用户手册中有详细的解释。
.综上所述:s3c44b0向量中断是由硬件自动完成的,还是因为它本身的硬件存在BUG,所以用软件要做一些必要的操作?不管了,先用非向量中断把程序跑起来再说吧,(后面有人在追着呢,用PHILPS的东东比这容易多了)等有时间把flash清掉,看是不是BIOS搞的鬼!
s3c44b0的IRQ中断包括了向量中断模式和非向量中断模式,这两种模式只能取其一:即允许了向量中断,就不允许非向量中断。
根据三星的资料,提供向量中断模式主要是减少中断的延迟时间,提高其响应速度。其发生的过程是:如果ARM7TDMI从中断控制器收到IRQ中断,ARM7TDMI将在0X18处执行一条指令。那条分支指令将会修改PC的值为中断服务程序的入口地址,接着会跳到相应的中断服务程序。在此过程中,中断控制器将会产生跳到相应的向量中断入口地址的机器码,其产生的规则为:=0xea000000+((>destination address< - >vector address< -0x08)<<2.
而这个机器码通常是由编译器自动产生,因此用户不需要根据上述规则计算。
AREA Init,CODE,READONLY
ENTRY
ResetEntry
b ResetHandler ;for debug
b HandlerUndef ;handlerUndef
b HandlerSWI ;SWI interrupt handler
b HandlerPabort ;handlerPAbort
b HandlerDabort ;handlerDAbort
b . ;handlerReserved
b HandlerIRQ
b HandlerFIQ
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IMPORTANT NOTE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;If the H/W vectored interrutp mode is enabled, The above two instructions should be changed like below, to work-around with H/W bug of S3C44B0X interrupt controller.
b HandlerIRQ-(_RAM_STARTADDRESS+0x20);i+=4)
{
*((volatile unsigned *)i)=0xEA000000+0x1FFE;
}
该段程序的作用是装异常服务程序的入口地址吗,在开始的汇编程序中,我们已经做了这步操作,这个操作应该没什么意义吧,从C程序中装异常服务程序的入口地址应该根据0xea000000+((>destination address< - >vector address< -0x08)<<2进行,这点在ARM的用户手册中有详细的解释。
.综上所述:s3c44b0向量中断是由硬件自动完成的,还是因为它本身的硬件存在BUG,所以用软件要做一些必要的操作?不管了,先用非向量中断把程序跑起来再说吧,(后面有人在追着呢,用PHILPS的东东比这容易多了)等有时间把flash清掉,看是不是BIOS搞的鬼!
相关文章推荐
- 关于 44b0 向量中断的疑问
- 【Java 并发】关于中断的几个疑问
- 关于ARM中断处理的问题----《ARM嵌入式系统开发-软件设计与优化》第九章中疑问
- 44B0的向量中断
- 关于44b0的中断调用的问题
- 关于向量中断和非向量中断的区别!
- [u-boot]关于star.s中“异常向量”的一个疑问
- 关于uCOS-II进出临界区时使用开关中断方式的疑问
- 关于ARM的中断--向量与非向量的区别噢
- 关于44b0中断
- 关于C51的IE(中断使能寄存器)的初级认识
- 关于蓝桥杯官网ADV-197 P1001试题分析与strlen函数疑问
- 关于时间中断的code
- 中断向量表就是中断向量的列表
- 关于取消的默认的Enter的keydown事件的疑问与解决
- 关于冒泡法,我有几个疑问
- STM32 (Cortex-M3) 中NVIC(嵌套向量中断控制)的理解
- 关于小米手机USB传输稍大点的文件老中断的问题解决方法!
- 关于动态数组和向量容器
- 【转帖】关于‘域’策略应用疑问经验