isr.asm

来自「台湾凌阳单片机SPCE061A单芯片做的一个带按健LCD显示」· 汇编 代码 · 共 115 行

ASM
115
字号
//====================================================================================//
// 文件名:    isr.asm
// 描  述:   该文件的程序主要用于处理SPCE061A的所有中断
// 日  期:   2003/04/03
//====================================================================================//
.public _BREAK 
.public _FIQ 
.public _IRQ0 
.public _IRQ1 
.public _IRQ2 
.public _IRQ3 
.public _IRQ4 
.public _IRQ6 
.public _IRQ7 

.include hardware.inc  
.include	A2000.inc
.include	Resource.inc 
.external _F_USB_Isr
.external _F_Interrupt_Off
.external _F_Interrupt_On
.TEXT

_FIQ:
	PUSH	R1,R4 to [sp];
	R1 = 0x2000;
	test R1,[P_INT_Ctrl];
	jnz L_FIQ_TimerA;
	R1 = 0x0800;
	test R1,[P_INT_Ctrl];
	jnz L_FIQ_TimerB;
L_FIQ_PWM:
	R1 = C_FIQ_PWM;
	[P_INT_Clear] = R1;
	POP R1,R4 from[sp];
	reti;
L_FIQ_TimerA:
	[P_INT_Clear] = R1;
	call F_FIQ_Service_SACM_A2000;
	 R1 = 0x0001;
    [P_Watchdog_Clear] = R1;
	pop R1,R4 from [sp];
	reti;
L_FIQ_TimerB:
	[P_INT_Clear]=R1;
	pop R1,R4 from [sp];
	RETI;
_BREAK:        
        push R1,R4 to [sp];
        pop R1,R4 from [sp];
        reti;          
// ---------------------------------------------------------------------------
_IRQ0:        
        push R1,R4 to [sp];
        pop R1,R4 from [sp]; 
        reti;          
// ---------------------------------------------------------------------------
_IRQ1:        
		push R1,R4 to [sp]; 
        pop R1,R4 from [sp]; 
        reti;   
// ---------------------------------------------------------------------------
_IRQ2:        
        push R1,R4 to [sp]; 
        pop R1,R4 from [sp]; 
        reti;         
// ---------------------------------------------------------------------------
_IRQ3:        
   		push R1,R5 to [sp];		//压栈保护 
   		R1=0x0100; 	    
   		test R1,[P_INT_Ctrl]; 	//比较是否为IRQ3_EXT1	 
   		jnz  irq3_ext1;			//是,则转至对应程序段;
   		R1=0x0200; 	    
   		test R1,[P_INT_Ctrl]; 	//否,则比较是否为IRQ3_EXT2
   		jnz  irq3_ext2;			//是,则转至对应程序段;
 
irq3_key:		     			//否,则进入键唤醒中断
		R1=0x0080;	     
		[P_INT_Clear]=R1; 
    	jmp ExitIrq3;
irq3_ext2:	
    	R1=0x0200; 	     
    	[P_INT_Clear]=R1; 
    	jmp ExitIrq3;
irq3_ext1:
   		int off;
   		R1=0x0100; 	     
   		[P_INT_Clear]=R1; 
		R1=0x0001;
		[P_Watchdog_Clear]=R1;
   		call _F_USB_Isr;       //调用PDIUSBD12中断处理函数
   		int irq;
ExitIrq3:
   		pop R1,R5 from [sp]; 
   		reti;          
// ---------------------------------------------------------------------------
_IRQ4:        
        push R1,R4 to [sp]; 
        pop R1,R4 from [sp]; 
        reti;   
// ---------------------------------------------------------------------------

// ---------------------------------------------------------------------------
_IRQ6:        
        push R1,R4 to [sp]; 
        pop R1,R4 from [sp]; 
        reti;          
// ---------------------------------------------------------------------------
_IRQ7:        
        push R1,R4 to [sp]; 
        pop R1,R4 from [sp]; 
        reti;          
// ---------------------------------------------------------------------------
        

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?