日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

Cortex-M3存储器系统

發(fā)布時(shí)間:2025/3/15 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Cortex-M3存储器系统 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


一、存儲(chǔ)器系統(tǒng)的功能概覽

? 1、Cortex-CM3存儲(chǔ)器系統(tǒng)功能

?? 1)、存儲(chǔ)器映射是預(yù)定義的,并且還規(guī)定好了那個(gè)位置使用那條總線(xiàn)。

?? 2)、Cortex-CM3的存儲(chǔ)器系統(tǒng)支持“位帶”操作。

?? 3)、Cortex-CM3存儲(chǔ)器系統(tǒng)支持非對(duì)齊訪(fǎng)問(wèn)和互斥訪(fǎng)問(wèn)。

?? 4)、Cortex-CM3的存儲(chǔ)器系統(tǒng)支持both大端配置和小端配置。



二、存儲(chǔ)器映射

? 1、Cortex-CM3只有一個(gè)單一固定的存儲(chǔ)器映射。這極大方便了軟件在各種Cortex-CM3單片機(jī)間的移植。


? 2、存儲(chǔ)器的一些位置用于調(diào)試組件等私有外設(shè),這個(gè)地址被稱(chēng)為“私有外設(shè)區(qū)”。私有外設(shè)區(qū)的組件包括:

?? 1)、閃存地址重載及斷點(diǎn)單元(FPB)。

?? 2)、數(shù)據(jù)觀察點(diǎn)單元(DWT)。

?? 3)、指令跟蹤宏單元(ITM)。

?? 4)、嵌入式跟蹤宏單元(ETM)。

?? 5)、跟蹤端口接口單元(TPIU)。

?? 6)、ROM表。


? 3、Cortex-CM3的地址空間是4GB,程序可以在代碼區(qū),內(nèi)部SRAM區(qū)以及RAM區(qū)執(zhí)行。4GB粗線(xiàn)條劃分:

?? 1)、內(nèi)部SRAM區(qū)的大小是512MB,用于讓芯片制造商連接片上的SRAM,這個(gè)區(qū)通過(guò)系統(tǒng)總線(xiàn)來(lái)訪(fǎng)問(wèn)。在此區(qū)的下部,有一個(gè)1MB的位帶區(qū),該位帶區(qū)還有一個(gè)對(duì)應(yīng)的

???????????? 32MB的“位帶別名區(qū)”,容納了8M個(gè)“位變量”。位帶區(qū)對(duì)應(yīng)的是最低的1MB地址范圍,而位帶別名區(qū)里面的每個(gè)字對(duì)應(yīng)位帶區(qū)的一個(gè)比特。位帶操作只適用于數(shù)據(jù)訪(fǎng)問(wèn),

???????????? 不適用與取指操作。

?? 2)、地址空間另一個(gè)512范圍由片上外設(shè)(的寄存器)使用。這個(gè)區(qū)也有一條32MB的位帶別名,以便于快捷的訪(fǎng)問(wèn)外設(shè)寄存器。

?? 3)、還有兩個(gè)1GB的范圍,分別用于連接外部RAM和外部設(shè)備,它們之間沒(méi)有位帶。兩者的區(qū)別在于外部RAM區(qū)允許執(zhí)行指令,而外設(shè)設(shè)備區(qū)則不允許。

?? 4)、最后剩下0.5GB的地帶是Cortex-CM3內(nèi)核所在區(qū)域,包括系統(tǒng)級(jí)組件,內(nèi)部私有外部總線(xiàn)S,外部私有外部總線(xiàn)S,以及由提供者定義的系統(tǒng)外設(shè)。

?? 5)、私有外部總線(xiàn)有兩條

??? I、AHB外設(shè)總線(xiàn),只用于Cortex-CM3內(nèi)部的AHB設(shè)備,它們是:NVIC,FPB,DWT和ITM。

??? II、APB外設(shè)總線(xiàn),即用于Cortex-CM3內(nèi)部的APB設(shè)備,也用于外部設(shè)備

?? 6)、NVIC所處的區(qū)域叫做“系統(tǒng)控制空間(SCS)”在SCS里面還有SysTick、MPU以及代碼調(diào)試控制所用的寄存器:



三、存儲(chǔ)器訪(fǎng)問(wèn)屬性S

? 1、Cortex-CM3為存儲(chǔ)器做了映射之外,還為存儲(chǔ)器的訪(fǎng)問(wèn)規(guī)定了4中屬性:

?? 1)、可否緩沖(Bufferable)

?? 2)、可否緩存(Cacheable)

?? 3)、可否執(zhí)行(Executable)

?? 4)、可否共享(Shareable)


? 2、如果配置了MPU,則可以通過(guò)它配置不同的存儲(chǔ)區(qū),并且覆蓋缺省的訪(fǎng)問(wèn)屬性。



四、存儲(chǔ)器的缺省訪(fǎng)問(wèn)許可

? 1、Cortex-CM3有一個(gè)缺省的訪(fǎng)問(wèn)許可,它能防止使用戶(hù)代碼訪(fǎng)問(wèn)系統(tǒng)控制存儲(chǔ)空間,保護(hù)NVIC,MPU等關(guān)鍵組件。缺省訪(fǎng)問(wèn)許可在以下條件時(shí)生效:

?? 1)、沒(méi)有配置MPU。

?? 2)、配置了MPU,但是MOPU被除能。


? 2、存儲(chǔ)器的缺省訪(fǎng)問(wèn)許可


四、位帶操作

?一)、簡(jiǎn)介

? 1、支持位帶操作后,可以使用普通的加載/存儲(chǔ)指令來(lái)對(duì)單一的比特進(jìn)行讀寫(xiě)。在Cortex-CM3中,有兩個(gè)區(qū)實(shí)現(xiàn)了位帶。其中一個(gè)是SRAM區(qū)的最低1MB,第二個(gè)則是片內(nèi)外

??????? 設(shè)區(qū)的最低1MB范圍。這兩個(gè)區(qū)的地址除了可以像普通的RAM使用外,它也都有自己的“位帶別名區(qū)”,位帶別名區(qū)把每個(gè)比特膨脹成一個(gè)32位的字。

??1)、位帶區(qū)與別名區(qū)的膨脹對(duì)應(yīng)關(guān)系圖A

?? 2)、位帶區(qū)與別名區(qū)的膨脹對(duì)應(yīng)關(guān)系圖B


? 2、Cortex-CM3用如下術(shù)語(yǔ)來(lái)表示位帶存儲(chǔ)的地址區(qū)

?? 1)、位帶區(qū):支持位帶操作的地址區(qū)。

?? 2)、位帶別名:對(duì)別名地址的訪(fǎng)問(wèn)最總作用到位帶區(qū)的訪(fǎng)問(wèn)上。(注意:這中途有一個(gè)地址映射過(guò)程)


? 3、在位帶區(qū)中每個(gè)比特都都映射到別名地址區(qū)的一個(gè)字——這是只有LSB有效的字。當(dāng)一個(gè)別名地址被訪(fǎng)問(wèn)時(shí),會(huì)先把改地址變換成位帶地址。

?? 1)、對(duì)于讀操作,讀取位帶地址中的一個(gè)字,再把需要的位右移到LSB,并把LSB返回。

?? 2)、對(duì)于寫(xiě)操作,把需要寫(xiě)的位左移到對(duì)應(yīng)的位序號(hào)處,然后執(zhí)行一個(gè)原子的“讀-改-寫(xiě)”過(guò)程。


? 4、支持位帶操作的兩個(gè)內(nèi)存區(qū)的范圍是:

?? 1)、0x2000_0000-0x000F_FFFF(SRAM區(qū)中的最低1MB)和0x4000_0000-0x400F_FFFF(片上外設(shè)區(qū)中的最低1MB)。

?? 2)、對(duì)于SRAM位帶區(qū)的某個(gè)比特,記它所在字節(jié)地址為A,位序號(hào)為n,則該比特在別名區(qū)的地址是:

?? 3)、對(duì)于片上外設(shè)位帶區(qū)的某個(gè)比特,記它所在字節(jié)地址為A,位序號(hào)為n,則該比特在別名區(qū)的地址是:


? 5、位帶地址映射

?? 1)、SRAM區(qū)中的位帶地址映射

?? 2)、片上外設(shè)區(qū)中的位帶地址映射



?二)、位帶操作的優(yōu)越性

?? 1、位帶操作對(duì)硬件I/O密集型的底層程序提供了很大方便。

?

?? 2、位帶操作可用來(lái)化簡(jiǎn)跳轉(zhuǎn)的判斷。是代碼更整潔。


? 3、在多任務(wù)中用于實(shí)現(xiàn)共享資源在任務(wù)間的“互鎖”訪(fǎng)問(wèn)。


?三)、其他數(shù)據(jù)長(zhǎng)度上的位帶操作

? 1、位帶操作并不限于以字為單位的傳送。亦可以按半子節(jié)和字節(jié)為單位傳送。




五、在C語(yǔ)言中使用位帶操作

? 1、C編譯器中并沒(méi)有直接支持位帶操作。欲在在C中使用位帶操作,最簡(jiǎn)單的做法就是#define一個(gè)位帶別名區(qū)的地址。為了簡(jiǎn)化位帶操作,也可以定義一些宏。


? 2、當(dāng)使用位帶功能時(shí),要訪(fǎng)問(wèn)的變量必須用vollatile來(lái)定義。



六、非對(duì)齊數(shù)據(jù)傳送

? 1、Cortex-CM3支持在單一的訪(fǎng)問(wèn)中使用非(地址)對(duì)齊的傳送,數(shù)據(jù)存儲(chǔ)器的訪(fǎng)問(wèn)無(wú)需對(duì)齊。


? 2、非對(duì)齊傳送實(shí)例

? 3、在Cortex-CM3中,非對(duì)齊的數(shù)據(jù)傳送只發(fā)生在常規(guī)的數(shù)據(jù)傳送指令中,其他的指令則不支持:

?? 1)、多個(gè)數(shù)據(jù)的加載存儲(chǔ)(LDM/STM)。

?? 2)、棧堆操作(PUSH/POP)。

?? 3)、互斥訪(fǎng)問(wèn)(LDREX/STREX)。

?? 4)、位帶操作。


? 4、應(yīng)該養(yǎng)成好習(xí)慣,總是保持地址對(duì)齊。為此可以變成NVIC,使之監(jiān)督地址對(duì)齊。



七、互斥訪(fǎng)問(wèn)

? 1、在Cortex-CM3中,用互斥體訪(fǎng)問(wèn)取代了ARM處理器中的SWP指令。


? 2、互斥訪(fǎng)問(wèn)的理念同SWP非常相似,不同點(diǎn)在于:在互斥訪(fǎng)問(wèn)操作下,允許互斥體所在的總線(xiàn)被其他master訪(fǎng)問(wèn),也允許被其他運(yùn)行在本機(jī)上的任務(wù)訪(fǎng)問(wèn),但是Cortex-CM3

??????? 能駁回有可能導(dǎo)致竟態(tài)條件的互斥訪(fǎng)問(wèn)。


? 3、互斥訪(fǎng)問(wèn)分為加載/存儲(chǔ),相應(yīng)的指令為L(zhǎng)DREX/STREX,LDREXH/STREXH,LDREXB/STREXB,分別對(duì)應(yīng)于字/半字/字節(jié)


? 4、使用方式(以L(fǎng)DREX/STREX為例)

?? 1)、語(yǔ)法格式

?? 2)、LDREX指令與LDR相同。而STREX不同,STREX指令的執(zhí)行是可以被駁回的。

??? I、當(dāng)處理器同意執(zhí)行STREX,Rxf的值會(huì)被存儲(chǔ)到(Rn+Offset)處,并且把Rd的值更新。

??? II、若處理器駁回了STREX的執(zhí)行,則不會(huì)發(fā)生存儲(chǔ)動(dòng)作,并且把Rd的值更新為1。

?? 3)、駁回規(guī)則:只有在LDREX執(zhí)行后最近的一條STREX才能成功執(zhí)行。其他情況下,駁回此STREX

??? I、中途有其他STR指令執(zhí)行。

??? II、中途有其他的STREX執(zhí)行。

?? 4)、當(dāng)時(shí)用互斥訪(fǎng)問(wèn)時(shí),LDREX/STREX指令必須成對(duì)使用。



八、端模式

? 1、Cortex-CM3支持both小端模式和大端模式。在絕大多數(shù)情況下,Cortex-CM3都是用小端模式——為了避免不必要的麻煩,推薦使用小端模式。


? 2、Cortex-CM3中對(duì)大端模式的定義與ARM7的不同(小端定義都相同)。在ARM7中大端模式稱(chēng)為“字不變大端”,而在Cortex-CM3中,使用的是“字節(jié)不變大端”。

?? 1)、Cortex-CM3的字節(jié)不變大端:存儲(chǔ)器視圖

?? 2)、Cortex-CM3的字節(jié)不變大端:在ABH上的數(shù)據(jù)

?? 3)、ARM7字節(jié)不變大端:在ABH上的數(shù)據(jù)


? 3、在Cortex-CM3,是在復(fù)位時(shí)確定使用那種端模式的,且運(yùn)行時(shí)不得改變。指令預(yù)取永遠(yuǎn)使用小端模式,在配置控制存儲(chǔ)空間的訪(fǎng)問(wèn)也永遠(yuǎn)小端模式(包括NVIX,FPB之

??????? 流)。另外外部私有總線(xiàn)地址區(qū)0xE0000000至0xE00FFFFF也永遠(yuǎn)使用小端模式。

總結(jié)

以上是生活随笔為你收集整理的Cortex-M3存储器系统的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。