?? startu32.a51
字號:
$NOMOD51
;------------------------------------------------------------------------------
; STARTU32.A51: This code is executed after processor reset.
;
; Modified for uPSD Startup:
; - Disable Watchdog timer - enable at beginning of user application
; - Settup various IP prescalers to large values (lowers power requirements)
; The IP device drivers wil need to initialize the prescaler to the right value
;
;------------------------------------------------------------------------------
; User-defined Power-On Initialization of Memory (Clear 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 100H ; the length of IDATA memory in bytes.
; *** NOTE: uPSD users need to fill in the following based on where SRAM memory mapped.
XDATASTART EQU 0200H ; the absolute start-address of XDATA memory
XDATALEN EQU 7D00H ; 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 0 ; set to 1 if pdata object are used.
;
PPAGE EQU 0 ; define PPAGE number.
;
PPAGE_SFR DATA 0A0H ; SFR that supplies uppermost address byte
; (most 8051 variants use P2 as uppermost address byte)
;
;------------------------------------------------------------------------------
PSD_REG_ADDR EQU 0000H
PAGEREG EQU PSD_REG_ADDR + 0E0H
VMREG EQU PSD_REG_ADDR + 0E2H
APPLICATION_PAGE EQU 000H
BOOTLOADER_PAGE EQU 080H
KEY_LENGTH EQU 10 ;from app->bootloader,
key EQU 07FF0H
; Standard SFR Symbols
ACC DATA 0E0H
B DATA 0F0H
SP DATA 81H
DPL DATA 82H
DPH DATA 83H
WDKEY DATA 0AEH
ASCL DATA 095H
PSCL0L DATA 0B1H
PSCL0H DATA 0B2H
PSCL1L DATA 0B3H
PSCL1H DATA 0B4H
USCL DATA 0E1H
DDCCON DATA 0D7H
S1CON DATA 0D8H
NAME ?C_STARTUP
?C_C51STARTUP SEGMENT CODE
?STACK SEGMENT IDATA
RSEG ?STACK
DS 1
EXTRN CODE (?C_START)
PUBLIC ?C_STARTUP
CSEG AT 0
?C_STARTUP: LJMP STARTUP1
RSEG ?C_C51STARTUP
STARTUP1:
; uPSD specific initialization
MOV A, #0FEH ; Load pre-scalars with large value
MOV ASCL, A ; Slow down ADC Logic
MOV PSCL0L, A ; Slow down PWM Logic
MOV PSCL0H, A
MOV PSCL1L, A
MOV PSCL1H, A
MOV USCL, A ; Slow down USB Logic
MOV A, #055H ; Disable Watch Dog Reset
MOV WDKEY, A
MOV A, 0 ; Disable DDC and DDC XRAM out of addr space
MOV DDCCON, A
MOV S1CON, A ; Disable DDC I2C as well
IF IDATALEN <> 0
MOV R0,#IDATALEN - 1
CLR A
IDATALOOP: MOV @R0,A
DJNZ R0,IDATALOOP
ENDIF
IF PPAGEENABLE <> 0
MOV PPAGE_SFR,#PPAGE
ENDIF
IF PDATALEN <> 0
MOV R0,#LOW (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
MOV SP,#?STACK-1
; This code is required if you use L51_BANK.A51 with Banking Mode 4
; EXTRN CODE (?B_SWITCH0)
MOV DPTR, #VMREG
MOV A, #06H
MOVX @DPTR, A
MOV R0, #KEY_LENGTH - 1;
CHECKBOOT: ;;;;;;;;;;7FF0--7FF9
MOV A, #0F0H
ADD A, R0
MOV DPL, A
MOV A, #7FH
ADDC A, #00H
MOV DPH, A
MOVX A, @DPTR
MOV R1,A
MOV A,R0
MOV R2,A
MOV A,#'x'
MOVX @DPTR, A ;擦除標識
MOV A,R2
XRL A,R1
JNZ RUNAPP ;如果是冷啟動,從APP程序運行
DJNZ R0,CHECKBOOT
RUNBOOT: ;需要升級,watchdog重啟后運行IAP
MOV DPTR, #PAGEREG
MOV A, #BOOTLOADER_PAGE
MOVX @DPTR, A
MOV DPTR, #VMREG
MOV A, #12H
MOVX @DPTR, A
JMP DONE
RUNAPP:
MOV DPTR, #PAGEREG
MOV A, #APPLICATION_PAGE
MOVX @DPTR, A
MOV DPTR, #VMREG
MOV A, #0CH
MOVX @DPTR, A
DONE:
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
MOV SP,#?STACK-1
LJMP ?C_START
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -