ARM學(xué)習(xí)中LPC2104的Boot與Remap詳解
至此,Flash塊對(duì)內(nèi)存地址空間的占用情況如下:
1、除去因Remap被暫時(shí)注銷(xiāo)了映射關(guān)系的那小部分64字節(jié)的Flash子塊外,Flash塊作為一個(gè)整體占用的地址編碼空間為0x00000040—0x0001FFFF;
2、同時(shí),Bootload子塊又占用了0x7FFFE000—0x7FFFFFF的地址編碼空間,Bootload子塊中的異常向量表部分占用了0x00000000—0x0000003F。
因此,Bootload子塊中的異常向量表部分實(shí)際上是占用了重復(fù)占用了三段地址編碼空間:0x00000000—0x0000003F、0x0001E000—0x0001E03F以及0x7FFFE000—0x7FFFE03F。
圖2中,存儲(chǔ)器的映射順序?yàn)椋篗emory Map-〉Reset Remap-〉Bootload Remap。
SRAM塊和內(nèi)核外圍模塊的映射關(guān)系在Remap之后保持不變,可參見(jiàn)圖1。
* - 本貼最后修改時(shí)間:2005-3-10 17:31:19 修改者:andrewpei
* - 修改原因:Append
Boot
LPC2104有效的異常向量表地址編碼空間是0x00000000—0x0000003F(嚴(yán)格來(lái)說(shuō)應(yīng)該是0x00000000—0x0000001F)。處理器復(fù)位后的Boot動(dòng)作就是從0x00000000處起始字中取出跳轉(zhuǎn)指令,開(kāi)始程序的執(zhí)行。由于處理器復(fù)位后,映射到0x00000000—0x0000003F地址空間的異常向量表源于Bootload子塊,因此CPU實(shí)際上開(kāi)始執(zhí)行的是Philips在芯片出廠(chǎng)前寫(xiě)入的Bootload程序。
進(jìn)入Bootload后,程序首先檢查看門(mén)狗溢出標(biāo)志是否置位。
若看門(mén)狗溢出標(biāo)志置位,則表明當(dāng)前的系統(tǒng)復(fù)位是內(nèi)部軟復(fù)位,CPU下一步將對(duì)Flash塊中的異常向量表進(jìn)行加和校驗(yàn)。如果加和檢驗(yàn)結(jié)果為零,Bootload程序?qū)⒊蜂N(xiāo)Bootload子塊中異常向量表部分在0x00000000—0x00000003F地址空間上的映射,恢復(fù)Flash塊的異常向量表在這64字節(jié)地址空間上的映射關(guān)系(如圖3),然后跳轉(zhuǎn)到異常向量表地址0x00000000處轉(zhuǎn)入用戶(hù)程序的執(zhí)行。如果加和校驗(yàn)結(jié)果不為零,Bootload程序?qū)⑦M(jìn)行UART0接口的波特率自動(dòng)偵測(cè),隨時(shí)響應(yīng)ISP宿主機(jī)的編程請(qǐng)求,執(zhí)行處理器芯片的ISP編程工作。
若Bootload沒(méi)有發(fā)現(xiàn)看門(mén)狗溢出標(biāo)志置位,則表明當(dāng)前的系統(tǒng)復(fù)位是外部硬復(fù)位,CPU將采樣P0.14引腳的外部邏輯電平輸入。如果為0,Bootload執(zhí)行UART0的自動(dòng)波特率偵測(cè),隨時(shí)響應(yīng)ISP宿主機(jī)的編程請(qǐng)求;如果為1,Bootload的后續(xù)動(dòng)作將與前面檢測(cè)到看門(mén)狗溢出標(biāo)志置位的程序執(zhí)行完全相同。
Remap(可選)
最后這一步可選的Remap動(dòng)作完全處于用戶(hù)的控制之下,Remap的對(duì)象是片內(nèi)SRAM存儲(chǔ)器塊的異常向量部分,共計(jì)64字節(jié)大小。用戶(hù)可以編程決定何時(shí)Remap、Remap之后是否再修改異常向量表以及如何修改異常向量表等等。需要強(qiáng)調(diào)的是,引發(fā)Remap動(dòng)作的指令與建立SRAM塊中異常向量的所有功能代碼全部駐留在Flash塊的用戶(hù)編程區(qū)中,是用戶(hù)應(yīng)用軟件的一部分。
曾經(jīng)有網(wǎng)友對(duì)Philips在LPC2000系列處理器中引入這個(gè)可選的Remap功能提出質(zhì)疑:LPC2000系列處理器片內(nèi)的Flash塊被分割成了兩組,每組都配備了相互獨(dú)立的128位寬度的讀取緩沖,在絕大多數(shù)情況下,CPU從Flash塊的訪(fǎng)問(wèn)是全速進(jìn)行的,不存在有等待的狀況;另一方面,一般應(yīng)用LPC2000的嵌入式系統(tǒng)并不需要?jiǎng)討B(tài)地改變異常向量表。因此,對(duì)片內(nèi)SRAM進(jìn)行Remap后,并不能提高處理器對(duì)異常的響應(yīng)能力,實(shí)際意義不大。
事實(shí)上,LPC2000系列處理器引入SRAM的Remap功能對(duì)于IAP操作具有重要的意義。相對(duì)于其它基于A(yíng)RM7DMI內(nèi)核的處理器而言,LPC2000系列處理器有一個(gè)獨(dú)具特色的功能—IAP。在IAP擦除/寫(xiě)入操作時(shí),片上Flash塊,包括該塊上的異常向量部分,是無(wú)法被訪(fǎng)問(wèn)讀取的,為了在IAP擦除/寫(xiě)入操作時(shí)有效地響應(yīng)異常,必須在調(diào)用IAP擦除/寫(xiě)入操作之前,將SRAM中的異常向量部分提前映射到系統(tǒng)的異常向量表地址空間上。(待續(xù))
評(píng)論