fhqmc 发表于 2007-2-11 19:54:17

不明白ARM的伪中断问题

看资料上的说明:

如果在执行禁能中断指令时内核接收到中断请求,ARM7 系列器件仍然响应中断。这种

情况出现在IRQ 和FIQ 中断中。

例如,假设正在执行下面的代码:

MRS r0, cpsr

ORR r0, r0, # I_Bit : OR : F_Bit ;禁止IRQ 和FIQ 中断

MSR cpsr_c, r0

如果在执行MSR 指令时接收到IRQ 中断,则执行以下操作:

􀁺 1 保存IRQ 中断

􀁺2 执行MSR cpsr , r0 指令来完成CPSR 中I 位和F 位的设置

􀁺3 响应IRQ 中断,因为CPSR 的I 位被置位前内核将对中断异常进行处理

􀁺 4 CPSR(I 位和F 位已被置位)的内容移入SPSR_IRQ





---------------------------

这段是不是说,发生了伪中断,那么,SPSR的I 和F都被置位,那么从IRQ中断返回时,用SPSR恢复CPSR时,I和F位都将被置位,也就是禁止了IRQ和FIQ中断,但是看解决办法三个都没有说明如何防止IRQ中断被误禁止的问题啊。

还有不明白的是:

资料中提到的解决办法:

方案2:分别使用两条写CPSR 的指令来禁能IRQ 和FIQ

MRS r0 , cpsr

ORR r0 , r0 , # I_Bit ;禁止IRQ

MSR cpsr_c , r0

ORR r0 , r0 , # F_Bit ;禁止FIQ

MSR cpsr_c , r0



这种办法虽然可以防止SPSR的F位被置位的问题,但是并不能防止SPSR的I被置位的问题啊。

kspcb000 发表于 2008-5-18 17:30:52

专业生产电路板

imjacob 发表于 2012-4-13 10:53:43

不懂,求高人解答
页: [1]
查看完整版本: 不明白ARM的伪中断问题