📄 eprcrt0.s
字号:
;////////////////////////////////////////////////////////////////////////////
;/* */
;/* FILE NAME VERSION */
;/* */
;/* crt0.s Version CE */
;/* */
;/* DESCRIPTION */
;/* */
;/* This file contains the host board startup self-test, target */
;/* processor dependent initialization routines and data. */
;/* */
;/* FUNCTIONS */
;/* */
;/* SELF_TEST startup self-test */
;/* BEEP buzzer beep in a predefineded manner */
;/* DELAY a software 10ms delay routine */
;/* */
;////////////////////////////////////////////////////////////////////////////
;// constant define
;// start and end address of DRAM
START_ADDRESS_OF_DRAM = 0
END_ADDRESS_OF_DRAM = $400000
;// SIM registers base address
SIM_BASE_ADDR = $60000000
;// space for saving checksum(last four bytes of flash ROM)
CHECK_SUM = $A00000 - $10000 - 4
;// reset flag's address, the reset flag is a 64-bit number
RESET_FLAG = $400000 - 8
;//the predefined number for reset flag
RESET_FLAG_NUMBER0 = $01234567
RESET_FLAG_NUMBER1 = $89ABCDEF
;// constant define for alarm. LLH.2000.9.30
PARALLEL_PORT = (SIM_BASE_ADDR + $1C9)
ENABLE_BUZZER = $0FD
DISABLE_BUZZER = $0FF
;// constant defined for watchdog. Ason. 2000.12.26.
ENABLEWD_PORT = $9c0004
DISABLEWD_PORT = $9c0000
;// The section "start"(exclude first two instructions) will be run in the
;// flash ROM to initiate hardware,you can change it as you wanted
PSECT
XDEF _START
XDEF start
ALIGN 4
.section start
start:
_START:
;// 首先,根据寄存器取得一个随机值作为机器ID,放入s_lMonitorId
MOVE.W #$2700, SR
MOVE.L D2, D2
ADD.L D3, D2
ADD.L D4, D2
ADD.L D5, D2
ADD.L D6, D2
ADD.L D7, D2
MOVE.L #__SPEC_START, A1
MOVE.L D2, (A1)
ADD.L A1, D2
MOVE.L A2, D2
ADD.L A3, D2
ADD.L A4, D2
ADD.L A5, D2
ADD.L A6, D2
MOVE.L #__SPEC_START + 4, A1
MOVE.L D2, (A1)
;//=======================================================================
;//////////////////////////////////////////////////////////////////////////
;//
;// 3. configuration registers initializing
;//
;//////////////////////////////////////////////////////////////////////////
MOVE.L #$1000000,D0 ;// invalidate cache contents
MOVEC D0,CACR
MOVE.L #$80000000,D0 ;// enable the cache
MOVEC D0,CACR
MOVE.L #$0,D0 ;// Disable ACR0, ACR1
MOVEC D0,ACR0
MOVEC D0,ACR1
MOVE.L #($70000000) ,D0 ;// 8K SRAM
MOVEC D0,RAMBAR
MOVE.L #(SIM_BASE_ADDR+1),D0 ;// MBAR
MOVEC D0,MBAR
MOVE.B #$e1,D0 ;//PAR
MOVE.B D0, SIM_BASE_ADDR+$CB
MOVE.B #$85,D0 ;//ICR1
MOVE.B D0, SIM_BASE_ADDR+$14
MOVE.B #$8B,D0 ;//ICR2
MOVE.B D0, SIM_BASE_ADDR+$15
MOVE.B #$8E,D0 ;//ICR3
MOVE.B D0, SIM_BASE_ADDR+$16
MOVE.B #$90,D0 ;//ICR4
MOVE.B D0, SIM_BASE_ADDR+$17
MOVE.B #$95,D0 ;// ICR5
MOVE.B D0, SIM_BASE_ADDR+$18
MOVE.B #$98,D0 ;// ICR6
MOVE.B D0, SIM_BASE_ADDR+$19
MOVE.B #$9F,D0 ;// ICR7
MOVE.B D0, SIM_BASE_ADDR+$1A
MOVE.B #$1E,D0 ;// ICR8
MOVE.B D0, SIM_BASE_ADDR+$1B
MOVE.B #$80,D0 ;// ICR9
MOVE.B D0, SIM_BASE_ADDR+$1C
MOVE.B #$80,D0 ;// ICR10
MOVE.B D0, SIM_BASE_ADDR+$1D
MOVE.B #$8C,D0 ;// ICR11
MOVE.B D0, SIM_BASE_ADDR+$1E
MOVE.B #$8E,D0 ;// ICR12
MOVE.B D0, SIM_BASE_ADDR+$1F
MOVE.B #$8D,D0 ;// ICR13
MOVE.B D0, SIM_BASE_ADDR+$20
MOVE.W #$0300,D0 ;// DCRR
MOVE.W D0, SIM_BASE_ADDR+$46
MOVE.W #$0200,D0 ;// DCTR
MOVE.W D0, SIM_BASE_ADDR+$4A
MOVE.W #$0000,D0 ;// DCAR0
MOVE.W D0, SIM_BASE_ADDR+$4C
MOVE.L #$003E0000,D0 ;// DCMR0
MOVE.L D0, SIM_BASE_ADDR+$50
MOVE.B #$17,D0 ;// DCCR0
MOVE.B D0, SIM_BASE_ADDR+$57
MOVE.W #$0080,D0 ;// CSAR0
MOVE.W D0, SIM_BASE_ADDR+$64
MOVE.L #$3F0000,D0 ;// CSMR0
MOVE.L D0, SIM_BASE_ADDR+$68
MOVE.W #$1103,D0 ;// CSCR0
MOVE.W D0, SIM_BASE_ADDR+$6E
; MOVE.W #$0a00,D0 ;// CSAR1
; MOVE.W D0, SIM_BASE_ADDR+$70
;
; MOVE.L #$001f0020,D0 ;// CSMR1
; MOVE.L D0, SIM_BASE_ADDR+$74
; MOVE.W #$1d43,D0 ;// CSCR1
; MOVE.W D0, SIM_BASE_ADDR+$7A
MOVE.W #$1000,D0 ;// CSAR2
MOVE.W D0, SIM_BASE_ADDR+$7C
MOVE.L #$f0000,D0 ;// CSMR2
MOVE.L D0, SIM_BASE_ADDR+$80
MOVE.W #$1143,D0 ;// CSCR2
MOVE.W D0, SIM_BASE_ADDR+$86
MOVE.W #$0060,D0
MOVE.W D0, SIM_BASE_ADDR+$88
MOVE.L #$00000000,D0
MOVE.L D0, SIM_BASE_ADDR+$8C
MOVE.W #$9d3,D0
MOVE.W D0, SIM_BASE_ADDR+$92
MOVE.W #$40,D0
MOVE.W D0, SIM_BASE_ADDR+$94
MOVE.L #$f0000,D0
MOVE.L D0, SIM_BASE_ADDR+$98
MOVE.W #$0d9f,D0
MOVE.W D0, SIM_BASE_ADDR+$9e
MOVE.W #$50,D0
MOVE.W D0, SIM_BASE_ADDR+$A0
MOVE.L #$70014,D0
MOVE.L D0, SIM_BASE_ADDR+$a4
MOVE.W #$1c3,D0
MOVE.W D0, SIM_BASE_ADDR+$aa
MOVE.W #$0d00,D0
MOVE.W D0, SIM_BASE_ADDR+$c6
BRA CODE_MOVER ;goto executing your program
;//////////////////////////////////////////////////////////////////////////
;//
;// 6. copy program in flash ROM to DRAM
;//
;//////////////////////////////////////////////////////////////////////////
CODE_MOVER:
;// source address, add by 16 to exclude SP and PC's init value
;//MOVE.L #__FLASH_BASE_ADDR + 8, A0
;//MOVE.L #$600001B8, A0
;//MOVE.B #$01 , (A0)
MOVE.L #__PROGRAM_ADDR, A0
;// destination address space, from __START_ADDRESS
;// to __END_ADDR_OF_FLASH_TO_DRAM, this space have exclude loader program
;// and section "start" code
MOVE.L #__START_ADDRESS, A1
MOVE.L #__END_ADDR_OF_FLASH_TO_DRAM, D0
.L4:
CLR.L (A1)
MOVE.L (A0)+, (A1)+
CMP.L A1, D0
BHI .L4
;// 8. jump to execute program in DRAM
JMP __crt0 ;goto executing your program
;////////////////////////////////////////////////////////////////////////////
;/* */
;/* FUNCTION */
;/* */
;/* BEEP */
;/* */
;/* DESCRIPTION */
;/* */
;/* make buzzer to sound, this routine will not return forever. */
;/* the rhythm of sound ( one cycle, unit: millisecond): */
;/* */
;/* 150 150 150 150 150 */
;/* */
;/* on: --- --- --- --- --- */
;/* off: ---- ---- -------- ---- ------....-- */
;/* */
;/* 200 200 400 200 2000 */
;/* */
;/* CALLED BY */
;/* */
;/* SELF_TEST */
;/* */
;/* CALLS */
;/* */
;/* DELAY */
;/* */
;/* INPUTS, OUTPUTS */
;/* */
;/* None */
;/* */
;/* HISTORY */
;/* */
;/* NAME DATE REMARKS */
;/* lilinghua 10-9-1999 created */
;/* */
;////////////////////////////////////////////////////////////////////////////
BEEP:
;// sound on 150 ms
MOVE.B #ENABLE_BUZZER, D2
MOVE.B D2, (PARALLEL_PORT).L
MOVE.L #15, D0
BSR DELAY
;// sound off 200 ms
MOVE.B #DISABLE_BUZZER, D2
MOVE.B D2, (PARALLEL_PORT).L
MOVE.L #20, D0
BSR DELAY
;// sound on 150 ms
MOVE.B #ENABLE_BUZZER, D2
MOVE.B D2, (PARALLEL_PORT).L
MOVE.L #15, D0
BSR DELAY
;// sound off 200 ms
MOVE.B #DISABLE_BUZZER, D2
MOVE.B D2, (PARALLEL_PORT).L
MOVE.L #20, D0
BSR DELAY
;// sound on 150 ms
MOVE.B #ENABLE_BUZZER, D2
MOVE.B D2, (PARALLEL_PORT).L
MOVE.L #15, D0
BSR DELAY
;// sound off 400 ms
MOVE.B #DISABLE_BUZZER, D2
MOVE.B D2, (PARALLEL_PORT).L
MOVE.L #40, D0
BSR DELAY
;// sound on 150 ms
MOVE.B #ENABLE_BUZZER, D2
MOVE.B D2, (PARALLEL_PORT).L
MOVE.L #15, D0
BSR DELAY
;// sound off 200 ms
MOVE.B #DISABLE_BUZZER, D2
MOVE.B D2, (PARALLEL_PORT).L
MOVE.L #20, D0
BSR DELAY
;// sound on 150 ms
MOVE.B #ENABLE_BUZZER, D2
MOVE.B D2, (PARALLEL_PORT).L
MOVE.L #15, D0
BSR DELAY
;// sound off 2000 ms
MOVE.B #DISABLE_BUZZER, D2
MOVE.B D2, (PARALLEL_PORT).L
MOVE.L #200, D0
BSR DELAY
BRA BEEP
;//=======================================================================
;////////////////////////////////////////////////////////////////////////////
;/* */
;/* FUNCTION */
;/* */
;/* DELAY */
;/* */
;/* DESCRIPTION */
;/* */
;/* delay routine */
;/* */
;/* CALLED BY */
;/* */
;/* SELF_TEST, BEEP */
;/* */
;/* CALLS */
;/* */
;/* None */
;/* */
;/* INPUTS */
;/* */
;/* D0: delayed time( in 10 milliseconds) */
;/* */
;/* OUTPUTS */
;/* */
;/* None */
;/* */
;////////////////////////////////////////////////////////////////////////////
DELAY:
MOVE.L #$01a000, D1
INNER_LOOP:
SUBQ.L #1, D1
BHI INNER_LOOP
SUBQ.L #1, D0
BHI DELAY
RTS
;//=========================================================================
;////////////////////////////////////////////////////////////////////////////
;// section ".text" is C program assembly startup code for
;// an embedded environment.
;// -------------------------------------------------------
.text
__crt0:
;// initialize sp to value from link editor command file
move.l #___SP_INIT,a7
;// initialize a5 to sdata (provided by linker)
move.l #__SDA_BASE_,a5
jsr ___init_main ;// dummy to pull in main() as soon as possible
section .init,2,C
XDEF ___init
ALIGN 4
___init:
section .fini,2,C
;// Return from __init
rts
XDEF ___fini
___fini:
section .eini,2,C
;// Return from ___fini
rts
;//=========================================================================
;//end of startup self-test
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -