📄 start91270.asm
字号:
;==============================================================================
#if (CS0)
LDI #0x0640, R1 ; area select reg asr0
LDI #AREASEL0, R0 ; Start address of CS0 area
STH R0, @R1 ; set register
LDI #0x642, R1 ; area control reg ACR0
LDI #CONFIGCS0, R2 ; load settings
STH R2, @R1 ; set register
LDI #0x660, R1 ; area wait register awr0
LDI #WAITREG0, R2 ; wait settings
STH R2, @R1 ; set register
#endif
;==============================================================================
;6.2.2 Set CS1
;==============================================================================
#if CS1
LDI #0x0644, R1 ; area select reg asr1
LDI #AREASEL1, R0 ; Start address of CS1 area
STH R0, @R1 ; set register
LDI #0x646, R1 ; area control reg ACR1
LDI #CONFIGCS1, R2 ; load settings
STH R2, @R1 ; set register
LDI #0x662, R1 ; area wait register awr1
LDI #WAITREG1, R2 ; wait settings
STH R2, @R1 ; set register
#endif
;==============================================================================
;6.2.3 Set CS2
;==============================================================================
#if CS2
LDI #0x0648, R1 ; area select reg asr2
LDI #AREASEL2, R0 ; Start address of CS2 area
STH R0, @R1 ; set register
LDI #0x64A, R1 ; area control reg ACR2
LDI #CONFIGCS2, R2 ; load settings
STH R2, @R1 ; set register
LDI #0x664, R1 ; area wait register awr2
LDI #WAITREG2, R2 ; wait settings
STH R2, @R1 ; set register
#endif
;==============================================================================
;6.2.4 Set CS3
;==============================================================================
#if CS3
LDI #0x064C, R1 ; area select reg asr3
LDI #AREASEL3, R0 ; Start address of CS3 area
STH R0, @R1 ; set register
LDI #0x64E, R1 ; area mode reg ACR3
LDI #CONFIGCS3, R2 ; load settings
STH R2, @R1 ; set register
LDI #0x666, R1 ; area wait register awr3
LDI #WAITREG3, R2 ; wait settings
STH R2, @R1 ; set register
#endif
;
;==============================================================================
;6.2.5 set Port Function Register
;==============================================================================
;==============================================================================
;6.2.5.1 set EPFR2 Register. External bus mode (Addr[16-23]) or General purpose port
;==============================================================================
LDI #0x0602, R1 ; Port Function Register 0, (PFR00)
LDI #EPFUNC2, R0 ; load port settings
STB R0, @R1 ; set register
;==============================================================================
;6.2.5.2 set EPFRE Register. External bus mode (Addr[0-7]) or General purpose port
;==============================================================================
LDI #0x060E, R1 ; Port Function Register 1, (PFR01)
LDI #EPFUNCE, R0 ; load port settings
STB R0, @R1 ; set register
;==============================================================================
;6.2.5.3 set EPFRF Register. External bus mode (Addr[8-15]) or General purpose port
;==============================================================================
LDI #0x060F, R1 ; Port Function Register 2, (PFR02)
LDI #EPFUNCF, R0 ; load port settings
STB R0, @R1 ; set register
;==============================================================================
;6.2.5.4 set EPFR3 Register. External bus mode (Control Signals) or General purpose port
;==============================================================================
LDI #0x0603, R1 ; Port Function Register 8, (PFR08)
LDI #EPFUNC3, R0 ; load port settings
STB R0, @R1 ; set register
;==============================================================================
;6.2.5.5 set EPFR9 Register. External bus mode (Control Signals) or General purpose port
;==============================================================================
LDI #0x0609, R1 ; Port Function Register 9, (PFR09)
LDI #EPFUNC9, R0 ; load port settings
STB R0, @R1 ; set register
;
;==============================================================================
;6.2.6 Enable used CS
;==============================================================================
LDI #0x0680, R1 ; chip select enable register CSER
LDI #CSENABLE, R0 ; load enable settings
STB R0, @R1 ; set register
#endif /* #endif busmode */
;==============================================================================
; 6.2.7 Set Flash wait cycles
;==============================================================================
#if FLASH_READ_ONLY == ON
LDI #0x7004,R0 ; Set FLWC (flash memory wait register)
LDI #0x01,R1 ; Set 1 wait cylce
STB R1,@R0
#else
LDI #0x7004,R0 ; Set FLWC (flash memory wait register)
LDI #0x03,R1 ; Set 3 wait cylces
STB R1,@R0
#endif
;==============================================================================
; Standard C startup
;==============================================================================
;==============================================================================
;6.3 initialise Stack Pointer and Table Base register
;==============================================================================
#if STACKUSE == SYSSTACK
ldi #__systemstack_top, sp ; initialize SP
#endif
#if STACKUSE == USRSTACK
ldi #__userstack_top, sp ; initialize SP
#endif
ldi #INTVECT, R0 ; set Table Base
mov r0, tbr
;==============================================================================
;6.4 Clear data
;==============================================================================
; clear DATA section
; According to ANSI, the DATA section must be cleared during start-up
ldi:8 #0, r0
ldi #sizeof DATA &~0x3, r1
ldi #DATA, r13
cmp #0, r1
beq data_clr1
data_clr0:
add2 #-4, r1
bne:d data_clr0
st r0, @(r13, r1)
data_clr1:
ldi:8 #sizeof DATA & 0x3, r1
ldi #DATA + (sizeof DATA & ~0x3), r13
cmp #0, r1
beq data_clr_end
data_clr2:
add2 #-1, r1
bne:d data_clr2
stb r0, @(r13, r1)
data_clr_end:
;==============================================================================
;6.5 Copy Init section from ROM to RAM
;==============================================================================
; copy rom
; All initialised data's (e.g. int i=1) must be stored in ROM/FLASH area.
; (start value)
; The Application must copy the Section (Init) into the RAM area.
ldi #_RAM_INIT, r0
ldi #_ROM_INIT, r1
ldi #sizeof(INIT), r2
cmp #0, r2
beq:d copy_rom_end
ldi #3, r12
and r2, r12
beq:d copy_rom2
mov r2, r13
mov r2, r3
sub r12, r3
copy_rom1:
add #-1, r13
ldub @(r13, r1), r12
cmp r3, r13
bhi:d copy_rom1
stb r12, @(r13, r0)
cmp #0, r3
beq:d copy_rom_end
copy_rom2:
add #-4, r13
ld @(r13, r1), r12
bgt:d copy_rom2
st r12, @(r13, r0)
copy_rom_end:
;==============================================================================
;6.6 C library initialization
;==============================================================================
#if CLIBINIT == ON
call32 __stream_init, r12 ; initialise library
#endif
;==============================================================================
;6.7 call C++ constructors
;==============================================================================
#if CPLUSPLUS == ON
ldi #___call_dtors, r4
call32 _atexit, r12
ldi #EXT_CTOR_DTOR, r8
ldi #EXT_CTOR_DTOR + sizeof(EXT_CTOR_DTOR), r9
cmp r9, r8
beq L1
L0:
ld @r8, r10
call:d @r10
add #4, r8
cmp r9, r8
bc L0
L1:
#endif
start_main:
;==============================================================================
;6.8 call main routine
;==============================================================================
ldi:8 #0, r4 ; Set the 1st parameter for main to 0.
call32:d _main, r12
nop
#if CLIBINIT == ON
ldi:8 #0, r5 ; Set the 2nd parameter for main to NULL.
call32 _exit, r12
__exit:
#endif
#if CPLUSPLUS == ON
__abort:
#endif
;==============================================================================
;6.9 Return from main function
;==============================================================================
end:
bra end
.end __start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -