📄 startup.s
字号:
;
; Copyright (c) Special Computing. All rights reserved.
; Copyright (c) Microsoft Corporation. All rights reserved.
; Copyright (c) Texas Instruments. All rights reserved.
;
;------------------------------------------------------------------------------
;
; File: startup.s
;
; Kernel startup routine for OMAP3530 BeagleBoard. We are using
; standard oal startup routine.
;
INCLUDE kxarm.h
IMPORT KernelStart
TEXTAREA
;-------------------------------------------------------------------------------
;
; Function: StartUp
;
; This function is entry point to Windows CE OS. It should be called
; in state with deactivated MMU and disabled caches.
;
; Main system initialization is made in X-Loader (for NAND systems)
; or IPL (for NOR systems without X-Loader).
;
LEAF_ENTRY StartUp
;---------------------------------------------------------------
; Initialize cache
;---------------------------------------------------------------
; b flash_USER0_LED
;; turn off I/D-cache
; mrc p15, 0, r1, c1, c0, 0
; bic r1, r1, #0x1000
; bic r1, r1, #0x0004
; mcr p15, 0, r1, c1, c0, 0
; Invalidate TLB and I cache
mov r0, #0
mcr p15, 0, r0, c8, c7, 0 ; invalidate TLBs
mcr p15, 0, r0, c7, c5, 0 ; invalidate icache
;; turn off l2 cache
;; ES2 and up we can disable/enable L2
; mrc p15, 0, r1, c1, c0, 1
; bic r1, r1, #0x2
; mcr p15, 0, r1, c1, c0, 1
; Flush D cache
mrc p15, 1, r0, c0, c0, 1
ands r3, r0, #0x7000000
mov r3, r3, lsr #23
beq %F5
mov r10, #0
1
add r2, r10, r10, lsr #1
mov r1, r0, lsr r2
and r1, r1, #7
cmp r1, #2
blt %F4
mcr p15, 2, r10, c0, c0, 0
; isb
mov r1, #0
mcr p15, 0, r1, c7, c5, 4 ; simulate isb
mrc p15, 1, r1, c0, c0, 0
and r2, r1, #7
add r2, r2, #4
ldr r4, =0x3ff
ands r4, r4, r1, lsr #3
clz r5, r4
ldr r7, =0x7fff
ands r7, r7, r1, lsr #13
2
mov r9, r4
3
orr r11, r10, r9, lsl r5
orr r11, r11, r7, lsl r2
mcr p15, 0, r11, c7, c14, 2
subs r9, r9, #1
bge %B3
subs r7, r7, #1
bge %B2
4
add r10, r10, #2
cmp r3, r10
bgt %B1
5
mov r10, #0
mcr p15, 2, r10, c0, c0, 0
; isb
mov r1, #0
mcr p15, 0, r1, c7, c5, 4 ; simulate isb
mov r0, #0
mcr p15, 0, r0, c7, c10, 4 ; mem barrier to sync up
; ; Set MMU options
; mrc p15, 0, r0, c1, c0, 0
; orr r0, r0, #(1 :SHL: 1) ; Set the A bit to enable alignment checking.
; mcr p15, 0, r0, c1, c0, 0
; b flash_USER0_LED
;---------------------------------------------------------------
; Jump to WinCE KernelStart
;---------------------------------------------------------------
; Compute the OEMAddressTable's physical address and
; load it into r0. KernelStart expects r0 to contain
; the physical address of this table. The MMU isn't
; turned on until well into KernelStart.
add r0, pc, #g_oalAddressTable - (. + 8)
bl KernelStart
b .
flash_USER0_LED
ldr r0, =0x00400000 ; USER1 LED on GPIO_149
ldr r1, =0x49056090 ; clear bit location
ldr r2, =0x49056094 ; set bit location
11 str r0, [r1] ; off
ldr r3, =0x03ffffff ; STALL
20 subs r3, r3, #1
bne %B20
str r0, [r2] ; on
ldr r3, =0x03ffffff ; STALL
25 subs r3, r3, #1
bne %B25
b %b11
; Include memory configuration file with g_oalAddressTable
INCLUDE addrtab_cfg.inc
ENTRY_END
END
;------------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -