摘要:本文扼要介紹了飛思卡爾新一代SI2X 16位MCU的外設(shè)協(xié)處理器XGATE。著重討論了XGATE的中斷處理機制,以及XGATE與主內(nèi)核CPUl2X的交互。最后給出了XGATE的典型配置及編程方法。
關(guān)鍵詞:協(xié)處理器;XGATE;中斷機制;微控制器
與經(jīng)典的微處理器S12系列相比,飛思卡爾新一代的16位微處理器系列S12X(E)的性能有深化而全面的提升。最重要的是集成了外設(shè)協(xié)處理器XGATE。它是一個獨立于主CPU(CPUl2X)的RISC內(nèi)核,可作為一個高效的DMA控制器,自治地在外設(shè)與RAM之間進(jìn)行高速的數(shù)據(jù)傳送,和靈活的數(shù)據(jù)處理;可作為一個單獨的算法單元完成某些運算,如通信協(xié)議的處理;作為虛擬的外設(shè),用I/o口模擬串行通信口;或?qū)唵蔚耐庠O(shè)進(jìn)行軟件包裝以生成功能強大的個性化外設(shè)。集成XGATE的目的就是在日益復(fù)雜的嵌入式系統(tǒng)中減輕內(nèi)核CPUl2X的負(fù)擔(dān),以增強系統(tǒng)的數(shù)據(jù)吞吐能力。
XGATE基本特性

精簡指令集內(nèi)核
XGATE是一個16位的精簡指令集內(nèi)核,圖1為XGATE編程模式。內(nèi)核擁有8個16位通用寄存器R0~R7,1個程序計數(shù)器PC,一個4位的條件碼寄存器CCR。其中R0恒為0,可用于對變量的快速清零或置位。R1和R7有額外用途:XGATE響應(yīng)中斷時,硬件將中斷向量表中對應(yīng)通道的1個16位字裝載到R1(通常用作數(shù)據(jù)指針),將暫存指針裝載到R7。內(nèi)核沒有完全功能的棧指針,這里的暫存指針只在調(diào)用函數(shù)時用于局部變量的空間分配。
XGATE指令集
XGATE共有72條獨立的指令。指令時鐘最高可達(dá)100MHz。XGATE的時鐘速度總是CPUl2X總線速度的2倍。XGATE的大部分指令是對通用寄存器的操作,為單周期指令。訪問存儲器的指令為雙周期指令。跳轉(zhuǎn)指令視條件而定可能為1或2個周期。XGATE有一些特殊的位提取及插入的單周期指令,很適合串行通信協(xié)議的處理。

XGATE訪問空間
S12X的全局存儲空間共有8MB,XGATE可以訪問其中片內(nèi)的64KB。這64KB包括2KB的片上外設(shè)寄存器,30KB的片上閃存和最大32KB的片內(nèi)RAM,如圖2的XGATE全局地址映射所示。注意XGATE不能訪問EEPROM空間或片外資源。XGATE的訪問空間完全包含在CPUl2X的訪問空間中。地址仲裁的規(guī)則使CPUl2X的優(yōu)先級總高于XGATE。
嵌入式處理器的代碼通常在閃存或ROM中運行,但對于XGATE建議代碼放在RAM中運行。原因有二:1)CPUl2X的代碼,在閃存中,若XGATE的代碼也在閃存中,則增加了總線沖突的概率;2)CPUl2X訪問片內(nèi)RAM時只占用總線帶寬的一半,在每個CPU12X的RAM訪問周期中,總能讓出一個XGATE的RAM訪問周期。
事件驅(qū)動XGATE線程
XGATE的代碼執(zhí)行是由事件驅(qū)動的,這里的事件就是中斷,由中斷來觸發(fā)XGATE的運行。沒有中斷,XGATE不執(zhí)行任何指令,從而也沒有功耗。XGATE的代碼就是一組中斷服務(wù)程序,沒有主程序或空閑時的循環(huán)程序。XGATE的中斷服務(wù)程序也稱作線程。
互斥信號量
CPU12X與XGATE之間常用的通信方式是共享資源。由于這兩個內(nèi)核可以獨立異步地訪問內(nèi)存及片上外設(shè),就產(chǎn)生了數(shù)據(jù)完整性的問題。為了保證共享數(shù)據(jù)的完整性,XGATE集成了8個硬件互斥信號量(Semaphore),用戶可以通過硬件信號量來同步兩個內(nèi)核對共享數(shù)據(jù)的訪問。

信號量有3種狀態(tài):釋放、CPUl2X鎖定和XGATE鎖定。每個內(nèi)核在訪問共享資源前,應(yīng)當(dāng)首先鎖定相應(yīng)的信號量;在訪問結(jié)束后應(yīng)當(dāng)釋放相應(yīng)的信號量。信號量在三種狀態(tài)之間的轉(zhuǎn)換如下:
·信號量鎖定
XGATE以專用的指令SSEM加上一個3位立即數(shù)來鎖定某個信號量。若鎖定成功則XGATE的進(jìn)位標(biāo)志C置位,否則C被清零。CPUl2X通過專門的信號量寄存器來鎖定信號量。CPUl2X鎖定并檢查某個信號量的方法可參見下面的C宏定義。
·信號量釋放
XGATE以專用的指令CSEM加上一個3位立即數(shù)來釋放某個信號量。CPUl2X通過專門的信號量寄存器來釋放信號量。同樣見下面的C宏定義。

值得強調(diào)的是,信號量與對應(yīng)資源之間沒有任何硬件上的聯(lián)系,信號量對資源的保護(hù)完全體現(xiàn)在用戶的代碼中。

XGATE的中斷
所有MCU中斷缺省由CPU12X響應(yīng)。其中絕大多數(shù)中斷也可提交XGATE處理。每個中斷都有相應(yīng)的配置寄存器INT_CFGDATAx來配置相應(yīng)的處理內(nèi)核及中斷優(yōu)先級。圖3是典型的S12X的中斷配置及中斷響應(yīng)。其中ILVL[2:0]域定義了中斷優(yōu)先級,優(yōu)先級對兩個內(nèi)核都有效;RQST域選擇中斷處理內(nèi)核。一種典型的應(yīng)用是置RQST=1,首先將中斷提交給XGATE處理。xGATE的中斷服務(wù)程序處理之后通知CPUl2X,并將處理的結(jié)果提交CPUl2X。這樣CPUl2X就只需關(guān)注于上層的應(yīng)用控制算法,而與底層硬件密切相關(guān)的驅(qū)動由XGATE處理,極大地提高了系統(tǒng)的性能。
中斷向量表
圖4是XGATE的中斷矢量表結(jié)構(gòu)。XGATE的每個中斷矢量由2個16位字組成。編程時可用一個指針結(jié)構(gòu)數(shù)組來描述整個中斷矢量表。數(shù)組的每個元素由ISR入口地址和ISR數(shù)據(jù)指針組成。若某中斷配置由XGATE處理,則當(dāng)該中斷發(fā)生時硬件將ISR入口地址裝載入XGATE的程序計數(shù)器PC,將ISR數(shù)據(jù)指針裝載入XGATE的R1。這樣XGATE的中斷服務(wù)程序可以帶一個數(shù)據(jù)指針作為參數(shù)。這樣,一個顯著的好處是,可以只用同一段ISR代碼來處理同類的若干個中斷。XGATE可以通過這個數(shù)據(jù)指針來區(qū)分及處理不同的對象。
XGATE與CPUl2X的相互中斷
XGATE與CPUl2X之間可相互中斷以便同步運行。XGATE有一個特殊的指令SIF,用于向CPUl2X提交中斷。通常SIF為XGATE線程的最后一條指令,用以觸發(fā)CPUl2X中斷。缺省情況下XGATE的中斷矢量就對應(yīng)于XGATE所處理的前一中斷。故由SIF所觸發(fā)的CPUl2X的中斷服務(wù)程序通常不必查詢中斷源。
XGATE有8個軟件中斷源。CPUl2X通過置位或清除XGATE軟件觸發(fā)寄存器(XGSWT)中相應(yīng)的位來觸發(fā)或清除這8個中斷。值得指出的是:由于XGSWT屬于片上外設(shè)寄存器,所以XGATE也可以通過XGSWT給自己發(fā)出中斷。
中斷嵌套
最早推出的XGATE不支持中斷嵌套,即只在當(dāng)前XGATE的線程完成后才能處理別的中斷。新的XGATE支持1級中斷嵌套,而且,新的XGATE有2套內(nèi)核寄存器,1套在前臺運行,另1套在后臺保持被占先前的現(xiàn)場。所以中斷過程中沒有內(nèi)核寄存器入棧或出棧。這樣2套內(nèi)核切換的速度很快,僅為2個XGATE的指令周期。
另外,對應(yīng)于4到7級中斷和1到3級中斷分別有XGATE初始暫存指針寄存器XGISP74和XGISP31。與優(yōu)先級的中斷相應(yīng)時,硬件會將對應(yīng)的暫存指針寄存器內(nèi)容裝載到XGATE的R7中。
XGATE的啟動及初始化
XGATE的啟動及初始化并不復(fù)雜,典型過程如下:
·XGATE代碼下載到RAM中。系統(tǒng)復(fù)位后,需要將XGATE的代碼從閃存下載到RAM中以提高系統(tǒng)運行性能。
·將XGATE的中斷矢量表起始地址寫到XGATE的矢量基地址寄存器XGVBR中。
·初始化XGATE的暫存指針。將優(yōu)先級4到7的中斷程序的局部變量起始地址寫入寄存器XGISP74將優(yōu)先級1到3的中斷程序的局部變量起始地址寫入寄存器XGISP31。
·配置中斷源。欲將某中斷提交給XGATE處理,則將中斷配置寄存器的RQST置位;同時可以設(shè)置中斷配置寄存器ILVL[2:0]域為其配置適當(dāng)?shù)膬?yōu)先級。
·啟動XGATE。置XGATE控制寄存器XGMCTL中的XGE位為1以啟動XGATE。通常也將XGIE位置1以使能XGATE對CPUl2X的中斷。
結(jié)語
外設(shè)協(xié)處理器XGATE顯著增強了S12XMCU系統(tǒng)的整體性能。S12X MCU片上幾乎所有的外設(shè)中斷均可交給XGATE處理。XGATE的編程實際就是為XGATE寫一組中斷服務(wù)程序。XGATE的配置和啟動也比較方便,主要是恰當(dāng)?shù)卦O(shè)置幾個核心的XGATE寄存器。