|
目前在做bootloader 在汇编中要对mmu设置虚拟地址和物理地址的映射关系 我在OEMAddressTable是这样的
DCD 0x80000000, 0x33E00000, 2 ; 64 MB DRAM BANK 6
DCD 0x8C000000, 0x30000000, 62 ; 64 MB DRAM BANK 6
DCD 0x84000000, 0x10000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 2 - XD
DCD 0x86000000, 0x18000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 3 - NAND
DCD 0x88000000, 0x20000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 4 - SRAM or ATA
DCD 0x8A000000, 0x28000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 5 - Ethernet
DCD 0x90800000, 0x48000000, 1 ; SDRAM control register
DCD 0x90900000, 0x49000000, 1 ; USB Host register
DCD 0x90A00000, 0x4A000000, 1 ; Interrupt Control register
DCD 0x90B00000, 0x4B000000, 1 ; DMA control register
DCD 0x90C00000, 0x4C000000, 1 ; Clock & Power register
DCD 0x90D00000, 0x4D000000, 1 ; LCD control register
DCD 0x90E00000, 0x4E000000, 1 ; NAND flash control register
DCD 0x90F00000, 0x4F000000, 1 ; SSMC control
DCD 0x91000000, 0x50000000, 1 ; UART control register
DCD 0x91100000, 0x51000000, 1 ; PWM timer register
DCD 0x91200000, 0x52000000, 1 ; USB device register
DCD 0x91300000, 0x53000000, 1 ; Watchdog Timer register
DCD 0x91400000, 0x54000000, 1 ; IIC control register
DCD 0x91500000, 0x55000000, 1 ; IIS control register
DCD 0x91600000, 0x56000000, 1 ; I/O Port register
DCD 0x91700000, 0x57000000, 1 ; RTC control register
DCD 0x91800000, 0x58000000, 1 ; A/D convert register
DCD 0x91900000, 0x59000000, 1 ; SPI register
DCD 0x91A00000, 0x5A000000, 1 ; SD Interface register
DCD 0x91B00000, 0x48800000, 1 ; Extrenal Bus Interface
DCD 0x91C00000, 0x4D800000, 1 ; Camera control register
DCD 0x91D00000, 0x4B800000, 1 ; ATAPI control register
DCD 0x92000000, 0x00000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 0
DCD 0x00000000, 0x00000000, 0 ; end of table
当汇编走到
mrc p15,0,r1,c1,c0,0
orr r1, r1, #0x0071 ; Enable: MMU
orr r1, r1, #0x0004 ; Enable the cache
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
VirtualStart
ldr sp, =0x8F020000
b main
我知道原因应该是在开启MMU之后 虚拟地址和物理地址关系不对造成的 我应该怎么修改呢,能不能给个思路啊??
|
|