⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 startup.s

📁 《OSEK/VDX汽车电子嵌入式软件编程技术》中光盘的资料
💻 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 + -