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

📄 ncrt0.a30

📁 完整的基于Xmodem协议的嵌入式系统侧FLASH Loader程序。该程序是基于三菱的M16C/60系列MCU
💻 A30
字号:
;*************************************************************************** ;
;	C COMPILER for M16C/60
;	Copyright 1995-1998 MITSUBISHI ELECTRIC CORPORATION
;	AND MITSUBISHI ELECTRIC SEMICONDUCTOR SYSTEMS CORPORATION
;	All Rights Reserved.
;
;       ncrt0.a30 : NC30 startup program
;
;	This program is applicable when using the basic I/O library
;       
;       $Id: ncrt0.a30,v 1.9 97/11/05 11:27:21 ookura Exp $
;
;***************************************************************************

PM0	.equ	0004H	; upd 2000.02.08 sawada PMOD -> PM0
PM1	.equ	0005H	; add 2000.02.08 sawada

;---------------------------------------------------------------------
; HEEP SIZE definition
;---------------------------------------------------------------------
HEAPSIZE	.equ	0h

;---------------------------------------------------------------------
; STACK SIZE definition
;---------------------------------------------------------------------
STACKSIZE	.equ	300h

;---------------------------------------------------------------------
; INTERRUPT STACK SIZE definition
;---------------------------------------------------------------------
ISTACKSIZE	.equ	300h

;---------------------------------------------------------------------
; INTERRUPT VECTOR ADDRESS  definition
;---------------------------------------------------------------------
VECTOR_ADR 	.equ	5000h

;---------------------------------------------------------------
; special page defination
;---------------------------------------------------------------
;       macro define for special page
;
;Format:
;	SPECIAL	number
;

SPECIAL	.macro	NUM
	.org	0FFFFEH-(NUM*2)
	.glb	__SPECIAL_@NUM
	.word	__SPECIAL_@NUM  & 0FFFFH
.endm
;---------------------------------------------------------------------
; Section allocation
;---------------------------------------------------------------------
	.list OFF
	.include sect30.inc
	.list ON

;---------------------------------------------------------------------
; SBDATA area definition
;---------------------------------------------------------------------
	.glb	__SB__
__SB__	.equ	data_SE_top

;====================================================================
; Initialize Macro declaration
;---------------------------------------------------------------------
N_BZERO	.macro	TOP_ ,SECT_
	mov.b	#00H, R0L
	mov.w	#(TOP_ & 0FFFFH), A1
	mov.w	#sizeof SECT_ , R3
	sstr.b	
	.endm

N_BCOPY .macro	FROM_,TO_,SECT_
	mov.w	#(FROM_ & 0FFFFH),A0
	mov.b	#(FROM_ >>16),R1H
	mov.w	#TO_ ,A1
	mov.w	#sizeof SECT_ , R3
	smovf.b
	.endm

BZERO	.macro	TOP_,SECT_
	push.w	#sizeof SECT_ >> 16
	push.w	#sizeof SECT_  & 0ffffh
	pusha	TOP_ >>16
	pusha	TOP_ & 0ffffh

	.glb	_bzero	
	jsr.a	_bzero
	.endm


BCOPY	.macro	FROM_ ,TO_ ,SECT_
	push.w	#sizeof SECT_  >> 16
	push.w	#sizeof SECT_  & 0ffffh
	pusha	TO_ >>16
	pusha	TO_  & 0ffffh
	pusha	FROM_ >>16
	pusha	FROM_  & 0ffffh

	.glb	_bcopy
	jsr.a	_bcopy
	.endm

;====================================================================
; Interrupt section start
;---------------------------------------------------------------------
	.glb	start
	.section	interrupt
start:
;---------------------------------------------------------------------
; after reset,this program will start
;---------------------------------------------------------------------
	ldipl	#7	; disable interrupt
	ldc	#istack_top,	isp	;set istack pointer
	bset	1,0ah
	mov.b	#03,PM0			; Set Processor Mode Regsiter 0	; edt 2000.02.08 sawada PMOD -> PM0
;	 (BCLK=Off, P4=Addr, Bus=separate, R/W=BHE, Processor Mode=micro processor)
;	mov.b	#080H,PM1		; Set Processor Mode Regsiter 1	; add 2000.02.08 sawada
;	 (WaitBit=On)							; add 2000.02.08 sawada
	bclr	1,0ah
	bset	0,0AH
	mov.b	#08H,0006H		; Set System Clock Control 0 Regsiter
;	 (Xin, CM16,17 enable, Xin enable, Xcin disable, Xcin=High, in wait f1 enable, P57 enable)
	bclr	0,0AH
;	mov.b	#00FH,0008H		; Set Chip Select Control Register	; add 2000.02.08 sawada
;	 (CS3-0 Wait=On, Output=Enable)						; add 2000.02.08 sawada
;	mov.b	#001H,40F9H		; Set System Clock Change Register	; add 2000.02.08 sawada
;	 (CLK=6.4MHz)								; add 2000.02.08 sawada
	mov.b	#0,004BH	; disable DMA0 interrupt
	mov.b	#0,004CH	; disable DMA1 interrupt
	mov.b	#0,004DH	; disable Key interrupt
	mov.b	#0,004EH	; disable ADconvert interrupt
	mov.b	#0,0051H	; disable UART0 Tx interrupt
	mov.b	#0,0052H	; disable UART0 Rx interrupt
	mov.b	#0,0053H	; disable UART1 Tx interrupt
	mov.b	#0,0054H	; disable UART1 Rx interrupt
	mov.b	#0,0055H	; disable TA0 interrupt
	mov.b	#0,0056H	; disable TA1 interrupt
	mov.b	#0,0057H	; disable TA2 interrupt
	mov.b	#0,0058H	; disable TA3 interrupt
	mov.b	#0,0059H	; disable TA4 interrupt
	mov.b	#0,005AH	; disable TB0 interrupt
	mov.b	#0,005BH	; disable TB1 interrupt
	mov.b	#0,005CH	; disable TB2 interrupt
	mov.b	#0,005DH	; disable INT0 interrupt
	mov.b	#0,005EH	; disable INT1 interrupt
	mov.b	#0,005FH	; disable INT2 interrupt
	ldc	#0080h,	flg
	ldc	#stack_top,	sp	;set stack pointer 
	ldc	#data_SE_top,	sb	;set sb register 
	ldintb	#VECTOR_ADR

;====================================================================
; NEAR area initialize.
;--------------------------------------------------------------------
; bss zero clear
;--------------------------------------------------------------------
	N_BZERO	bss_SE_top,bss_SE
	N_BZERO	bss_SO_top,bss_SO
	N_BZERO	bss_NE_top,bss_NE
	N_BZERO	bss_NO_top,bss_NO

;---------------------------------------------------------------------
; initialize data section
;---------------------------------------------------------------------
	N_BCOPY data_SEI_top,data_SE_top,data_SE
	N_BCOPY	data_SOI_top,data_SO_top,data_SO
	N_BCOPY	data_NEI_top,data_NE_top,data_NE
	N_BCOPY	data_NOI_top,data_NO_top,data_NO

;====================================================================
; FAR area initialize.
;---------------------------------------------------------------------
; bss zero clear
;---------------------------------------------------------------------
;	BZERO	bss_FE_top,bss_FE
;	BZERO	bss_FO_top,bss_FO
;
;---------------------------------------------------------------------
; Copy edata_E(O) section from edata_EI(OI) section
;---------------------------------------------------------------------
;	BCOPY	data_FEI_top,data_FE_top,data_FE
;	BCOPY	data_FOI_top,data_FO_top,data_FO
;
	ldc	#stack_top,sp

;====================================================================
; heap area initialize
;---------------------------------------------------------------------
;	.glb	__mbase
;	.glb	__mnext
;	.glb	__msize
;	mov.w	#(heap_top&0FFFFH), __mbase
;	mov.w	#(heap_top>>16), __mbase+2
;	mov.w	#(heap_top&0FFFFH), __mnext
;	mov.w	#(heap_top>>16), __mnext+2
;	mov.w	#(HEAPSIZE&0FFFFH), __msize
;	mov.w	#(HEAPSIZE>>16), __msize+2

;====================================================================
; Initialize standard I/O
;---------------------------------------------------------------------
;	.glb	_init
;	jsr.a	_init

;====================================================================
; Call main() function
;---------------------------------------------------------------------
	ldc	#0h,fb	; for debuger

	fset	I	; enable interrupt
	.glb	_main
	jsr.a	_main

;====================================================================
; exit() function
;---------------------------------------------------------------------
	.glb	_exit
	.glb	$exit
_exit:			   ; End program
$exit:
	jmp	_exit

;====================================================================
; dummy interrupt function
;---------------------------------------------------------------------
dummy_int:
	reit
	.end


;***************************************************************************
;
;	C COMPILER for M16C/60
;	Copyright 1995-1998 MITSUBISHI ELECTRIC CORPORATION
;	AND MITSUBISHI ELECTRIC SEMICONDUCTOR SYSTEMS CORPORATION
;	All Rights Reserved.
;
;***************************************************************************

⌨️ 快捷键说明

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