<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

          arm(lpc22xx)存儲器尋址

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

          片內(nèi)FLASH

          本文引用地址:http://www.ex-cimer.com/article/201611/317252.htm

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

          對處內(nèi)FLASH的編程有三種方法來實現(xiàn)

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

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

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

          片內(nèi)靜態(tài)RAM

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

          片外存儲器

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

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

          片外存儲器的讀寫

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

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

          存儲器映射

          給存儲器分配地址的過程稱為存儲器映射。

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

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

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

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

          BOOT?。拢蹋希茫苏加昧似瑑?nèi)FLASH的空間(除LPC2138的BOOT?。拢蹋希茫瞬徽加茫疲蹋粒樱瓤臻g),其大小為8KB..但由于各個芯片內(nèi)部FLASH的空間不同所以BOOT?。拢蹋希茫说奈恢靡灿兴煌拢希希浴。拢蹋希茫酥械挠幸恍┏绦蚴强梢员挥脩羲{(diào)用的,為了增加用戶代碼的可移植性則將BOOT?。拢蹋希茫恕〕绦虻糜成湓趦?nèi)部存儲器的最高位置!即接近2G(0x80000000)的地方

          注意:部分器件內(nèi)部雖然沒有用戶FLASH空間,但是它們?nèi)匀淮嬖冢拢希希浴。拢蹋希茫恕?,并且?fù)位后首先運行.

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

          LPC2000系列ARM芯片啟動過程LPC2000處理器啟動過程是:Memory Map--Remap--Boot--Remap四步。以LPC2292為例:片內(nèi)Flash的最高8kB在芯片出廠前寫入了Bootload程序和64字節(jié)的中斷向量表,這是啟動過程中重要的內(nèi)容。

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

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

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

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



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

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();