ARM Cortex-M3權威指南-總線架構圖和存儲系統(3)


系統圖

 

  • NVIC 嵌套向量中斷控制器
  • SYSTICK Timer 一個簡易的周期定時器,用於提供時基, 亦被操作系統所使用

系統滴答定時器是一個非常基本的倒計時定時器,用於在每隔一定的時間產生一個中斷,即使是系統在睡眠模式下也能工作。它使得 OS 在各 CM3 器件之間的移植中不必修改系統定時器的代碼,移植工作一下子容易多了。 SysTick 定時器也是實現在NVIC 內部的。

  • MPU 存儲器保護單元(可選)

MPU 是一個選配的單元,有些 CM3 芯片可能沒有配備此組件。如果有,則它可以把存儲器分成一些 regions,並分別予以保護。例如,它可以讓某些 regions在用戶級下變成只讀,從而阻止了一些用戶程序破壞關鍵數據

  • CM3BusMatrix 內部的 AHB 互連
  • AHB to APB 把 AHB 轉換為 APB 的總線橋
  • SW-DP/SWJ-DP 串行線調試端口/串行線 JTAG 調試端口。通過串行線調試協議或者是傳統的 JTAG 協議(專用於 SWJ-DP),都可以用於實現與調試接口的連接
  • AHB-AP AHB 訪問端口,它把串行線/SWJ 接口的命令轉換成 AHB 數據傳送
  • ETM 嵌入式跟蹤宏單元(可選組件),調試用。 用於處理指令跟蹤
  • DWT 數據觀察點及跟蹤單元,調試用。這是一個處理數據觀察點功能的模塊
  • ITM 儀器化跟蹤宏單元
  • TPIU 跟蹤單元的接口單元。所有跟蹤單元發出的調試信息都要先送給它,它再Cortex-M3
  • 轉發給外部跟蹤捕獲硬件的。
  • FPB Flash 地址重載及斷點單元

flash地址重載是指:當CPU訪問某條指令時,若該地址在FPB中“掛了號”,則將把該地址重映射到另一個地址,后者亦在編程FPB時指出。 實際結果是從映射過的地址處取指(通常,映射前的地址是flash中的地址,映射后的地址是SRAM中的地址,所以才是”Flash”地址重載)。此外,匹配的地址還能用來觸發斷點事件。

  • ROM 表 一個小的查找表,其中存儲了配置信息

存儲系統功能概覽

第一,它的存儲器映射是預定義的,並且還規定好了哪個位置使用哪條總線
第二,CM3的存儲器系統支持所謂的“位帶”(bit-band)操作。通過它,實現了對單一比特的原子操作。位帶操作僅適用於一些特殊的存儲器區域中。
第三,CM3 的存儲器系統支持非對齊訪問和互斥訪問。這兩個特性是直到了 v7M 時才出來的。
最后,CM3 的存儲器系統支持 both 小端配置和大端配置

存儲器映射

CM3 只有一個單一固定的存儲器映射。這一點極大地方便了軟件在各種 CM3 單片機間的移植。舉個簡單的例子,各款 CM3 單片機的 NVIC 和 MPU 都在相同的位置布設寄存器,使得它們變得與具體器件無關。盡管如此, CM3 定出的條條框框是粗線條的,它依然允許芯片制造商靈活細膩地分配存儲器空間,以制造出各具特色的單片機產品。
存儲空間的一些位置用於調試組件等私有外設,這個地址段被稱為“私有外設區”。私有外設區的組件包括:

  1.  閃存地址重載及斷點單元(FPB)
  2. 數據觀察點單元(DWT)
  3. 儀器化跟蹤宏單元(ITM)
  4. 嵌入式跟蹤宏單元(ETM)
  5. 跟蹤端口接口單元(TPIU)
  6. ROM 表

CM3的地址空間是4GB, 程序可以在代碼區,內部 SRAM 區以及外部 RAM 區中執行。但是因為指令總線與數據總線是分開的,最理想的是把程序放到代碼區,從而使取指和數據訪問各自使用自 己的總線,並行不悖。

內部 SRAM 區的大小是 512MB,用於讓芯片制造商連接片上的 SRAM,這個區通過系統總線來訪問。在這個區的下部,有一個 1MB 的位帶區,該位帶區還有一個對應的 32MB 的“位帶別名(alias)區”,容納了 8M 個“位變量”,位帶別名區里面的每個字對應位帶區的一個比特。位帶操作只適用於數據訪問,不適用於取指。通過位帶的功能,可以把多個布爾型數據打包在單一的字中,卻依然可以從位帶別名區中,像訪問普通內存一樣地使用它們。位帶別名區中的訪問操作是原子的,消滅了傳統的“讀-改-寫”三步曲。地址空間的 512MB 范圍由片上外設(的寄存器)使用。這個區中也有一條 32MB位帶別名,以便於快捷地訪問外設寄存器。例如,可以方便地訪問各種控制位和狀態位。要注意的是,外設內不允許執行指令。

1GB 的范圍,分別用於連接外部 RAM 和外部設備,它們之中沒有位帶。兩者的區別在於外部 RAM 區允許執行指令,而外部設備區則不允許。

0.5GB 的隱秘地帶,屬於 CM3 核心空間,包括了系統級組件,內部私有外設總線 s,外部私有外設總線 s,以及由提供者定義的系統外設。
私有外設總線有兩條:
    AHB 私有外設總線,只用於 CM3 內部的 AHB 外設,它們是:NVIC, FPB, DWT 和 ITM。
    APB 私有外設總線,既用於 CM3 內部的 APB 設備,也用於外部設備(這里的“外部”是對內核而言)。 CM3 允許器件制造商再添加一些片上 APB 外設到 APB 私有總線上,它們通過 ABP 接口來訪問。

CM3 中的 MPU 是選配的,由芯片制造商決定是否配上。
上述的存儲器映射只是個粗線條的模板,半導體廠家會提供更展開的圖示,來表明芯片中片上外設的具體分布, RAM 與 ROM 的容量和位置信息。

 

存儲器訪問屬性

CM3 在定義了存儲器映射之外,還為存儲器的訪問規定了 4 種屬性,分別是:

  • 可否緩沖(Bufferable)
  • 可否緩存(Cacheable)
  • 可否執行(Executable)
  • 可否共享(Sharable)

CM3 片內沒有配備緩存,也沒有緩存控制器,但是允許在外部添加緩存。通常,如果提供了外部內存,芯片制造商還要附加一個內存控制器,它可以根據可否緩存的設置,來管理對片內和片外 RAM 的訪問操作。如果配了 MPU,則可以通過它配置不同的存儲區,並且覆蓋缺省的訪問屬性。

  • 代碼區(0x0000_0000‐ 0x1FFF_FFFF)。該區是可以執行指令的,緩存屬性為 WT(“寫通”,Write Through),即不可以緩存。此區亦可寫數據。在此區上的數據操作是通過數據總線接口的(讀數據使用 D‐Code,寫數據使用 System),且在此區上的寫操作是緩沖的。
  • SRAM 區(0x2000_0000 – 0x3FFF_FFFF)。此區用於片內 SRAM,寫操作是緩沖的,並且可以選擇 WB‐WA(Write Back, Write Allocated)緩存屬性。此區亦可以執行指令,以允許把代碼拷貝到內存中執行——常用於固件升級等維護工作。
  • 片上外設區(0x4000_0000 – 0x5FFF_FFFF)。該區用於片上外設,因此是不可緩存的,也不可以在此區執行指令(這也稱為 eXecute Never, XN)。
  • 外部 RAM 區的前半段(0x6000_0000 ‐ 0x7FFF_FFFF)。該區用於片外 RAM,可緩存(緩FF_FFFF)。並且可以執行指令。
  • 外部 RAM 區的后半段(0x8000_0000 – 0x9FFF_FFFF)。除了不可緩存(WT)外,同前半段。
  • 外部外設區的前半段(0xA000_0000 – 0xBFFF_FFFF)。用於片外外設的寄存器,也用於多核系統中的共享內存(需要嚴格按順序操作,即不可緩沖)。該區也是個不可執行區。外部外設區的后半段(0xC000_0000 – 0xDFFF_FFFF)。目前與前半段的功能完全一致。
  • 系統區(0xE000_0000 – 0xFFFF_FFFF)。此區是私有外設和供應商指定功能區。此區不可執行代碼。系統區涉及到很多關鍵部位,因此訪問都是嚴格序列化的(不可緩存,不可緩沖)。而供應商指定功能區則是可以緩存和緩沖的。

 存儲器缺省訪問權限

CM3 有一個缺省的存儲訪問權限,它能防止用戶代碼訪問系統控制存儲空間,保護NVIC、MPU等關鍵部件。缺省訪問許可在下列條件時生效:1)沒有配備 MPU 2)配備了 MPU,但MPU未使能。

 位帶操作

位帶操作,可以使用普通的加載/存儲指令來對單一的比特進行讀寫。在CM3中中,有兩個區中實現了位帶。其中一個是 SRAM 區的最低 1MB 范圍,第二個則是片內外設區的最低 1MB 范圍。這兩個區中的地址除了可以像普通的 RAM 一樣使用外,它們還都有自己的“位帶別名區”,位帶別名區把每個比特膨脹成一個 32 位的字。當你通過位帶別名區訪問這些字時,就可以達到訪問原始比特的目的。

 

 

 位帶操作的優勢

通過GPIO控制LED點亮或者熄滅;對共享資源的互鎖訪問。

端模式

在 CM3 中, 是在復位時確定使用哪種端模式的,且運行時不得更改。指令預取永遠使用小端模式,在配置控制存儲空間的訪問也永遠使用小端模式(NVIC),另外外部私有總線地址也只使用小端模式。

存儲保護單元MPU

在Cortex-M3處理器中可以選配一個存儲器保護單元(MPU),它可以實施對存儲器(主要是內存和外設寄存器)的保護,從而使軟件更加健壯和可靠。如果打算啟用MPU,則在使用前,必須根據需要對其編程。如果沒有啟用MPU,則等同於系統中沒有配MPU。 MPU有如下的能力可以提高系統的可靠性:

  1. 阻止用戶應用程序破壞操作系統使用的數據
  2. 阻止一個任務訪問其它任務的數據區,從而把任務隔開
  3. 可以把關鍵數據區設置為只讀,從根本上消除了被破壞的可能。
  4. 檢測意外的存儲訪問,如,堆棧溢出,數組越界
  5. 此外,還可以通過MPU設置存儲器regions的其它訪問屬性,比如,是否緩區,是否緩沖等。

MPU在執行其功能時,是以所謂的“region”為單位的。一個region其實就是一段連續的地址,只是它們的位置和范圍都要滿足一些限制(對齊方式,最小容量等)。 CM3的MPU共支持8個regions,個數有限。允許啟用一個“背景region”(即沒有MPU時的全部地址空間),不過它是只能由特權級享用。在啟用MPU后,就不得再訪問定義之外的地址區間,也不得訪問未經授權的region。否則,將以“訪問違例”處理,觸發MemManage fault。MPU定義的regions可以相互交迭。如果某塊內存落在多個region中,則訪問屬性和權限將由編號最大的region來決定。比如,若1號region與4號region交迭,則交迭的部分受4號region控制。背景region與其他region重合的部分,就要受各region的限制。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM