⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vhandler.src

📁 SH3
💻 SRC
字号:
;------------------------------------------------------------------------
;                                                                       |
;   FILE        :vhandler.src                                           |
;   DATE        :Wed, Oct 25, 2006                                      |
;   DESCRIPTION :Reset/Interrupt Handler                                |
;   CPU TYPE    :SH7709S                                                |
;                                                                       |
;   This file is generated by Renesas Project Generator (Ver.3.1).      |
;                                                                       |
;------------------------------------------------------------------------
                  


		.include	"env.inc"
		.include	"vect.inc"

IMASKclr:	.equ	H'FFFFFF0F
RBBLclr:	.equ	H'CFFFFFFF
MDRBBLset:	.equ	H'70000000

		.import		_RESET_Vectors
		.import		_INT_Vectors
		.import		_INT_MASK
	  	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;*             macro definition                                *;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                .macro PUSH_EXP_BASE_REG
        stc.l   ssr,@-r15               ; save ssr
        stc.l   spc,@-r15               ; save spc
        sts.l   pr,@-r15                ; save context registers
        stc.l   r7_bank,@-r15
        stc.l   r6_bank,@-r15
        stc.l   r5_bank,@-r15
        stc.l   r4_bank,@-r15
        stc.l   r3_bank,@-r15
        stc.l   r2_bank,@-r15
        stc.l   r1_bank,@-r15
        stc.l   r0_bank,@-r15
                .endm
;
                .macro POP_EXP_BASE_REG
        ldc.l   @r15+,r0_bank           ; recover registers
        ldc.l   @r15+,r1_bank
        ldc.l   @r15+,r2_bank
        ldc.l   @r15+,r3_bank
        ldc.l   @r15+,r4_bank
        ldc.l   @r15+,r5_bank
        ldc.l   @r15+,r6_bank
        ldc.l   @r15+,r7_bank
        lds.l   @r15+,pr
        ldc.l   @r15+,spc
        ldc.l   @r15+,ssr
                .endm
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;		reset						 							;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
		.section 	RSTHandler,code
_ResetHandler:
				mov.l	#EXPEVT,r0
				mov.l	@r0,r0
				shlr2	r0
				shlr	r0
				mov.l	#_RESET_Vectors,r1
				add		r1,r0
				mov.l	@r0,r0
				jmp		@r0
				nop
;						
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;		exceptional interrupt		 							;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
		.section	INTHandler,code
		.export		_INTHandlerPRG
_INTHandlerPRG:
_ExpHandler:
				PUSH_EXP_BASE_REG
;				
				mov.l	#EXPEVT,r0			; set event address
				mov.l	@r0,r1				; set exception code
				mov.l	#_INT_Vectors,r0	; set vector table address
				add		#-(h'40),r1			; exception code - h'40
				shlr2	r1
				shlr	r1
				mov.l	@(r0,r1),r3			; set interrupt function addr
;
				mov.l	#_INT_MASK,r0		; interrupt mask table addr
				shlr2	r1
				mov.b	@(r0,r1),r1			; interrupt mask
				extu.b	r1,r1
;
				stc		sr,r0				; save sr
				mov.l	#(RBBLclr&IMASKclr),r2		; RB,BL,mask clear data
				and		r2,r0				; clear mask data
				or		r1,r0				; set interrupt mask
				ldc		r0,ssr				; set current status
;
				ldc.l	r3,spc
				mov.l	#__int_term,r0		; set interrupt terminate
				lds		r0,pr
;
				rte
				nop
;
				.pool
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;		Interrupt terminate										;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				.align	4
__int_term:
				mov.l   #MDRBBLset,r0 	; set MD,BL,RB
				ldc.l	r0,sr				; 
				POP_EXP_BASE_REG
				rte					; return
				nop
;
				.pool
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;		TLB miss interrupt										;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
		.org	H'300
_TLBmissHandler:
				PUSH_EXP_BASE_REG
;				
				mov.l	#EXPEVT,r0			; set event address
				mov.l	@r0,r1				; set exception code
				mov.l	#_INT_Vectors,r0	; set vector table address
				add		#-(h'40),r1			; exception code - h'40
				shlr2	r1
				shlr	r1
				mov.l	@(r0,r1),r3			; set interrupt function addr
;
				mov.l	#_INT_MASK,r0		; interrupt mask table addr
				shlr2	r1
				mov.b	@(r0,r1),r1			; interrupt mask
				extu.b	r1,r1
;
				stc		sr,r0				; save sr
				mov.l	#(RBBLclr&IMASKclr),r2		; RB,BL,mask clear data
				and		r2,r0				; clear mask data
				or		r1,r0				; set interrupt mask
				ldc		r0,ssr				; set current status
;
				ldc.l	r3,spc
				mov.l	#__int_term,r0		; set interrupt terminate
				lds		r0,pr
;
				rte
				nop
;
				.pool
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;		IRQ														;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
		.org	H'500
_IRQHandler:
				PUSH_EXP_BASE_REG
;				
				mov.l	#INTEVT,r0			; set event address
				mov.l	@r0,r1				; set exception code
				mov.l	#_INT_Vectors,r0	; set vector table address
				add		#-(h'40),r1			; exception code - h'40
				shlr2	r1
				shlr	r1
				mov.l	@(r0,r1),r3			; set interrupt function addr
;
				mov.l	#_INT_MASK,r0		; interrupt mask table addr
				shlr2	r1
				mov.b	@(r0,r1),r1			; interrupt mask
				extu.b	r1,r1
;
				stc		sr,r0				; save sr
				mov.l	#(RBBLclr&IMASKclr),r2		; RB,BL,mask clear data
				and		r2,r0				; clear mask data
				or		r1,r0				; set interrupt mask
				ldc		r0,ssr				; set current status
;
				ldc.l	r3,spc
				mov.l	#__int_term,r0		; set interrupt terminate
				lds		r0,pr
;
				rte
				nop

;;;;;;;无条件陷阱程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;export大写和小写两种写法都可正常运行
;		.EXPORT	  	_trasm
		.export	  	_trasm
		.ALIGN 		4
_trasm:
		TRAPA	#3
		NOP

				.pool
				.end

⌨️ 快捷键说明

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