No.43269 作者:MICKEYMOUSE 邮件:zhanghf@embedinfo.com ID:104569 登陆:13次 文章数:28篇 最后登陆IP:183.38.85.6 最后登陆:2011/6/29 15:33:54 注册:2008/4/1 15:50:28 财富:301 发帖时间:2008/5/13 9:11:25 发贴者IP:218.17.61.134 标题:MICKEYMOUSE:KEIL写IRQ握手函数的问题[注意] 摘要:No.43269KEIL写IRQ握手函数的问题[注意] ?当ARM响应IRQ中断的时候,会自动将LR中存放返回地址,并将CPSR复制到相应中断模式下的SPSR中,这些应该都是ARM处理器自动完成的对吗?而且ARM退出中断的时候,复制相应SPSR到CPSR中,也应该是硬件完成的吧? 但是用KEIL下—irq关键字声明的中断函数,我在看汇编的时候,发现中断处理函数只将R0-R6 还有LR进行了压栈,并没有将刚进入中断后的SPSR进行压栈,这样,中断处理函数就有可能在运行过程中更改了SPSR的某些值,而更改后的SPSR在退出中断的时候,重新复制到CPSR,这样很可能会造成当前被打断的程序打断时的CPSR与中断结束后从SPSR复制回CPSR的两个值不同而无法在中断后正常工作啊。 比如我声明的中断握手函数是:__irq void IRQ_Handler (void) 生成的汇编代码是 STMDB R13!,{ ......
>>返回讨论的主题
|