新聞中心

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

        移植ucosII到STM32F103ZE(一)

        作者: 時間:2016-11-25 來源:網(wǎng)絡 收藏

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


        詳細的框圖


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


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


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


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

        上一頁 1 2 下一頁

        評論


        技術(shù)專區(qū)

        關閉
        主站蜘蛛池模板: 浪卡子县| 鹤峰县| 乐清市| 祥云县| 玉田县| 肃宁县| 南宁市| 甘德县| 手游| 什邡市| 军事| 大余县| 南宁市| 江北区| 商洛市| 花莲市| 定襄县| 盘锦市| 嘉定区| 瑞丽市| 仲巴县| 阳山县| 昆山市| 赤城县| 赤水市| 会同县| 霍州市| 安仁县| 建阳市| 天水市| 饶平县| 西盟| 海盐县| 江达县| 静安区| 资兴市| 海南省| 拜城县| 龙南县| 郓城县| 迭部县|