arm7驱动感应器

源代码在线查看: irq.s

软件大小: 96 K
上传用户: foxfsk
关键词: arm7 驱动 感应器
下载地址: 免注册下载 普通下载 VIP

相关代码

				
				;/*******************************************************************************************************
				;* 文件名:IRQ.s
				;* 功  能:管理中断嵌套,可通过宏实现,在一般情况下无须用到。
				;* 作  者:POWER
				;* 日  期:2006年5月25号
				;* 斯凯科技主页:www.armsky.net
				;* 斯凯科技论坛:www.armsky.net/bbs
				;********************************************************************************************************/
				
				
				NoInt       EQU 0x80                             ;// Bit7,I位                   
				
				USR32Mode   EQU 0x10                             ;// M[4:0]=10000,用户模式 
				SVC32Mode   EQU 0x13                             ;// M[4:0]=10011,管理模式 
				SYS32Mode   EQU 0x1f                             ;// M[4:0]=11111,系统模式
				IRQ32Mode   EQU 0x12                             ;// M[4:0]=10010,IRQ中断模式
				FIQ32Mode   EQU 0x11                             ;// M[4:0]=10001,FIQ中断模式
				
				    CODE32
				
				    AREA    IRQ,CODE,READONLY
				
				    MACRO
				$IRQ_Label HANDLER $IRQ_Exception_Function
				
				        EXPORT  $IRQ_Label                       ;// 输出的标号
				        IMPORT  $IRQ_Exception_Function          ;// 引用的外部标号
				
				$IRQ_Label
				        SUB     LR, LR, #4                       ;// 计算返回地址
				        STMFD   SP!, {R0-R3, R12, LR}            ;// 保存任务环境
				        MRS     R3, SPSR                         ;// 保存状态
				        STMFD   SP, {R3,LR}^                     ;// 保存SPSR和用户状态的SP,注意不能回写
				                                                 ;// 如果回写的是用户的SP,所以后面要调整SP
				        NOP
				        SUB     SP, SP, #4*2
				
				        MSR     CPSR_c, #(NoInt | SYS32Mode)     ;// 切换到系统模式 
				       
				        BL      $IRQ_Exception_Function          ;// 调用c语言的中断处理程序
				
				        MSR     CPSR_c, #(NoInt | IRQ32Mode)     ;// 切换回irq模式
				        LDMFD   SP, {R3,LR}^                     ;// 恢复SPSR和用户状态的SP,注意不能回写
				                                                 ;// 如果回写的是用户的SP,所以后面要调整SP
				        MSR     SPSR_cxsf, R3
				        ADD     SP, SP, #4*2                    
				
				        LDMFD   SP!, {R0-R3, R12, PC}^          
				    MEND
				
				;/* 以下添加中断句柄,用户根据实际情况改变 */
				
				;// 例如:Timer0_Handler  HANDLER Timer0
				
				    END
				
							

相关资源