[ZLG-ARM] 请教smartarm2200有关问题

[复制链接]
1948|0
 楼主| 南京土著人 发表于 2007-5-16 11:11 | 显示全部楼层 |阅读模式
<br />在LPC2200工程模板中,有IRQ.S的程序。<br />程序如下:<br /><br />NoInt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;0x80<br /><br />USR32Mode&nbsp;&nbsp;&nbsp;EQU&nbsp;0x10<br />SVC32Mode&nbsp;&nbsp;&nbsp;EQU&nbsp;0x13<br />SYS32Mode&nbsp;&nbsp;&nbsp;EQU&nbsp;0x1f<br />IRQ32Mode&nbsp;&nbsp;&nbsp;EQU&nbsp;0x12<br />FIQ32Mode&nbsp;&nbsp;&nbsp;EQU&nbsp;0x11<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;CODE32<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;AREA&nbsp;&nbsp;&nbsp;&nbsp;IRQ,CODE,READONLY<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;MACRO<br />$IRQ_Label&nbsp;HANDLER&nbsp;$IRQ_Exception_Function<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EXPORT&nbsp;&nbsp;$IRQ_Label&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;The&nbsp;label&nbsp;for&nbsp;exports&nbsp;输出的标号<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;$IRQ_Exception_Function&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;The&nbsp;imported&nbsp;labels&nbsp;引用的外部标号<br /><br />$IRQ_Label<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SUB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LR,&nbsp;LR,&nbsp;#4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Calculate&nbsp;the&nbsp;returning&nbsp;address&nbsp;计算返回地址<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STMFD&nbsp;&nbsp;&nbsp;SP!,&nbsp;{R0-R3,&nbsp;R12,&nbsp;LR}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Protects&nbsp;the&nbsp;task&nbsp;environments&nbsp;保存任务环境<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MRS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R3,&nbsp;SPSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Protects&nbsp;the&nbsp;status&nbsp;variable&nbsp;保存状态<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STMFD&nbsp;&nbsp;&nbsp;SP,&nbsp;{R3,LR}^&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Protects&nbsp;SPSR&nbsp;and&nbsp;SP&nbsp;in&nbsp;user&nbsp;status,&nbsp;Notice:&nbsp;DO&nbsp;NOT&nbsp;write&nbsp;back.保存SPSR和用户状态的SP,注意不能回写<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;If&nbsp;the&nbsp;SP&nbsp;is&nbsp;written&nbsp;back,&nbsp;it&nbsp;should&nbsp;be&nbsp;adjusted&nbsp;to&nbsp;its&nbsp;appropriate&nbsp;value&nbsp;later.如果回写的是用户的SP,所以后面要调整SP<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NOP<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SUB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SP,&nbsp;SP,&nbsp;#4*2<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPSR_c,&nbsp;#(NoInt&nbsp;|&nbsp;SYS32Mode)&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Switch&nbsp;to&nbsp;the&nbsp;System&nbsp;Mode&nbsp;切换到系统模式&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$IRQ_Exception_Function&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;call&nbsp;the&nbsp;C&nbsp;interrupt&nbsp;handler&nbsp;funtion&nbsp;调用c语言的中断处理程序<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPSR_c,&nbsp;#(NoInt&nbsp;|&nbsp;IRQ32Mode)&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Switch&nbsp;bak&nbsp;to&nbsp;IRQ&nbsp;mode&nbsp;切换回irq模式<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDMFD&nbsp;&nbsp;&nbsp;SP,&nbsp;{R3,LR}^&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Recover&nbsp;SPSR&nbsp;and&nbsp;SP&nbsp;in&nbsp;user&nbsp;status,&nbsp;Notic:&nbsp;DO&nbsp;NOT&nbsp;write&nbsp;back.&nbsp;恢复SPSR和用户状态的SP,注意不能回写<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;If&nbsp;the&nbsp;SP&nbsp;is&nbsp;written&nbsp;back,&nbsp;it&nbsp;should&nbsp;be&nbsp;adjusted&nbsp;to&nbsp;its&nbsp;appropriate&nbsp;value&nbsp;later.如果回写的是用户的SP,所以后面要调整SP<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPSR_cxsf,&nbsp;R3<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SP,&nbsp;SP,&nbsp;#4*2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDMFD&nbsp;&nbsp;&nbsp;SP!,&nbsp;{R0-R3,&nbsp;R12,&nbsp;PC}^&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;MEND<br /><br /><br />我就是不太清楚其中的:<br />SUB&nbsp;SP,SP,#4*2是什么意思?<br />在这句之前不是有个STMFD&nbsp;&nbsp;&nbsp;SP,&nbsp;{R3,LR}^,它是满递减的,如果用SUB&nbsp;SP,SP,#4*2的话,不是SP指向一个空的地方吗?<br /><br />再后面LDMFD&nbsp;&nbsp;&nbsp;SP,&nbsp;{R3,LR}^,能得到之前保存的状态信息吗?<br /><br />希望高人指教!谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

11

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部