2016年12月29日 星期四

ARM的Memory劃分架構

http://www.programmer-club.com.tw/ShowSameTitleN/embedded/2447.html


ARM唯一有規定的是
Reset: 0x00000000
Undefined instructions: 0x00000004
Software interrupt: 0x000000008
Prefetch abort: 0x0000000C
Data abort: 0x00000010
IRQ: 0x00000018
FIQ: 0x0000001C
如果那一種ARM系列support high vector, 還可以調成從
0xFFFF0000開始

至於你說的flash/sdram 是有相關, 不過都要看implementation, ARM本身是不管
最後的週邊的 (即使SDRAM也是一樣), 這些是使用ARM core的SOC廠商訂定的, 
所以...沒有一定的標準, 大致上
會與ARM系列的memory co-processor有點關係, 
1. 如果是用protection unit, 會由SOC廠商訂出方法, 例如SAMSUNG 2510是設定
    0xF0000000的system register的bit 8來開關remap
2. 如果是以MMU的方式, 由於physical address和virual address是分離的, 所以是
   由軟體來設定即可, 例如OMAP850/OMAP2430

至於為何0x00000000-0x0000001F這麼重要, 從前面可以看出, 所以, 在沒設定好前,
interrupt是要在disable的狀態.

你想要瞭解memory mapping, 一定要針對某一顆SOC, 每一顆都不同, 不過請區分清楚
physical memory, remap, virtual memory
在有virtual memory的ARM系列, 不會再多做remap, 或從另一個角度而言, 如何從
virtual memory map到physical memory, 完全是軟體, 或software designer的事.

沒有留言:

張貼留言