欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
【技術(shù)流】PowerPC基于vxWorks的中斷初始化分析

本文由介方技術(shù)團隊成員"咸魚(yú)看到貓”原創(chuàng ),后續將陸續推出更多嵌入式技術(shù)、工程實(shí)踐類(lèi)文章。為增強代碼可讀性,本文涉及代碼部分均采用截圖。

1、本文簡(jiǎn)介

本文主要介紹P2020芯片中vxWorks中斷初始化過(guò)程(部分講解是以linux為例)。P2020屬于PPC85XX系列,內核為e500v2,它是PowerPC體系結構中主要應用于通信領(lǐng)域的片子,PowerPC體系結構規范發(fā)布于1993年,它是一個(gè)64位規范(也包含32位子集)。但幾乎所有常規的PowerPC的芯片都是32位的,除了部分新型高端芯片(eg:IBM RS/6000等)。

本文主要章節如下:

       2 參考書(shū)籍介紹

       3 OEA相關(guān)寄存器(中斷相關(guān))

       4 PowerPC架構異常處理機制(P2020為代表)  

       5 vxWorks中斷初始化過(guò)程

 2.參考書(shū)籍

(1) IBM官方文檔,關(guān)于PowerPC Architecture Boook I II III ,其中Book III 主要講解與操作系統相關(guān)的寄存器。

下載鏈接: https://www.ibm.com/developerworks/systems/library/es-archguide-v2.html.

       (2)  <<E500CORERM.pdf>> 該手冊描述的是e500核的工作過(guò)程以及Reg詳細描述,包括電源管理,中斷處理,Cache,MMU.

       (3)  <<P2020RM.pdf>> 該手冊主要描述的是芯片與外設相關(guān)的控制器,但很少介紹到CPU通用寄存器,特殊寄存器等.

       (4)  <<821INSTSET.pdf>> PowerPC 匯編指令集介紹

       (5)   PowerPC 匯編指令簡(jiǎn)單介紹

    (2.3.4)都可以在NXP官網(wǎng)中下載

 3 OEA相關(guān)寄存器(中斷相關(guān))

PowerPC 處理器有 32 個(gè)(32 位或 64 位)GPR(通用寄存器)以及諸如 PC(程序計數器,也稱(chēng)為 IAR/指令地址寄存器 或 NIP/下一指令指針)、LR(鏈接寄存器)、CR(條件寄存器)等各種其它寄存器。有些 PowerPC CPU 還有32個(gè)64位的FPR(浮點(diǎn)寄存器). 下圖展示了Power ISA2.04寄存器模式,且值得注意的是 PowerPC有兩種執行模式,分別為用戶(hù)模式(UserMode) 和特權模式(SupervisorMode),MSR[PR]=0 表示特權模式。Linux內核運行在特權模式,而普通程序運行在用戶(hù)模式。VxWorks全部運行在特權模式。

   3.1 OEA寄存器集包括四類(lèi)寄存器(具體介紹只涉及中斷相關(guān)的,其它請參考下來(lái)的鏈接)

本小章節參考:32位PowerPC構架通用寄存器分析及總結

    (1)配置寄存器(Configuration Registers)

MSR寄存器:(與中斷息息相關(guān))

定義處理器的狀態(tài),它可以被mtmsr, sc, rfi指令修改;可以被mfmsr讀??;

詳細說(shuō)明:基于603E內核的PowerPC處理器,中斷向量為一個(gè)固定的地址,可以通過(guò)設置MSR[IP]位來(lái)決定這個(gè)固定地址是0x0,還是0xfff0_0000;而E500內核在進(jìn)入中斷和異常處理程序時(shí),不能關(guān)閉MMU,因此不能使用物理地址作為中斷向量,而應使用IVPR和IVOR寄存器保存相應的中斷向量(在下面中斷機制章節詳細介紹),下面為e500核的MSR:

     中斷的開(kāi)關(guān)由寄存器MSR來(lái)控制的

     CE:if set 1,Critical input and watchdog timer interrupts are enabled.

     EE:if set 1,External input, decrementer, fixed-interval timer and performance monitor interrupts are enabled

     ME:if set 1, Machine check interrupts are enabled.

     DE:if set 1,Debug interrputs are enabled if DBCR0[IDM] = 1.

MSR[EE]這個(gè)bit很重要,中斷的使能要靠它。

注意:當發(fā)生中斷后,MSR[EE]會(huì )自動(dòng)置0屏蔽所有其他的中。

      如果在MSR[EE]置1前,又來(lái)了一個(gè)中斷

1.此中斷是邊沿觸發(fā)的,那么此中斷丟失。此種中斷就是電平變化,一次就沒(méi)了

2.此中斷時(shí)水平觸發(fā)的,此中斷不會(huì )丟失。此種中斷的電平會(huì )一直active,直到硬件處理它

PVR寄存器:

              定義寄存器模型的版本和處理器的版

 (2)內存管理寄存器(Memory Management Registers)

BAT寄存器:

            OEA定義了四組BAT指令寄存器(IBAT0U-IBAT3U和IBAT0L-IBAT3L),也定義了四組BAT數據寄存器(DBAT0U-DBAT3U和DBAT0U-DBAT3U)

SDR1寄存器:

            該寄存器定義了用于虛擬地址轉換為物理地址所需要的頁(yè)表基地址

SR寄存器:

            OEA定義了16個(gè)32位的SR寄存器(SR0-SR15)

 (3)中斷處理寄存器(Interrupt Handing Register)

        詳細介紹請看《E500CORE.pdf》2.7 Interrupt Registers

 (4)多功能寄存器(Miscellaneous Registers)

TB(time base)寄存器:CPU時(shí)間片基準

DEC寄存器:這是一個(gè)32位的遞減計數器

EAR(External Access Register)寄存器:用于訪(fǎng)問(wèn)外部設備

DABR(Data address breakpoint register):用來(lái)控制數據地址斷點(diǎn)功能

PIR(Processor identification register):在多處理器的芯片上用來(lái)標識一個(gè)核,例如在MPC8641d芯片上有兩個(gè)E600的core,就用PIR來(lái)定位其中的core。

   3.3 通用寄存器與專(zhuān)用寄存器的用途

本小章節參考:PowerPC匯編指令以及通用與專(zhuān)用寄存器介紹

   r3,r4-r10經(jīng)常用于C,匯編的混合編程中

在target\h\arch\ppc\toolPpc.h中有對以上寄存器的重定義

 4 PowerPC架構異常處理機制(P2020為代表)     

      4.1 PowerPC中斷系統(P2020)

從CPU的角度來(lái)講,中斷源可以分為自己內核產(chǎn)生的異常和PIC提供的中斷。

異常:是e500核產(chǎn)生的,它是同步產(chǎn)生(可以預知的),如非法指令,或訪(fǎng)問(wèn)存儲器時(shí)出現TLB Miss(Data | Instruction )等.

         <<E500CORERM.pdf>>5.11.1描述了PowerPC架構可能出現的全部異常(這里描述包括中斷) 

中斷:是e500核外部引腳產(chǎn)生的,由PIC送到內核處理,它是異步產(chǎn)生的(無(wú)法預知的).大致分為一般中斷(int)(包括內外部等),關(guān)鍵中斷(cint)和機器檢查中斷(machine check). 下圖為中斷源架構圖,其中Message數量應該是寫(xiě)錯了(理論為4).

         從圖中可以看出PowerPC處理器中斷系統由內核中斷以及異常處理系統和PIC中斷控制器構成.

      4.2 中斷向量

在E500內核中,使用IVPR和IVORx寄存器共同確定中斷或者異常程序的入口地址。其中,IVPR寄存器提供中斷程序入口地址的第0~15位,IVORx提供中斷程序入口地址的第16~27位,而中斷程序的入口地址的第28~31位為0。IVORx與異常的對應關(guān)系如下圖所示:

每類(lèi)中斷都有自己的中斷向量,通過(guò)它能計算出中斷handler的指令地址。

指令地址的計算方法:

        IVPR[32-47] || IVORn[48-59] || 0b0000

       這樣就得到一個(gè)32個(gè)bit地址

有2個(gè)中斷向量對程序員來(lái)說(shuō)比較親切:

    一個(gè)是 IVOR4 用來(lái)處理外部中斷和內部SOC中斷

    一個(gè)是 IVOR8 用來(lái)處理系統調用

隨便找一個(gè)Start.S進(jìn)行簡(jiǎn)單的分析

    185 /* Setup interrupt vectors 設置IVPR寄存器*/

    186 lis r1,TEXT_BASE@h   /* load value to r1 */

    187 mtspr IVPR, r1  /* write r1 to IVPR */

    197 li r1,0x0500

    198 mtspr IVOR4,r1 /* 4: External interrupt */

     .......

    205 li r1,0x0900

    206 mtspr IVOR8,r1 /* 8: System call */

    207 /* 9: Auxiliary processor unavailable(unsupported) */

    208 li r1,0x0a00

    209 mtspr IVOR10,r1 /* 10: Decrementer */

    ......

看board/pq37pc/pq37pc_8560/config.mk 里有 

     TEXT_BASE = 0xFF800000

     所以 IVPR   = 0xFFF80000

     IVOR10 = 0x00000a00

     計算 IVPR[32-47] || IVPOR10[48-59] || 0b0000  得 0xFFF80a00

4.3 中斷源寄存器

中斷向量只能確定類(lèi)型,里面保存了interrupt handler的地址。

 在interrupt handler里,需要根據中斷源寄存器來(lái)進(jìn)一步確定到底是哪里發(fā)生了中斷

 E500內部中斷源有64個(gè)(部分reserve),來(lái)自TSEC,LBC,DMA,CPM等

 寄存器組 PIC_IIVPRn 與 P2020內部SOC中斷一一對應(n取值 0~63)

  

 E500外部中斷源有12個(gè),來(lái)自外部引腳 IRQ[0:11]

 寄存器組 EIVPRn 與 MPC8560 外部中斷一一對應(n取值 0~11)

下面具體介紹外部源寄存器

   MSK:  若置1,此中斷源的中斷被無(wú)視.

   A:    若置1,此中斷源有中斷發(fā)生

   P:    若置1, active-high; 若置0, active-low.

S:    若置1,此中斷是水平觸發(fā)。若置0,此中斷是邊界觸發(fā)

PRIORITY: 優(yōu)先級0-15。15是最高優(yōu)先級,0時(shí)相當于無(wú)視此中斷。

VECTOR: 硬件中斷號。中斷發(fā)生后處于pengding時(shí),此字段被寫(xiě)在寄存器IACK中

總結:處理內,外中斷的handle都是同一個(gè)functions(流程),EntInt-->Handle-->ExitInt,在處理函數中讀取IACK,就知道是哪個(gè)中斷源觸發(fā)了中斷,然后做對應的處理

知道中斷向量 和 中斷源,系統處理中斷的大致流程就能理出來(lái)了,以外部中斷eg:


4.4 外部中斷處理流程

     1.首先E500內核清除在指令完成隊列CQ中所有的執行,然后把正在執行的指令序列下一條指令地址保存到中斷寄存器                     SRR0(Save/RestoreRegiser 0)

     2.把當前 MSR 的內容保存到 SRR1

     3.把 MSR 某些比特置為 0,如MSR[SPE,WE,EE,PR,FP,FE0,FE1,IS,DS]are 0 by all interrupts.

(E500內核將MSR寄存器的CE、ME、DE位保留,其他位全部清零。因此E500內核在進(jìn)行外部中斷處理程序時(shí),仍然可以被Critical中斷,Machine check中斷和調試中斷程序重入,但是不能被外部中斷立即重入。在Linux PowerPC中,外部中斷處理程序會(huì )選擇合適時(shí)機使能MSR寄存器的EE位,以支持外部中斷的重入)

     4.在新的 MSR 狀態(tài)下, E500內核將根據IVPR,IVOR4寄存器確定中斷向量,從中斷向量偏移處開(kāi)始指令讀取和執行

5. 在中斷處理程序執行完畢后,使用rfi指令進(jìn)行中斷返回。rfi指令將從SRR1寄存器中恢復MSR寄存器的值,并從SRR0寄存器中獲得程序返回地址。rfi指令在進(jìn)行程序正文切換之前還會(huì )進(jìn)行指令和數據的同步,還給被中斷的程序一個(gè)“干凈”的空間,之后E500內核進(jìn)行中斷返回。

5.vxWorks中斷初始化過(guò)程(跳過(guò)bootrom過(guò)程)

    usrInit(prjConfig.c)--> {sysStart(startType)-->intVecBaseSet ((FUNCPTR *) VEC_BASE_ADRS)}

     -->excVecInit()

 (1)sysStart (first C code executed from usrInit) 主要作用是清除BSS,以及設置中斷向量的基地址

   (2) intVecBaseSet

(3)excVecInit

下面按excVecInit里面函數的初始化順序講解:

存根代碼表:

系統起來(lái)后在vxWorks shell 中輸入d 0x500 (外部中斷的內存地址),可以看到數據和excConnectCode存根一致

中斷向量?jì)却鎴D分析:


本文由介方技術(shù)團隊成員原創(chuàng ),未經(jīng)原作者本人同意,不得轉載

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
PowerPC體系基于vxWorks的異常堆棧切換
VxWorks下MPC860的中斷處理機制及其應用
POWERPC中斷
PowerPC簡(jiǎn)介及編程
PowerPC匯編指令集
MMU在VxWorks中的實(shí)現.
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久