繁体   English   中英

在Armv6上外围端口重新映射和对齐

[英]Peripheral port remapping and alignment on armv6

在一个旧的Android平板电脑的引导程序中,我找到了一个代码块,该代码块禁用了mmu,然后重新映射了外围端口(发生了向超级用户模式的传输,但未显示)。

ROM:00000064  MOV R0, #0               ; r0 = 0
ROM:00000068  MCR p15, 0, R0,c7,c7, 0  ; invalidate instruction and data cache
ROM:0000006C  MCR p15, 0, R0,c8,c7, 0  ; invalidate tlb
ROM:00000070  MRC p15, 0, R0,c1,c0, 0  ; load the control register
ROM:00000074  BIC R0, R0, #0x2300      ; clear s, r, and v bits (mmu protection disabled, rom protection disabled, select normal exception vector location)
ROM:00000078  BIC R0, R0, #0x87        ; clear m, a, c, and b bits (disable mmu, disable strict alignment fault checking, disable data cache, little endian operation)
ROM:0000007C  ORR R0, R0, #2           ; set bit a (enable strict alignment fault checking)
ROM:00000080  ORR R0, R0, #0x1000      ; set bit I (enable level one instruction cache)
ROM:00000084  MCR p15, 0, R0,c1,c0, 0  ; update control register
ROM:00000088  MOV R0, #0x70000013      ; physical address = 0x70000, region size = 256M
ROM:00000090  MCR p15, 0, R0,c15,c2, 4 ; peripheral port remapped

我真的不明白如何重新映射外围端口。

ARM1176JZF-S技术参考手册》的第3-131页介绍了寄存器的工作方式。

位[31:12]设置外围端口的物理地址(如果禁用了mmu),而位[4:0]确定区域大小。

所选的物理地址必须与区域大小对齐。 我真的不明白这是什么意思。

给定仅20位的地址空间([31:12]),如何与256M的区域大小对齐?

对于上面的代码,执行命令后外围设备端口的实际物理地址是什么?

给定仅20位的地址空间([31:12]),如何与256M的区域大小对齐?

尽管手册中没有明确说明,但我假定20位是32位地址的高20位,而不是低位。

换一种说法:

该地址本身不是20位值,而是20位值乘以4096。

在这种情况下,如果20位值是256M / 4K = 65536的倍数,则该区域将对齐256M。

对于上面的代码,执行命令后外围设备端口的实际物理地址是什么?

如果我猜对了,那么上面代码中的地址将是0x70000000,而不是0x00070000。 但是,0x70000000是256M的倍数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM