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

📄 startup.ms

📁 瑞萨CAN通讯单片机程序
💻 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
;
;
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		EIT_reset		; 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 + -