Cortex M3復位序列

2021-08-11 08:25:37 字數 827 閱讀 4185



在離開復位狀態後,cm3 做的第一件事就是讀取下列兩個32 位整數的值:

從位址 0x0000,0000 處取出msp 的初始值。

從位址 0x0000,0004 處取出pc 的初始值——這個值是復位向量,lsb 必須是1。然後從這個值所對應的位址處取指。

請注意,這與傳統的arm 架構不同——其實也和絕大多數的其它微控制器不同。傳統的arm 架構總是從0 位址開始執行第一條指令。它們的0 位址處總是一條跳轉指令。在cm3

中,0 位址處提供msp 的初始值,然後就是向量表(向量表在以後還可以被移至其它位置)。向量表中的數值是32 位的位址,而不是跳轉指令。向量表的第乙個條目指向復位後應執行的第一條指令。

因為cm3 使用的是向下生長的滿棧,所以msp 的初始值必須是堆疊記憶體的末位址加1。舉例來說,如果你的堆疊區域在0x20007c00‐0x20007fff 之間,那麼msp 的初始值就必須是0x20008000。向量表跟隨在msp 的初始值之後——也就是第2 個表目。要注意因為cm3 是在thumb態下執行,所以向量表中的每個數值都必須把lsb 置1(也就是奇數)。正是因為這個原因,圖3.18 中使用0x101 來表達位址0x100。當0x100 處的指令得到執行後,就正式開始了程式的執行。在此之前初始化msp 是必需的,因為可能第1 條指令還沒執行就會被nmi 或是其它fault 打斷。msp 初始化好後就已經為它們的服務例程準備好了堆疊。

Cortex M3異常筆記

異常型別 cortex m3編號為1 15對應系統異常,大於等於16的全部是核心級額外部中斷,除個別異常 復位,nmi,硬fault 的優先順序被定死之外,其他異常優先順序都是可以程式設計的。如果乙個發生的異常不能即刻響應,就稱它被 懸起 pending 少數異常時不能被懸起的。乙個異常被懸起的原因...

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...

Cortex M3的整體風景

一 流水線 1 cortex cm3處理器使用乙個3級流水線,流水線的3級分別是 取指,解碼和執行 2 當執行的指令大多數是16位時,處理器會每隔乙個週期做一次取指。當執行到跳轉指令時需要清洗流水線,處理器會不得不跳轉目的地重新取指。為了改善這種情 況,cortex cm3支援一定數量的v7m指令可...