请教6410 EBOOT Startup.s MMU初始化
; The page tables and exception vectors are setup.
; Initialize the MMU and turn it on.
mov r1, #1
mcr p15, 0, r1, c3, c0, 0 ; setup access to domain 0
mcr p15, 0, r10, c2, c0, 0
mcr p15, 0, r0, c8, c7, 0 ; flush I+D TLBs
mrc p15, 0, r1, c1, c0, 0
orr r1, r1, #0x0071 ; Enable MMU
orr r1, r1, #0x0004 ; Enable the Data Cache
; ----- TURN ON 4 LED OK------------
ldr r0, =VirtualStart
cmp r0, #0 ; make sure no stall on "mov pc,r0" below
mcr p15, 0, r1, c1, c0, 0
mov pc, r0 ; & jump to new virtual address
nop
; MMU & caches now enabled.
; (r10) = physcial address of 1st level page table
;-----------------------------------------------
; MMU Enabled and Virtual Address is Valid from here
;-----------------------------------------------
VirtualStart
;--------------------------------------------------
; Initialize Stack
; Stack size and location information is in "image_cfg.inc"
;--------------------------------------------------
mrs r0, cpsr
bic r0, r0, #Mode_MASK
orr r1, r0, #Mode_IRQ | NOINT
msr cpsr_cxsf, r1 ; IRQMode
ldr sp, =IRQStack_VA ; IRQStack
bic r0, r0, #Mode_MASK | NOINT
orr r1, r0, #Mode_SVC
msr cpsr_cxsf, r1 ; SVCMode
ldr sp, =SVCStack_VA ; SVCStack
;----TURN ON 4 LED , LED不会亮... 估计跑飞了...
ldr r1, =0x7F008800 ;GPKCON0 GPK0-GPK7
ldr r2, =0x11111111 ;OUTPUT
str r2, [r1]
ldr r1, =0x7F008808 ;GPKDAT
ldr r2, =0x0000
str r2, [r1]
ldr r1, =0x7F00880C ;GPKPUD
ldr r2, =0x00000000
str r2, [r1]
;------------------------------------
; Jump to Main() "C" Routine
;------------------------------------
b main
b . ; Should no be here...
--------------------------------------------------------------------------
若没执行底下这段码. LED有亮.可跳到MAIN.C 正常执行.
但是mmu, data cache, icache 有打开了.执行换图1024x600速度仍然不快.是因为没用虚拟地址(VA)吗?
ldr r0, =VirtualStart
cmp r0, #0 ; make sure no stall on "mov pc,r0" below
mcr p15, 0, r1, c1, c0, 0
mov pc, r0 ; & jump to new virtual address
nop
若要让4颗LED亮, 该怎么处理呢?
[ 此帖被13f在2012-11-23 17:56重新编辑 ]