天天看點

[ARM7--LPC2478]Memory Map

簡述

ARM7的Memory空間為4G(32 bit尋址空間決定)。不過對于嵌入式的這種MCU而言,其實很多空間都是保留的,隻使用了其中的一小部分。

Memory Map

先看總體的圖:

[ARM7--LPC2478]Memory Map

AHB

AHB部分的memory map如下:

[ARM7--LPC2478]Memory Map

AHB部分在LPC2478的系統架構部分有介紹過其子產品,這裡就是對應那些子產品的控制時所設計的一些memory配置設定。VIC, LCD, USB, EMC, GDMA, Ethernet。

APB

APB各外設子產品控制的memory位址配置設定:

[ARM7--LPC2478]Memory Map

Memory remap和boot ROM

Memory remap即記憶體重映射,其實這裡隻重映射了一部分,即中斷向量表部分,使得在通路被重映射後的區域的memory時能起到進入中斷向量表的作用。boot ROM則是IC内部其實除了Flash區域,還有小部分的ROM代碼用來啟動用的,這部分代碼是在IC生産時就固化不可更改的。

中斷向量位址表

[ARM7--LPC2478]Memory Map

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。

不同模式的可被remap部分的示意圖

關于remap的一些了解