📄 startup.ms
字号:
;""FILE COMMENT"" ****************************************************
;* M32R C Programming Rev. 1.01
;* < Sample startup Program for 32170/32171/32174/32176 >
;*
;* Copyright (c) 2003 Renesas Technology Corporation
;* And Renesas Solutions Corporation
;* All Rights Reserved
;**********************************************************************
;
;****************************************
; EIT Vector Entry
;****************************************
;
.SECTION EITVECT, CODE, ALIGN=4
;
.EXPORT reset, EIT_reset, EIT_loop
;
reset:
BRA EIT_reset:24 ; H'0000 0000 Reset Interrupt (RI)
NOP
NOP
NOP
NOP
NOP
NOP
BRA EIT_loop:24 ; H'0000 0010 System Break Interrupt (SBI)
NOP
NOP
NOP
NOP
NOP
NOP
BRA EIT_loop:24 ; H'0000 0020 Reserved Instruction Exception (RIE)
NOP
NOP
NOP
NOP
NOP
NOP
BRA EIT_loop:24 ; H'0000 0030 Address Exception (AE)
NOP
NOP
NOP
NOP
NOP
NOP
BRA EIT_loop:24 ; H'0000 0040 Trap 0
BRA EIT_loop:24 ; H'0000 0044 Trap 1
BRA EIT_loop:24 ; H'0000 0048 Trap 2
BRA EIT_loop:24 ; H'0000 004C Trap 3
BRA EIT_loop:24 ; H'0000 0050 Trap 4
BRA EIT_loop:24 ; H'0000 0054 Trap 5
BRA EIT_loop:24 ; H'0000 0058 Trap 6
BRA EIT_loop:24 ; H'0000 005C Trap 7
BRA EIT_loop:24 ; H'0000 0060 Trap 8
BRA EIT_loop:24 ; H'0000 0064 Trap 9
BRA EIT_loop:24 ; H'0000 0068 Trap 10
BRA EIT_loop:24 ; H'0000 006C Trap 11
BRA EIT_loop:24 ; H'0000 0070 Trap 12
BRA EIT_loop:24 ; H'0000 0074 Trap 13
BRA EIT_loop:24 ; H'0000 0078 Trap 14
BRA EIT_loop:24 ; H'0000 007C Trap 15
BRA EIT_ei:24 ; H'0000 0080 External Interrupt (EI)
;
.SECTION PROTECTID, DATA, ALIGN=1
.DATA.B H'FF,H'FF,H'FF,H'FF,H'FF,H'FF,H'FF,H'FF ; H'0000 0084 Protect ID
.DATA.B H'FF,H'FF,H'FF,H'FF,H'FF,H'FF,H'FF,H'FF ;
;
;
;****************************************
; ICU Vector Table
;****************************************
;
.SECTION ICUVECT, DATA, ALIGN=4
;
.IMPORT $TIN0_2_Int
;
vectbl:
.DATA.W EIT_reset ; H'0000 0094 MJT Input Interrupt 4:TIN3-TIN6
.DATA.W EIT_reset ; H'0000 0098 MJT Input Interrupt 3:TIN20-TIN23
.DATA.W EIT_reset ; H'0000 009C MJT Input Interrupt 2:TIN12-TIN19
.DATA.W $TIN0_2_Int ; H'0000 00A0 MJT Input Interrupt 1:TIN0-TIN2
.DATA.W EIT_reset ; H'0000 00A4 MJT Input Interrupt 0:TIN7-TIN11
.DATA.W EIT_reset ; H'0000 00A8 MJT Output Interrupt 7:TMS0,TMS1
.DATA.W EIT_reset ; H'0000 00AC MJT Output Interrupt 6:TOP8,TOP9
.DATA.W EIT_reset ; H'0000 00B0 MJT Output Interrupt 5:TOP10
.DATA.W EIT_reset ; H'0000 00B4 MJT Output Interrupt 4:TIO4-TIO7
.DATA.W EIT_reset ; H'0000 00B8 MJT Output Interrupt 3:TIO8,TIO9
.DATA.W EIT_reset ; H'0000 00BC MJT Output Interrupt 2:TOP0-TOP5
.DATA.W EIT_reset ; H'0000 00C0 MJT Output Interrupt 1:TOP6,TOP7
.DATA.W EIT_reset ; H'0000 00C4 MJT Output Interrupt 0:TIO0-TIO3
.DATA.W EIT_reset ; H'0000 00C8 DMAC0-4 Interrupt:DMA0-DMA4
.DATA.W EIT_reset ; H'0000 00CC SIO1 Receive Interrupt
.DATA.W EIT_reset ; H'0000 00D0 SIO1 Transmit Interrupt
.DATA.W EIT_reset ; H'0000 00D4 SIO0 Receive Interrupt
.DATA.W EIT_reset ; H'0000 00D8 SIO0 Transmit Interrupt
.DATA.W EIT_reset ; H'0000 00DC A-D0 Conversion Interrupt
.DATA.W EIT_reset ; H'0000 00E0 TID0 Output Interrupt
.DATA.W EIT_reset ; H'0000 00E4 TOD0 Output Interrupt
.DATA.W EIT_reset ; H'0000 00E8 DMAC5-9 Interrupt:DMA5-DMA9
.DATA.W EIT_reset ; H'0000 00EC SIO2,3 Transmit/Receive Interrupt
.DATA.W EIT_reset ; H'0000 00F0 RTD Interrupt
.DATA.W EIT_reset ; H'0000 00F4 TID1 Output Interrupt
.DATA.W EIT_reset ; H'0000 00F8 TOD1,TOM0 Output Interrupt
.DATA.W EIT_reset ; H'0000 00FC SIO4,5 Transmit/Receive Interrupt
.DATA.W EIT_reset ; H'0000 0100 A-D1 Conversion Interrupt
.DATA.W EIT_reset ; H'0000 0104 TID2 Output Interrupt
.DATA.W EIT_reset ; H'0000 0108 TML1 Input Interrupt
.DATA.W EIT_reset ; H'0000 010C CAN0 Transmit/Receive & Error Interrupt
.DATA.W EIT_reset ; H'0000 0110 CAN1 Transmit/Receive & Error Interrupt
;
;****************************************
; Set SFR Address
;****************************************
;
.SECTION SFR, DATA, ALIGN=1
.RES.B H'4000
;
IMASK .EQU H'00800004 ; IMASK Address
;
;****************************************
; External Interrupt Handler
;****************************************
;
.SECTION EIT_P, CODE, ALIGN=4
;
.EXPORT EIT_ei
;
EIT_ei:
ST R0,@-R15 ; PUSH R0 (R0)
;
ST R1,@-R15 ; PUSH R1 (R1)
ST R2,@-R15 ; PUSH R2 (R2)
LD24 R0,#IMASK ;
ST R3,@-R15 ; PUSH R3 (R3)
LDI R3,#H'40 ;
;
MVFACHI R1 ; PUSH Accumulator
MVFACLO R2 ;
ST R1,@-R15 ; (AccH)
ST R2,@-R15 ; (AccL)
;
LDB R2,@R0 ; Read IMASK(H'0080 0004) Register
ADDI R0,#-4 ;
ST R4,@-R15 ; PUSH R4 (R4)
MVFC R4,PSW ;
ST R5,@-R15 ; PUSH R5 (R5)
MVFC R5,BPC ;
ST R6,@-R15 ; PUSH R6 (R6)
;
LDH R1,@R0 ; Read IVECT(H'0080 0000) Register
;
LD24 R0,#IMASK ; Overwrite IMASK Register
LDB R6,@R0 ;
STB R6,@R0 ;
;
ST R7,@-R15 ; PUSH R7 (R7)
ST R14,@-R15 ; PUSH Link Register (R14)
;
LD R1,@R1 ; Read ICU Vector Table
;
ST R4,@-R15 ; PUSH PSW (PSW)
ST R5,@-R15 ; PUSH BPC (BPC)
ST R2,@-R15 ; PUSH IMASK Register (IMASK)
;
MVTC R3,PSW ; Enable Interrupt
;
JL R1 ; Call Interrupt Handler
;
LDI R5,#H'00 ;
MVTC R5,PSW ; Disable Interrupt
;
LD24 R3,#IMASK ;
LD R2,@R15+ ; POP IMASK (IMASK)
LD R1,@R15+ ; POP BPC (BPC)
LD R0,@R15+ ; POP PSW (PSW)
;
LD R14,@R15+ ; POP Link Register (R14)
STB R2,@R3 ;
LD R7,@R15+ ; POP R7 (R7)
MVTC R1,BPC ;
LD R6,@R15+ ; POP R6 (R6)
LD R5,@R15+ ; POP R5 (R5)
LD R4,@R15+ ; POP R4 (R4)
;
LD R2,@R15+ ; POP Accumulator (AccL)
LD R1,@R15+ ; (AccH)
MVTC R0,PSW ;
MVTACLO R2 ;
MVTACHI R1 ;
;
LD R3,@R15+ ; POP R3 (R3)
LD R2,@R15+ ; POP R2 (R2)
LD R1,@R15+ ; POP R1 (R1)
;
LD R0,@R15+ ; POP R0 (R0)
;
RTE
;
;****************************************
; EIT_loop
;****************************************
;
EIT_loop:
BRA EIT_loop
;
;****************************************
; Start Up Program
;****************************************
;
.IMPORT $main
;
.SECTION C, DATA, ALIGN=4
.SECTION D, DATA, ALIGN=4
.SECTION B, DATA, ALIGN=4
.SECTION ROM_D, DATA, ALIGN=4
;
;++++++++++++++++++++++++++++++++++++++++
; Set Interrupt Stack
;
.SECTION SPINT, DATA, ALIGN=4
.RES.B 2048 ; Interrupt Stack Area
;
;++++++++++++++++++++++++++++++++++++++++
; Set User Stack
;
.SECTION SPUSR, DATA, ALIGN=4
; .RES.B 2048 ; User Stack Area
;
;++++++++++++++++++++++++++++++++++++++++
; Startup & Exit
;
.SECTION P, CODE, ALIGN=4
EIT_reset:
LDI R0, #H'00 ;
MVTC R0, PSW ; Disable Interrupt
LDI R0, #7 ;
LD24 R1, #IMASK ;
STB R0, @R1 ;
;
; LD24 R1, #(SPUSR+sizeof(SPUSR)) ;
LD24 R2, #(SPINT+sizeof(SPINT)) ;
; MVTC R1, SPU ; Set User Stack Pointer
MVTC R2, SPI ; Set Interrupt Stack Pointer
;
;++++++++++++++++++++++++++++++++++++++++
; Clear B Section
;
LD24 R5, #sizeof(B)
BLEZ R5, loop_cnt0
LD24 R4, #B
LDI R0, #0
loop0:
STB R0, @R4
ADDI R4, #1
ADDI R5, #-1
BNEZ R5, loop0
loop_cnt0:
;
;++++++++++++++++++++++++++++++++++++++++
; Data Set (ROM_D Section => D Section)
;
LD24 R6, #sizeof(ROM_D)
BLEZ R6, loop_cnt1
LD24 R4, #D
LD24 R5, #ROM_D
loop1:
LDB R0, @R5
STB R0, @R4
ADDI R4, #1
ADDI R5, #1
ADDI R6, #-1
BNEZ R6, loop1
loop_cnt1:
;
;++++++++++++++++++++++++++++++++++++++++
; Set Base Register
;
; .EXPORT __REL_BASE13
.EXPORT __REL_BASE12
; .EXPORT __REL_BASE11
;__REL_BASE13 .EQU 0x00808000
__REL_BASE12 .EQU 0x00808000
;__REL_BASE11 .EQU 0x00808000
;
; SETH R13, #HIGH(__REL_BASE13)
; OR3 R13, R13, #LOW(__REL_BASE13)
;
SETH R12, #HIGH(__REL_BASE12)
OR3 R12, R12, #LOW(__REL_BASE12)
;
; SETH R11, #HIGH(__REL_BASE11)
; OR3 R11, R11, #LOW(__REL_BASE11)
;
;++++++++++++++++++++++++++++++++++++++++
; Call main()
;
; LDI R0, #H'C0 ; Enable Interrupt, Use User Stack
LDI R0, #H'40 ; Enable Interrupt, Use Interrupt Stack
MVTC R0, PSW
;
BL $main ; Call C(main) Routine
;
;++++++++++++++++++++++++++++++++++++++++
;
endless:
BRA endless ; Dummy
;
;++++++++++++++++++++++++++++++++++++++++
; Set/Clear IE Flag Routine
;
.EXPORT $EnInt
.EXPORT $DisInt
$EnInt:
MVFC R0, PSW
OR3 R0, R0, #H'0040
MVTC R0, PSW
JMP R14
;
$DisInt:
MVFC R0, PSW
AND3 R0, R0, #H'FFBF
MVTC R0, PSW
JMP R14
;
.END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -