<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > arm(lpc22xx)存儲器尋址

arm(lpc22xx)存儲器尋址

作者: 時(shí)間:2016-11-10 來(lái)源:網(wǎng)絡(luò ) 收藏
LPC2220/2230/2290沒(méi)有內部FLASH

片內FLASH

本文引用地址:http://dyxdggzs.com/article/201611/317252.htm

LPC2000系列ARM的片內FLASH通過(guò)128位寬度的總線(xiàn)與ARM內核相連,具有很高的速度,加上后面要介紹的存儲器加速功能,可以使程序直接在FLASH上運行,而不需要象其它公同的ARM微控制器一樣把程序復制到RAM中運行

對處內FLASH的編程有三種方法來(lái)實(shí)現

(1)使用JTAG仿真/調試,通過(guò)芯片的JTAG接口下載程序

(2)使用在系統編程技術(shù)(ISP),通過(guò)UART0接口下載程序

(3)使用在應用編程技術(shù)(IAP)使用這種方式,可以實(shí)現用戶(hù)程序運行時(shí)對FLASH進(jìn)行擦除/編程,這樣就為數據存儲和現場(chǎng)固件的升級都帶來(lái)極大的靈活性.

片內靜態(tài)RAM

LPC2000系列ARM的片內RAM為靜態(tài)的RAM,它可以用作代碼和數據的存儲.

片外存儲器

CPU外部擴展連接的存儲器芯片稱(chēng)為片外存儲器.它們都具有數據線(xiàn)、地址線(xiàn)和控制線(xiàn)。(LPC2100系列不存在這種總線(xiàn)接口:所以只能通過(guò)I/O口的模擬總線(xiàn)時(shí)序來(lái)操作片外存儲器,或者使用I2C、SPI等串行接口來(lái)連片外存儲器)

LPC2200系列ARM微控制器具備符合ARM公司的外部存儲器接口,通過(guò)它可以連接8位、16位或32位的片外存儲器。最多可以擴展4個(gè)BAND 的存儲器組,每存儲器組尋址范圍最大為16M。實(shí)際慶用中,使用16位總線(xiàn)寬度的存儲器可以獲得較好的性?xún)r(jià)比

片外存儲器的讀寫(xiě)

對于外擴的SRAM存儲器只需要一條LDR(STR)指令就可以進(jìn)行讀寫(xiě)操作。

對于外擴的FLASH(NOR型),可以使用LDR指令讀取數據,但是不能使用STR指令直接寫(xiě)數據,需要根據FLASH芯片寫(xiě)操作時(shí)序進(jìn)行控制,實(shí)現FLASH的擦除編程。如果需要將程序代碼燒寫(xiě)到FLASH芯片內,則需要在CPU內運行一個(gè)裝載程序Loder程序.

存儲器映射

給存儲器分配地址的過(guò)程稱(chēng)為存儲器映射。

存儲器的重映射:有部分存儲器單元可以出現在不同聽(tīng)地址上

注意:這個(gè)重映射不是將對映射單元內容的復制,而只是將多個(gè)地址指向了同一個(gè)存儲單元,這個(gè)效果是通過(guò)芯片內部的"存儲器管理部件"實(shí)現的.

引導塊(Boot Block)及其得映射

BOOT BLOCK是芯片設計廠(chǎng)家在LPC2000系列ARM內部固定的一段代碼,用戶(hù)無(wú)法對其修改或刪除.代碼在芯片復位后首先運行.其功能為 判斷運行哪個(gè)存儲器上的程序\檢查用戶(hù)代碼是否有效\判斷芯片是否加密\芯片的在應用編程以及在系統編程.

BOOT?。拢蹋希茫苏加昧似瑑龋疲蹋粒樱鹊目臻g(除LPC2138的BOOT?。拢蹋希茫瞬徽加茫疲蹋粒樱瓤臻g),其大小為8KB..但由于各個(gè)芯片內部FLASH的空間不同所以BOOT?。拢蹋希茫说奈恢靡灿兴煌?,而BOOT?。拢蹋希茫酥械挠幸恍┏绦蚴强梢员挥脩?hù)所調用的,為了增加用戶(hù)代碼的可移植性則將BOOT?。拢蹋希茫恕〕绦虻糜成湓趦炔看鎯ζ鞯淖罡呶恢?!即接近2G(0x80000000)的地方

注意:部分器件內部雖然沒(méi)有用戶(hù)FLASH空間,但是它們仍然存在BOOT?。拢蹋希茫恕?,并且復位后首先運行.

***************************************************************************

LPC2000系列ARM芯片啟動(dòng)過(guò)程LPC2000處理器啟動(dòng)過(guò)程是:Memory Map--Remap--Boot--Remap四步。以L(fǎng)PC2292為例:片內Flash的最高8kB在芯片出廠(chǎng)前寫(xiě)入了Bootload程序和64字節的中斷向量表,這是啟動(dòng)過(guò)程中重要的內容。

1.Memory Map(不受控制)LPC2292上電復位后,Flash和SRAM映射:SRAM占據0x40000000~0x40003FFF;Flash占據0x0~0x0003FFFF。此過(guò)程不受開(kāi)發(fā)人員控制。 Memory Map是一個(gè)邏輯概念,是計算機系統在(上電)復位后才建立起來(lái)的。Memory Map相當于這樣一個(gè)數學(xué)函數:函數的輸入量是地址編碼,輸出量被尋址單元中的數據。當計算機系統掉電后或復位時(shí),這個(gè)數學(xué)函數不復存在,只剩下計算機系統中實(shí)現這個(gè)數學(xué)函數的物理基礎——電路連接。也可以這樣認為:Memory Map是計算機系統(上電)復位時(shí)的預備動(dòng)作,是一個(gè)將CPU所擁有的地址編碼資源向系統內各個(gè)物理存儲器塊分配的自動(dòng)過(guò)程。

2.Remap(不受控制)Boot Block被整體Remap到了0x7fffe000~0x7fffffff。同時(shí),0x0~0x3f的64字節中斷向量區被暫時(shí)注銷(xiāo)映射關(guān)系,由Boot Block中的中斷向量代替。此過(guò)程不受開(kāi)發(fā)人員控制。此時(shí)地址空間分配: 除去Remap暫時(shí)注銷(xiāo)映射關(guān)系的64字節,Flash整體占用0x40~0x3ffff?!oot Block占用0x7fffe000~0x7fffffff,Boot Block中斷向量表占用0x0~0x3f?!∈聦?shí)上,Boot Block中斷向量表占用了三段地址編碼空間:0x0~0x3f,0x3e000~0x3e03f,0x7fffe000~0x7fffe03f。

3.Boot(不受控制)復位后Boot運作就是從0x0處起始字中取出跳轉指令,開(kāi)始程序的執行。由于Boot Block中斷向量映射到0x0,CPU實(shí)際執行的是Boot Block內的程序。然后,程序首先檢查看門(mén)狗溢出標志,置位表明系統內部軟復位。再檢查BOOT1和BOOT0是不是都為1,如果不是,則CPU從片外BANK0(0x80000000)執行用戶(hù)代碼,如果BOOT1和BOOT0是都為1,則CPU將對內部Flash中的中斷向量表進(jìn)行加和校驗,檢查用戶(hù)代碼是否有效,如果結果為0,Bootload程序將撤消Boot Block中斷向量表在0x0~0x3f地址空間的映射,恢復Flash中斷向量表在這64字節地址空間的映射,然后跳轉到地址0x00處轉入用戶(hù)程序的執行。如果加和校驗結果不為0,Bootload程序將進(jìn)行UART0接口的波特率自動(dòng)偵測,隨時(shí)響應ISP宿主機的編程請求,執行ISP編程工作。若Bootload沒(méi)有發(fā)現看門(mén)狗溢出標志置位,則表明當前系統是外部硬復位,CPU將采樣P0.14引腳外部邏輯電平輸入。如為0,Bootload執行UART0的自動(dòng)波特率偵測,隨時(shí)響應ISP宿主機的編程請求,執行ISP編程工作;如為1,Bootload的后續運作將與前面檢測到看門(mén)狗溢出標志置位的程序執行完全相同。 這部分復位流程具體可參見(jiàn)《ARM嵌入式基礎教程(上)》

4.Remap(可以控制)Remap的對象是片內SRAM存儲器的異常向量部分。用戶(hù)可編程決定何時(shí)Remap,Remap后是否再修改中斷向量表等等。引發(fā)Remap運作指令與建立SRAM塊中異常向量的所有功能代碼全部駐留在Flash塊的用戶(hù)編程區中,是用戶(hù)軟件的一部分。另:此Remap對IAP操作有重要意義。 整個(gè)過(guò)程存儲器變化如下:1.Memory Map(不受控制)芯片上電復位后,CPU給各個(gè)物理存儲器塊分配地址編碼資源。這時(shí)不存在多個(gè)地址對應同一個(gè)物理內存的現象。2.Remap(不受控制)在執行了Memory Map 后,Boot Block整體被Remap到了0x7fffe000~0x7fffffff,也就是將地址空間0x7fffe000~0x7fffffff用來(lái)表示Boot Block同一段物理內存。同時(shí),0x0~0x3f的64字節中斷向量區被暫時(shí)注銷(xiāo)映射關(guān)系(因為在判斷用戶(hù)代碼存在于哪個(gè)存儲空間之前,能存放異常向量表的存儲空間有兩個(gè),一個(gè)在片內f(wàn)lash的0x00-0x3f,另個(gè)在片內f(wàn)lash的頂端即bootblock區,所以在同一時(shí)間,二者只能有一個(gè)起作用。),由Boot Block中的中斷向量代替。這時(shí)Boot Block中斷向量表占用了三段地址編碼空間:0x0~0x3f,0x3e000~0x3e03f,0x7fffe000~0x7fffe03f,即這三段地址編碼空間都指向bootblock中的中斷向量表。3與4同上所述。



關(guān)鍵詞: armlpc22xx存儲器尋

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>