isr.asm

来自「该软件为在sunplus的61单片机上实现的mp3播放器.里面有完整的源代码.」· 汇编 代码 · 共 132 行

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

.external _KeyEvent
.include .\spce061\061reg.inc   
.TEXT

_FIQ:                  
		push R1,R4 to [sp];                
        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]; 
		call _KeyEvent
        R1=0x0400;	     
		[P_INT_Clear]=R1; 		
        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=0x0001;
		[P_Watchdog_Clear]=R1;
		R1=0x0080;	     
		[P_INT_Clear]=R1; 
    	jmp ExitIrq3;
irq3_ext1:	
    	R1=0x0100; 	     
    	[P_INT_Clear]=R1; 
    	jmp ExitIrq3;
irq3_ext2:
   		int off;
   		R1=0x0200; 	     
   		[P_INT_Clear]=R1; 
		R1=0x0001;
		[P_Watchdog_Clear]=R1;
   		int irq;
ExitIrq3:
   		pop R1,R5 from [sp]; 
   		reti;          
// ---------------------------------------------------------------------------
_IRQ4:        
        push R1,R5 to [sp];
   		R1=0x0010; 
   		test R1,[P_INT_Ctrl];
   		jnz IRQ4_1KHz
   		R1=0x0020;
   		test R1,[P_INT_Ctrl]
   		jnz IRQ4_2KHz
IRQ4_4KHz:
		r1=0x0040
		[P_INT_Clear]=r1
		jmp	Exit_IRQ4	   		
IRQ4_2KHz:
		r1=0x0020
		[P_INT_Clear]=r1
   		jmp Exit_IRQ4
IRQ4_1KHz:
   		r1=0x0010
   		[P_INT_Clear]=r1
Exit_IRQ4:		         
        pop R1,R5 from [sp]; 
        reti;   
// ---------------------------------------------------------------------------
_IRQ5:        
        push R1,R5 to [sp]
   		R1=0x0004; 	    
   		test R1,[P_INT_Ctrl]; 		//比较是否为IRQ5_2Hz	 
   		jnz  IRQ5_2Hz;				//是,则转至对应程序段;
IRQ5_4Hz:
		r1=0x0008;		
		[P_INT_Clear]=r1;
		R1=0x0001;
		[P_Watchdog_Clear]=R1;
		jmp Exit_IRQ5; 		
IRQ5_2Hz:
		r1=0x0004;
		[P_INT_Clear]=r1;  		   		
Exit_IRQ5:   		          
        pop R1,R5 from [sp] 
        reti          
// ---------------------------------------------------------------------------
_IRQ6:        
        push R1,R5 to [sp]; 	        
        pop R1,R5 from [sp]; 
        reti;          
// ---------------------------------------------------------------------------
_IRQ7:        
        push R1,R4 to [sp]; 
        pop R1,R4 from [sp]; 
        reti;          
// ---------------------------------------------------------------------------
        

⌨️ 快捷键说明

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