新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 移植ucosII到STM32F103ZE(一)

移植ucosII到STM32F103ZE(一)

作者: 時(shí)間:2016-11-25 來(lái)源:網(wǎng)絡(luò) 收藏

6. 總線(xiàn)接口:
Cortex-M3使用一個(gè)3級(jí)流水線(xiàn),分別是:取指,解碼和執(zhí)行。


詳細(xì)的框圖


五總線(xiàn):I-Code總線(xiàn),D-Code總線(xiàn)和系統(tǒng)總線(xiàn),外部私有外設(shè)總線(xiàn)和調(diào)試訪問(wèn)端口總線(xiàn)
7. 異常
Cortex-M3異常類(lèi)型:
Cortex-M3異常類(lèi)型分為兩種,分別是系統(tǒng)異常(編號(hào)1-15,0號(hào)為沒(méi)有異常在運(yùn)行)和外部中斷(大于等于16號(hào))。原則上,CM3支持3個(gè)固定的高優(yōu)先級(jí)和多大256級(jí)的可編程優(yōu)先級(jí)。后240個(gè)是外部中斷,也就是“意外突發(fā)事件”,來(lái)自各種片上外設(shè)和外擴(kuò)的外設(shè),屬于異步的,而前15種異常是CM3內(nèi)部活動(dòng)產(chǎn)生的,對(duì)CM3來(lái)說(shuō)是同步的。
NVIC中,每個(gè)中斷都有一個(gè)優(yōu)先級(jí)配置寄存器(1個(gè)byte),用來(lái)配置該中斷的優(yōu)先級(jí)。但該寄存器并不是每個(gè)位都被使用,不同制造商生產(chǎn)的芯片不相同,例如STM32使用4位,也就是說(shuō)stm32支持16個(gè)可編程優(yōu)先級(jí)。
注意該寄存器是以MSB對(duì)齊的,因此stm32每個(gè)中斷的優(yōu)先級(jí)配置寄存器7:4位有效,3:0位無(wú)效。
《STM32_RM_CH_V10_1所有型號(hào)中文參考手冊(cè)》130


Cortex-M3異常類(lèi)型
Cortex-M3 中斷優(yōu)先級(jí):
對(duì)于優(yōu)先級(jí),CM3又分為搶占優(yōu)先級(jí)和亞優(yōu)先級(jí),NVIC中的應(yīng)用程序中斷及復(fù)位控制寄存區(qū)(AIRCR)的優(yōu)先級(jí)分組(10:8)描述如何劃分搶占優(yōu)先級(jí)和亞優(yōu)先級(jí)。(具體看數(shù)據(jù)手冊(cè))


Cortex-M3異常向量表
向量表:當(dāng)發(fā)生了異常并且要響應(yīng)它時(shí),CM3需要定位其服務(wù)例程的入口地址,這些入口地址存儲(chǔ)在異常向量表中。


地址0處是存儲(chǔ)引導(dǎo)代碼,通常映射到Flash或者ROM器件,并且它們的值不得在運(yùn)行時(shí)改變。但是,為了支持動(dòng)態(tài)重發(fā)中斷,CM3允許向量表重定位—從其它地址開(kāi)始定位各異向量。這些地址對(duì)應(yīng)的區(qū)域可以是代碼區(qū),但更多的是在RAM區(qū)。在RAM就可以修改向量的入口地址了。NVIC中的一個(gè)寄存器叫做“向量表偏移量寄存器”(VTOR)(在地址0xE000_ED08處),通過(guò)修改它的值就能重定位向量表。
SVC和PendSV
SCV(系統(tǒng)服務(wù)調(diào)用,也簡(jiǎn)稱(chēng)系統(tǒng)調(diào)用)和PendSV(可懸起系統(tǒng)調(diào)用),這兩個(gè)多用在上了操作系統(tǒng)的軟件開(kāi)發(fā)中。SVC用于產(chǎn)生系統(tǒng)函數(shù)的調(diào)用請(qǐng)求,例如操作系統(tǒng)通常不讓用戶(hù)程序直接訪問(wèn)硬件而是通過(guò)提供一些系統(tǒng)服務(wù)函數(shù),讓用戶(hù)程序通過(guò)SVC發(fā)出對(duì)系統(tǒng)服務(wù)函數(shù)的呼叫請(qǐng)求。主要是用于分特權(quán)級(jí)和用戶(hù)級(jí)的操作系統(tǒng),ucosii不區(qū)分特權(quán)級(jí)和用戶(hù)級(jí)。移植時(shí)這個(gè)可以刪除。
PendSV,可懸起的系統(tǒng)調(diào)用,可以像普通中斷一樣被懸起,PendSV一般是使用在上下文切換時(shí),就是任務(wù)切換,是ucosii移植過(guò)程中最重要的中斷。主要有兩點(diǎn):
a、 PendSV中斷時(shí)手工往NVIC的PendSV懸起寄存器中寫(xiě)入1產(chǎn)生的(由OS寫(xiě))。
b、 PendSV中斷優(yōu)先級(jí)必須設(shè)為最低。
8. NVIC與中斷控制
NVIC,向量中斷控制器,是cortex-M3不可分離的部分,與內(nèi)核的邏輯緊密耦合。NVIC的寄存器以存儲(chǔ)器映射的方式來(lái)訪問(wèn),除了包含控制寄存器和中斷處理的控制邏輯外,還包含MPU,SysTick定時(shí)器以及調(diào)試控制相關(guān)的寄存器?!VIC的訪問(wèn)地址為0xE000_E000。(具體看數(shù)據(jù)手冊(cè))
每個(gè)外部中斷都在NVIC的下列寄存器中“掛號(hào)”:
Ø 使能與除能寄存器
Ø 懸起與“解懸”寄存器
Ø 優(yōu)先級(jí)寄存器
Ø 活動(dòng)狀態(tài)寄存器
另外,下列寄存器也對(duì)中斷處理有重大影響:
Ø 異常掩蔽寄存器
Ø 向量表偏移寄存器
Ø 軟件觸發(fā)中斷寄存器
Ø 優(yōu)先級(jí)分組位段
9. 中斷的行為:
當(dāng)CM3開(kāi)始響應(yīng)一個(gè)中斷時(shí):
1.xPSR, PC, LR, R12以及R3‐R0入棧;
2.取向量;
3.選擇堆棧指針MSP/PSP,更新堆棧指針SP,更新連接寄存器LR,更新程序計(jì)數(shù)器PC。
對(duì)移植ucosii 來(lái)說(shuō),需要注意1,3
嵌套的中斷:
CM3內(nèi)核以及NVIC,已經(jīng)內(nèi)建了對(duì)中斷嵌套的全力支持,根本無(wú)需使用匯編去寫(xiě)封皮代碼(wrapper code),注意中斷嵌套不能過(guò)深即可。
10. 其它的看數(shù)據(jù)手冊(cè),例如STM32F10x的模塊,如:電源控制,DMA控制器,ADC與DAC,定時(shí)器,看門(mén)狗與窗口看門(mén)狗,靜態(tài)存儲(chǔ)器控制器(FSMC),USB,控制器局域網(wǎng)CAM總線(xiàn),同步異步收發(fā)等,看stm32F10x數(shù)據(jù)手冊(cè)。

上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: 移植ucosIISTM32F103Z

評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉