📄 start8fx.asm
字号:
.RES.B STACKSIZE
STACK_TOP:
.RES.B 2
;--------------------------------------------------------------------------
; 5.4 Definition to start address of data, const and code section
;--------------------------------------------------------------------------
.SECTION DIRDATA, DIR, ALIGN=1
DIRDATA_S:
.SECTION DIRINIT, DIR, ALIGN=1
DIRINIT_S:
.SECTION DATA, DATA, ALIGN=2
DATA_S:
.SECTION INIT, DATA, ALIGN=2
INIT_S:
;--------------------------------------------------------------------------
; 5.5 Monitor Debugger configuration data
;--------------------------------------------------------------------------
#ifdef MONITORDEBUGGER_CONFIGURATION
.SECTION FGMCFGTBL, CONST, LOCATE=0xFFB6
; configuration table
_FGMTBL_STARTADR:
.DATA.H __start ; Start address of user application
_FGMTBL_STACKTOP:
.DATA.H STACK_TOP ; Stack top
_FGMTBL_ABOOTADR:
.DATA.H _AutoBootCheck ; Auto-boot address
_FGMTBL_PASSWORD:
.DATA.L USER_PASSWORD ; password (4byte)
; CALLV vector for FGM
.SECTION FGMCALLVECT, CONST, LOCATE=0xFFC0
.IMPORT _FGM_CALL
.DATA.H _FGM_CALL ; CALLV #0
#endif
;-----------------------------------------------------------
; 5.6 Define Reset vector and Modebyte
;-----------------------------------------------------------
; The Mode Byte is defined at the beginning of the start.asm
.SECTION RESVECT, CONST, LOCATE=H'FFFD
.DATA.B MODEBYTE
#ifdef MONITORDEBUGGER_CONFIGURATION
.IMPORT _FGM_INIT
.DATA.W _FGM_INIT
#else
.DATA.W __start
#endif
;-----------------------------------------------------------
; 5.7 Flash Security
;-----------------------------------------------------------
; The Flash of MB95Fxxx can be secured
#if (MCU_SERIES == MB95130 | MCU_SERIES == MB95140 |MCU_SERIES == MB95150)
.SECTION SECURITY, CONST, LOCATE=H'8000
#else
.SECTION SECURITY, CONST, LOCATE=H'4000
#endif
#if FLASHSECURITY == ON
.DATA.B 0x01
#else
.DATA.B 0xFF
#endif
;
;
;====================================================================
; 6 Start-Up Code
;====================================================================
;
;
;====================================================================
; ___ _____ __ ___ _____
; / | / \ | \ |
; \___ | | | |___/ |
; \ | |----| | \ |
; ___/ | | | | \ | Begin of actual code section
;====================================================================
.SECTION CODE, CODE, ALIGN=1
__start:
;
;
;--------------------------------------------------------------------------
; 6.1 Set stack pointer
;--------------------------------------------------------------------------
MOVW A, #STACK_TOP
MOVW SP, A
;
;
;--------------------------------------------------------------------------
; 6.2 Set Register bank Pointer 0 / set Direct bank Pointer 0 (0x80..0xFF)
;--------------------------------------------------------------------------
;
MOVW A, PS
MOVW A, #0x00BF ; RP=0, DP=0, I=0
ANDW A
MOVW PS, A
;
;--------------------------------------------------------------------------
; 6.3 Set ILM to the lowest level(3)
;--------------------------------------------------------------------------
;
MOVW A, PS
MOVW A, #0x0030
ORW A
MOVW PS, A
;
;--------------------------------------------------------------------------
; 6.4 Set PLL
;--------------------------------------------------------------------------
;
; Set Main-PLL clock
;
# if CLOCKMODE != NOCLOCK
SETB PLLC:4 ; set PLL stable for simulation
# if CLOCKSPEED == MAINPLLx1
CLRB PLLC:5
CLRB PLLC:6
SETB PLLC:7 ; Main PLL enable
#endif
# if CLOCKSPEED == MAINPLLx2
SETB PLLC:5
CLRB PLLC:6
SETB PLLC:7 ; Main PLL enable
#endif
# if CLOCKSPEED == MAINPLLx2p5
CLRB PLLC:5
SETB PLLC:6
SETB PLLC:7 ; Main PLL enable
#endif
;
; Set Sub-PLL clock
;
# if SUBCLOCKSPEED == SUBPLLx2
SETB PLLC:1
CLRB PLLC:2
SETB PLLC:3
#endif
# if SUBCLOCKSPEED == SUBPLLx3
CLRB PLLC:1
SETB PLLC:2
SETB PLLC:3
#endif
# if SUBCLOCKSPEED == SUBPLLx4
SETB PLLC:1
SETB PLLC:2
SETB PLLC:3
#endif
# if ( (CLOCKMODE == MAIN_PLL) && (CLOCKSPEED != MAINPLL_OFF) )
WAITMAINPLL:
MOV A,PLLC ; Waiting Main-PLL stabilization
AND A,#0x10
BNZ SETCLK
JMP WAITMAINPLL
# elif ( (CLOCKMODE == SUB_PLL) && (SUBCLOCKSPEED != SUBPLL_OFF) )
WAITSUBPLL:
MOV A,PLLC ; Waiting Sub-PLL stabilization
AND A,#0x01
BNZ SETCLK
JMP WAITSUBPLL
# endif
#endif
;
;--------------------------------------------------------------------------
; 6.5 Set System Clock
;--------------------------------------------------------------------------
;
SETCLK:
# if CLOCKMODE != NOCLOCK
MOV SYCC,#(CLOCKMODE<<4 + CLOCKDIV)
# endif
;
;
;--------------------------------------------------------------------------
; 6.6 Copy initial value *CONST(ROM) section to *INIT(RAM) section
;--------------------------------------------------------------------------
;
#macro ICOPY src_addr, dest_addr, src_segment
MOVW EP, #\src_addr
MOVW A, #\dest_addr
MOVW A, #SIZEOF (\src_segment)
CALL LMEMTOMEM
#endm
ICOPY _ROM_INIT, _RAM_INIT, INIT
ICOPY _ROM_DIRINIT, _RAM_DIRINIT, DIRINIT
;
;--------------------------------------------------------------------------
; 6.7 Zero clear of *VAR section
;--------------------------------------------------------------------------
;
#macro FILL0 src_addr, src_segment
MOVW A, #\src_addr
MOVW A, #SIZEOF (\src_segment)
CALL LMEMCLEAR
#endm
FILL0 DIRDATA_S, DIRDATA
FILL0 DATA_S, DATA;
;
;
;--------------------------------------------------------------------------
; 6.8 call main routine
;--------------------------------------------------------------------------
CALL _main
end: JMP end
.END __start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -