📄 startup.s
字号:
;#************************************************************************
;#
;# $Copyright 2001 Joseph J. Lemieux ALL RIGHTS RESERVED. $
;#
;# $Filename: C:\OSEKBook\src\CH13\src\startup.s $
;#
;# PURPOSE: RESET entry points and standard exception handlers
;#
;#
;#************************************************************************
.extern main
.extern InitSPR
.extern InitReg16
.extern InitReg32
.extern InitResetRegs16
.extern InitResetRegs32
.extern InitRAM
.extern cinit
.text
.globl _START
.globl _cstart
.section "reset"
or r3, r3, r3 ;# NOP
_cstart:
_START:
;#-------------------------------------------------------------------------
;# Initialize some general-purpose registers required by the Motorola EABI
;#-------------------------------------------------------------------------
lis r2,%hiadj(_SDA2_BASE_) #Initalize pointer to read-only SDA
addi r2,r2,%lo(_SDA2_BASE_)
lis r13,%hiadj(_SDA_BASE_) #Initalize pointer to read/write SDA
addi r13,r13,%lo(_SDA_BASE_)
lis r1,%hiadj(__SP_INIT) #Initalize stack pointer
addi r1,r1,%lo(__SP_INIT)
li r0,0 # r0 is assumed to be 0
stwu r0,-16(r1) # Terminate stack in preparation for
;# # C routines.
;# Initialize Critical Memory Registers
lis r4,%hiadj(_MEMORY_BASE_ADDR) # Load base address of registers
addi r4,r4,%lo(_MEMORY_BASE_ADDR)
lis r5,%hiadj(_MEMORY_MAP) # Load address of content table
addi r5,r5,%lo(_MEMORY_MAP)
li r6,0x1C # Counter of addresses
li r7,0x04 # Constant for math
_MemMap:
lwz r3,0(r5) #Get next register value
stw r3,0(r4) #Store to register
add r4,r4,r7 #Update pointers
add r5,r5,r7
sub. r6,r6,r7
bne cr0,_MemMap #Continue if not complete
;# Init SPR registers
bl InitSPR
;# Init 16 bit registers
lis r3,%hiadj(InitResetRegs16)
addi r3,r3,%lo(InitResetRegs16)
bl InitReg16
;# Init 32 bit registers
lis r3,%hiadj(InitResetRegs32)
addi r3,r3,%lo(InitResetRegs32)
bl InitReg32
;# Initialize Memory to 0x00000000
bl InitRAM
;# Initialize C variables
bl cinit
;# Jump to main() with argc=0
li r3,0
bl main
;#-------------------------------------------------------------------------
;# Trap if ever return from main
;#
.globl EXIT_MAIN
EXIT_MAIN:
b EXIT_MAIN
;#-------------------------------------------------------------------------
;#
;# Memory Register Map - This map must be in the same order as the BR
;# and OR registers in the memory region
;#
;#-------------------------------------------------------------------------
_MEMORY_MAP:
.if TARGET_MEMORY
.long 0x00000003 #BR0
.else
.long 0x00800003 #BR0 with FLASH at 0
.endif
.long 0xFFF80002 #OR0
.long 0x00400803 #BR1
.long 0xFFF80022 #OR1
.long 0x00C00003 #BR2
.long 0xFFE00022 #OR2
.long 0x02000403 #BR3
.long 0xFFFE0FF1 #OR3
.section "mach"
MachineCheck:
b MachineCheck
.section "algn"
AlignmentExc:
b AlignmentExc
.section "prog"
ProgramExc:
b ProgramExc
.section "fpu"
FPUnavail:
b FPUnavail
.section "sys"
SystemExcept:
b SystemExcept
.section "tr"
TraceEx:
b TraceEx
.section "fpa"
FloatPointAssist:
b FloatPointAssist
.section "ise"
ISEEx:
b ISEEx
.section "ipe"
IPEEx:
b IPEEx
.section "ide"
IDEEx:
b IDEEx
.section "dbk"
DBKEx:
b DBKEx
.section "ibk"
IBKEx:
b IBKEx
.section "imebk"
IMEBKEx:
b IMEBKEx
.section "inmebk"
INMEBKEx:
b INMEBKEx
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -