簡述
ARM7的Memory空間為4G(32 bit尋址空間決定)。不過對于嵌入式的這種MCU而言,其實很多空間都是保留的,隻使用了其中的一小部分。
Memory Map
先看總體的圖:
AHB
AHB部分的memory map如下:
AHB部分在LPC2478的系統架構部分有介紹過其子產品,這裡就是對應那些子產品的控制時所設計的一些memory配置設定。VIC, LCD, USB, EMC, GDMA, Ethernet。
APB
APB各外設子產品控制的memory位址配置設定:
Memory remap和boot ROM
Memory remap即記憶體重映射,其實這裡隻重映射了一部分,即中斷向量表部分,使得在通路被重映射後的區域的memory時能起到進入中斷向量表的作用。boot ROM則是IC内部其實除了Flash區域,還有小部分的ROM代碼用來啟動用的,這部分代碼是在IC生産時就固化不可更改的。
中斷向量位址表
ARM7的中斷向量位址是固定的,在位址空間的起始部分的0x0000 0000到0x0000 001C這段。
Memory mapping 模式
Memory remap中斷向量表是因為需要在不同的模式下都要能夠通路到中斷向量表。為何不同的模式中斷向量表要remap呢?
覺得一種可能是因為考慮到在不同的代碼運作模式下,具體的中斷服務(ISR)的處理方式可能是不一樣的,可能在正常使用者代碼運作模式下,IRQ發生時就會立即處理,而在IC的Boot代碼運作模式下,可能是另外的處理方法。
另外一種可能,中斷向量位址所處位置是Flash位址,比如在Boot Loader階段的時候,Flash中如果并沒有燒寫代碼(起始使用者代碼在編寫的時候看到定義了中斷向量表的入口了,但這些隻是使用者代碼會用到的處理方式,Boot Loader可不一定是這麼來用的),此時Boot Loader代碼中有需要用到中斷來處理的,此時就必須将Boot代碼中的中斷向量表給重映射到位址空間的起始位置了。
先看下不同的模式:
Boot Loader模式
在IC reset之後,都會來執行這段Boot Loader,而此時Boot ROM interrupt vectors并重映射到位址空間的底部,用來處理在Boot Loader模式下的中斷。
User Flash模式
在進入User Flash模式(Boot Loader完成,将使用者代碼運作環境等準備好了,一般會看到是跳入main來表示進入使用者代碼)後,前面Boot Loader階段的Boot ROM interrupt vectors不再重映射,這樣User Flash模式下就使用者代碼中的中斷向量表了。
User RAM模式
會将中斷向量表重映射到Static RAM的底部,即0x4000 0000位址開始的地方。
User External memory模式
會将中斷向量表重映射到external memory bank 0。