一、流水線
1、cortex-cm3處理器使用乙個3級流水線,流水線的3級分別是:取指,解碼和執行:
2、當執行的指令大多數是16位時,處理器會每隔乙個週期做一次取指。當執行到跳轉指令時需要清洗流水線,處理器會不得不跳轉目的地重新取指。為了改善這種情
況,cortex-cm3支援一定數量的v7m指令可以避免很多短程跳轉。
3、由於流水線的存在,以及出於對thumb**相容的考慮,讀取pc會返回當前指令位址+4的值。
4、在處理器核心的預取單元中也有乙個指令緩衝區,它允許後續的指令在執行前現在裡面排隊,也能在執行未對齊的32位指令時,避免流水線斷流。
二、詳細框圖
1、cortex-cm3處理器裡面除了處理核心外,還有其他好多元件,以用於系統管理和除錯支援:
1)、mpui和etm是可選元件,不一定會包含在每乙個cortex-cm3的mcu中。
2)、方框圖中的縮寫及定義
2、cortex-cm3處理器是以乙個處理器子系統呈現的,其cpu核心本身與nvic和一系列除錯塊都緊密耦合:
1)、cm3core:cortex-cm3處理器的**處理核心。
2)、巢狀向量中斷控制器nvic:nvic是乙個在cortex-cm3中內建的中斷控制器。
3)、systick定時器:系統滴答定時器是乙個非常基本的到時器定時器,用於在每隔一定的時間產生乙個中斷,即使是系統在睡眠模式下也能工作。
4)、儲存器保護單元:mpu是乙個選配的單元,有些cortex-cm3可能沒有配置此元件。如果有,則它可以把儲存器分成一些regions,並分別給予保護。
5)、busmatrix:busmatrix是cortex-cm3內部匯流排系統的核心。
7)、圖框中其他的元件都用於除錯,通常不會再應用程式中使用它們。
3、其他除錯元件
1)、sw-dp/swj-dp:序列線除錯埠(sw-dp)/串列埠線jtag除錯埠(swj-dp)都與ahb訪問埠(ahb-pb)協同工作,以使外部偵錯程式可以發起ahb上的資料傳
送,從而執行除錯活動。
2)、ahb-ap:ahb訪問埠通過少量的暫存器,提供了對全部cortex-cm3儲存器的訪問機能。
3)、嵌入式跟蹤單元etm:etm用於實現實時指令跟蹤,但它是乙個選配件,所以不是所有的cortex-cm3產品都具有實時指令跟蹤能力。
4)、資料觀察點及跟蹤單元:通過dwt,可以設定資料觀察點。
5)、指令跟蹤單元itm:軟體可以通過該模組直接把訊息送給tpiu;還可以讓dwt匹配命中事件通過itm產生資料跟蹤包,並把它輸出到乙個資料跟蹤流中。
6)、跟蹤埠的介面單元tpiu:tpiu用於跟外部的跟蹤硬體互動。
8)、rom表:只是乙個簡單的查詢表,提供了儲存器對映資訊,這些資訊包括多種系統裝置和除錯元件。
三、cortex-cm3的匯流排介面
1、i-code匯流排
1)、i-code匯流排是一條基於ahb-lite匯流排的32位匯流排,負責在0x0000_0000-0x1fff_ffff之間取指操作。
2)、取指以字的長度執行,即使是對於16位指令也是如此.因此cpu核心可以一次取出兩條16位指令。
2、d-code匯流排
1)、d-code匯流排是一條基於ahb-lite匯流排的32位匯流排,負責在0x0000_0000-0x1fff_ffff之間取指操作。
2)、鏈結到d-code匯流排上的任何裝置都只需支援ahb-lite的對齊訪問,不需要支援非對齊訪問。
3、系統匯流排
1)、系統匯流排是一條基於ahb-lite匯流排的32位匯流排,負責在0x2000_0000-0xdfff-ffff和0xe010_0000-0xffff_ffff之間的所有資料傳送。取指和資料訪問都有。
2)、所有的資料傳輸都是對齊的。
4、外部私有外設匯流排
1)、基於apbzing匯流排協議的32位匯流排。此匯流排負責0xe004_0000-0xe00f_ffff之間的私有外設訪問。
2)、但是apb的一部分空間已經被tpiu、etm以及rom錶用掉了,就只留下0xe004_2000-0xe00f_f000這個區間用於附加的(私有)外設。
5、除錯訪問埠匯流排
1)、除錯訪問埠匯流排介面是一條基於」增強型apb規格「的32位匯流排,它專用於掛接除錯介面。
四、cortex-cm3的其他介面
1、除了匯流排介面之外,cortex-cm3還有幾個用於其它目的的介面,這些介面的訊號都不大可能會引出到引腳上,而只用於連線soc不同的部分,或者乾脆就沒有使用。
2、雜項介面訊號
五、外部私有外設匯流排
1、cortex-cm3處理器有乙個外部私有外設匯流排(ppb)介面。外部ppb介面是基於高階外設匯流排(apb)協議構造的。用於非共享的系統裝置。
2、為了支援coresight裝置,該介面又包含了稱為「paddr31」的訊號,給出傳送的發源地:
1)、若該訊號為0,則表示是執行在cortex-cm3內部的軟體產生的傳送操作。
2)、若為1,則表示是除錯軟體產生了傳送操作。
3、外部私有外設匯流排是專用的,不服務於普通的外設,這惡鬼規矩只能靠晶元設計者自覺遵守。
4、外部ppb不支援非對齊訪問。
六、典型的連線方式
1、匯流排介面與其他裝置和儲存器的典型連線
2、**儲存區既可以被指令匯流排(i-code)訪問,也可以被資料匯流排(d-code)訪問,此時需要在中間插入乙個匯流排開關,稱為匯流排矩陣或者使用乙個ahb匯流排復用器。
1)、如果使用了匯流排矩陣,則快閃儲存器和附加的sram可以被both i-code和d-code訪問。
2)、當資料訪問和指令訪問同時嘗試訪問同乙個區域時,可以賦予資料訪問更高的優先順序以提高效能。
3)、通過ahb匯流排矩陣把取指和資料訪問分開後,如果指令匯流排和資料匯流排在同一時刻訪問不同的儲存器裝置,則兩者可以並行不勃。但是若只使用了匯流排復用器則資料傳
送就不能同時發生。
3、有些引腳比較多的介面會帶外部匯流排介面(emi)。在此情況下,需要乙個外部儲存器控制器。其他的ahb裝置則可以簡單的鏈結到系統匯流排上,而不需要額外的匯流排矩
陣。七、復位訊號
1、cortex-cm3中各種復位訊號
2、典型的cortex-cm3晶元內部復位訊號和其作用範圍示意圖
Cortex M3異常筆記
異常型別 cortex m3編號為1 15對應系統異常,大於等於16的全部是核心級額外部中斷,除個別異常 復位,nmi,硬fault 的優先順序被定死之外,其他異常優先順序都是可以程式設計的。如果乙個發生的異常不能即刻響應,就稱它被 懸起 pending 少數異常時不能被懸起的。乙個異常被懸起的原因...
Cortex M3復位序列
在離開復位狀態後,cm3 做的第一件事就是讀取下列兩個32 位整數的值 從位址 0x0000,0000 處取出msp 的初始值。從位址 0x0000,0004 處取出pc 的初始值 這個值是復位向量,lsb 必須是1。然後從這個值所對應的位址處取指。請注意,這與傳統的arm 架構不同 其實也和絕大多...
qemu除錯cortex m3程式
1.安裝arm none eabi arm 2011.09 69 arm none eabi.bin 2.安裝qemu 3.建立原始檔 4.arm none eabi gcc o main.elf hello.c g mcpu cortex m3 mthumb t generic hosted.ld...