📄 start_ad.a51
字号:
$NOMOD51
;------------------------------------------------------------------------------
; This file is part of the C51 Compiler package
; Startup Code for the Analog Devices ADuC B2 series
; Copyright (c) 2001-2002 Keil Elektronik GmbH and Keil Software, Inc.
; Version 1.01
;------------------------------------------------------------------------------
; START_AD.A51: This code is executed after processor reset.
;
; To translate this file use Ax51 with the following invocation:
;
; Ax51 STARTUP.A51
;
; To link the modified STARTUP.OBJ file to your application use the following
; Lx51 invocation:
;
; Lx51 <your object file list>, STARTUP.OBJ <controls>
;
;------------------------------------------------------------------------------
;
; Setup Extended Data RAM (XMM)
;
; On-chip XDATA RAM
; XRAMEN Val Description
; ------ --- -----------
XRAMEN EQU 0; 0 = disable on-chip XDATA RAM and access off-chip XDATA space
; ; 1 = enable on-chip XDATA RAM
;
; Extended Stack Mode (16-bit Stack Pointer)
; EXSP Val Description
; ---- --- -----------
EXSP EQU 0 ; 0 = classic 8051 stack pointer (8-bit) addressing IDATA space
; ; 1 = extended 16-bit stack pointer addressing XDATA space
; NOTE: The Extended Stack Mode works only with enabled on-chip XDATA RAM!
;
; CPU Stack Size Definition in Extended Stack Mode:
; The following EQU statements defines the stack space available in extended
; stack mode (EXSP set to 1) for the application program. It should be noted
; that the stack space must be adjusted according the actual requirements of
; the application. This STARTUP file allocates the stack in extended stack
; mode in XDATA memory beginning at XSTACKSTART. The extended stack must
; be within the on-chip XDATA memory and XSTACKSTART must be not less than
; 100H.
;
STACKSIZE EQU 200H ; set to 200H Bytes.
XSTACKSTART EQU 800H - STACKSIZE ; 800H is top of on-chip XRAM.
;
;------------------------------------------------------------------------------
;
; User-defined Power-On Initialization of Memory
;
; With the following EQU statements the initialization of memory
; at processor reset can be defined:
;
; ; the absolute start-address of IDATA memory is always 0
IDATALEN EQU 80H ; the length of IDATA memory in bytes.
;
XDATASTART EQU 0H ; the absolute start-address of XDATA memory
XDATALEN EQU 0H ; the length of XDATA memory in bytes.
;
PDATASTART EQU 0H ; the absolute start-address of PDATA memory
PDATALEN EQU 0H ; the length of PDATA memory in bytes.
;
; Notes: The IDATA space overlaps physically the DATA and BIT areas of the
; 8051 CPU. At minimum the memory space occupied from the C51
; run-time routines must be set to zero.
;------------------------------------------------------------------------------
;
; Reentrant Stack Initilization
;
; The following EQU statements define the stack pointer for reentrant
; functions and initialized it:
;
; Stack Space for reentrant functions in the SMALL model.
IBPSTACK EQU 0 ; set to 1 if small reentrant is used.
IBPSTACKTOP EQU 0FFH+1 ; set top of stack to highest location+1.
;
; Stack Space for reentrant functions in the LARGE model.
XBPSTACK EQU 0 ; set to 1 if large reentrant is used.
XBPSTACKTOP EQU 0FFFFH+1; set top of stack to highest location+1.
;
; Stack Space for reentrant functions in the COMPACT model.
PBPSTACK EQU 0 ; set to 1 if compact reentrant is used.
PBPSTACKTOP EQU 0FFFFH+1; set top of stack to highest location+1.
;
;------------------------------------------------------------------------------
;
; Page Definition for Using the Compact Model with 64 KByte xdata RAM
;
; The following EQU statements define the xdata page used for pdata
; variables. The EQU PPAGE must conform with the PPAGE control used
; in the linker invocation.
;
PPAGEENABLE EQU 1 ; set to 1 if pdata object are used.
PPAGE EQU 0 ; define PPAGE number.
;
;------------------------------------------------------------------------------
; Define CPU Symbols
sfr SP = 0x81;
sfr SPH = 0xB7;
sfr XMM = 0xAF;
sfr P2 = 0xA0;
IF (EXSP = 1) AND (XRAMEN = 0)
__error__ "Extended Stack Mode requires enabled on-chip XDATA RAM"
ENDIF
IF (EXSP = 1) AND (XSTACKSTART < 100H)
__error__ "Extended Stack must start in XRAM above address 100H"
ENDIF
NAME ?C_STARTUP
?C_C51STARTUP SEGMENT CODE
IF (EXSP = 1)
XSEG AT XSTACKSTART
DS STACKSIZE ; Stack Space 200H Bytes
ELSE
?STACK SEGMENT IDATA
RSEG ?STACK
DS 1
ENDIF
EXTRN CODE (?C_START)
PUBLIC ?C_STARTUP
CSEG AT 0
?C_STARTUP: LJMP STARTUP1
RSEG ?C_C51STARTUP
STARTUP1:
_VXMM EQU (EXSP SHL 7) OR (XRAMEN)
IF _VXMM
MOV XMM,#055H ; set extended memory modes
MOV XMM,#0AAH
MOV XMM,#_VXMM
ENDIF
IF IDATALEN <> 0
MOV R0,#IDATALEN - 1
CLR A
IDATALOOP: MOV @R0,A
DJNZ R0,IDATALOOP
ENDIF
IF XDATALEN <> 0
MOV DPTR,#XDATASTART
MOV R7,#LOW (XDATALEN)
IF (LOW (XDATALEN)) <> 0
MOV R6,#(HIGH (XDATALEN)) +1
ELSE
MOV R6,#HIGH (XDATALEN)
ENDIF
CLR A
XDATALOOP: MOVX @DPTR,A
INC DPTR
DJNZ R7,XDATALOOP
DJNZ R6,XDATALOOP
ENDIF
IF PPAGEENABLE <> 0
MOV P2,#PPAGE
ENDIF
IF PDATALEN <> 0
MOV R0,#PDATASTART
MOV R7,#LOW (PDATALEN)
CLR A
PDATALOOP: MOVX @R0,A
INC R0
DJNZ R7,PDATALOOP
ENDIF
IF IBPSTACK <> 0
EXTRN DATA (?C_IBP)
MOV ?C_IBP,#LOW IBPSTACKTOP
ENDIF
IF XBPSTACK <> 0
EXTRN DATA (?C_XBP)
MOV ?C_XBP,#HIGH XBPSTACKTOP
MOV ?C_XBP+1,#LOW XBPSTACKTOP
ENDIF
IF PBPSTACK <> 0
EXTRN DATA (?C_PBP)
MOV ?C_PBP,#LOW PBPSTACKTOP
ENDIF
IF EXSP = 1
MOV SP,#LOW (XSTACKSTART-1)
MOV SPH,#HIGH (XSTACKSTART-1)
ELSE
MOV SP,#?STACK-1
ENDIF
;EXTRN CODE (?B_SWITCH0)
; CALL ?B_SWITCH0 ; init bank mechanism to code bank 0
LJMP ?C_START
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -