📄 vhandler.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 + -