?

飛思卡爾S12X系列單片機協處理器的應用

2016-09-13 07:58吳成加安徽安凱汽車股份有限公司合肥230051
客車技術與研究 2016年4期
關鍵詞:寄存器內核中斷

吳成加,徐 川(安徽安凱汽車股份有限公司,合肥 230051)

飛思卡爾S12X系列單片機協處理器的應用

吳成加,徐川
(安徽安凱汽車股份有限公司,合肥230051)

介紹飛思卡爾16位微處理器S12X(E)系列單片機協處理器(XGATE)的基本特性、中斷及優先級設置、代碼在RAM中運行、信號量的互鎖,以及利用其實現CAN信息中斷接收的應用實例,從而減輕CPU的負擔以增強汽車電子軟件系統的數據吞吐能力。

飛思卡爾單片機;協處理器;XGATE;S12X系列

與S12系列微處理器相比,Freescale公司推出的S12X(E)系列16位微處理器的性能有全面的提升。HCS12X系列單片機是HCS12系列的增強型產品,基于S12 CPU內核,增加了172條指令,可以執行32位運算,總線頻率最高可達50 MHz,并且改進了中斷處理能力[1]。以汽車電子產品開發應用中廣泛使用的MC9S12X EQ512為例,該處理器集成了中斷控制器,具有豐富的尋址方式。有7個中斷優先級,并且內核支持優先級的調度,最多可以有120個中斷源。其最大特點是增加了一個并行處理的外圍協處理器XGATE模塊,下面主要介紹其基本特性及具體應用。

1 XGATE的基本特性

XGATE是一個獨立于主處理器(CPU12X)的可編程RISC內核,可作為一個高效的DMA控制器使用,能夠自主地實現外設與RAM之間的高速數據傳輸,或在數據傳送的過程中進行靈活的數據處理,同時將處理的結果放在XGATE和主核共享RAM區變量中,以實現CPU12X和XGATE之間共享數據。它還可以作為一個單獨的算法單元完成某些運算,如通信協議的處理等[2]。

XGATE的16位的精簡指令集內核,擁有8個16位通用寄存器R0~R7,1個程序計數器PC,1個4位的條件碼寄存器CCR,其中R0恒為0,可用于對變量的快速清零或置位。R1為數據指針寄存器,R7為堆棧指針寄存器。XGATE響應中斷時,硬件將中斷向量表中對應通道的1個16位字裝載到R1(通常用做數據指針),將棧指針裝載到R7。

XGATE共有72條獨立的指令,指令時鐘最高可達100 MHz,其大部分指令是對通用寄存器的操作,為單周期指令。訪問存儲器的指令為雙周期指令。跳轉指令視條件而定可能為1或2個周期指令。XGATE有一些特殊的比特提取及插入的單周期指令,特別適用于串行通信協議使用。

如圖1所示,XGATE最多可以訪問處理器內部的64 KB空間。這64 KB空間包括2 KB片上外設寄存器、30 KB的FLASH空間(最低地址0x780800向上延伸的30 KB FLASH空間)、最大 32 KB的片內 RAM (0x0F8000~0xFFFFF)。片內的EEPROM空間或片外資源XGATE無法訪問。XGATE的訪問內存空間完全包含在HCS12X主處理器CPU12X的訪問空間之內。地址仲裁的規則是,HCS12X主處理器的優先級總是高于XGATE。在實際的代碼運行過程中,HCS12X主處理器CPU12X的代碼在FLASH中運行,若XGATE的代碼也在FLASH中運行,有可能會導致總線沖突。此外,XGATE的運行速度較HCS12X主處理器CPU12X要高,XGATE的總線頻率是HCS12X主處理器CPU12X的兩倍[1]。

圖1 XGATE存儲空間地址映射

XGATE的代碼執行是由中斷事件驅動的,通過產生中斷來觸發XGATE運行。當沒有中斷時,XGATE不執行任何指令,也沒有功耗。XGATE的代碼就相當于是一組中斷服務程序,沒有主程序或空閑時的循環程序。XGATE的中斷服務程序也稱線程。

主處理器CPU12X與XGATE之間常用的通信方式是共享資源。由于這兩個內核都可以獨立異步地訪問內存及片上外設,這就會產生數據完整性問題。為了保證共享數據的完整性,XGATE集成了8個硬件互斥信號量(Semaphore)。用戶可以通過硬件信號量來同步兩個內核對共享數據的訪問。信號量有3種狀態:釋放、主處理器CPU12X鎖定和XGATE鎖定。每個內核在訪問共享資源前,應當首先鎖定相應的信號量;在訪問結束后應當釋放相應的信號量[3-5]。

2 XGATE的應用

設計人員在新建項目工程文件時(如車身電子控制單元、數字組合儀表、發動機電控單元等),可以在XGATE Setup選項中選擇 Multi Core(HCS12X and XGATE)項,即可在工程文件中,使用XGATE功能模塊,反之,當選擇Single Core(HCS12X)項時,則不使用XGATE功能模塊,由于HCS12X和XGATE的指令集不同,CodeWarrior用兩個編譯器分別對 CPU12X和XGATE的代碼進行編譯,編譯的代碼要分別放在.c和.cxgate的文件中,需要XGATE執行或調用的所有代碼都必須要放在工程文件中的xgate.cxgate文件中。

2.1XGATE的中斷及優先級設置

MC9S12XEQ512中包括預留的中斷一共有120個中斷位,對中斷優先級寄存器的分配,系統采用分組設置的方法,將120個中斷分為15個組,每組8個中斷。設置中斷時,先將需要的組別設置到相應的寄存器,再設置8個中斷優先級寄存器的某一個,即可完成中斷的設置。中斷的優先級共劃分為七個中斷優先級,每一個中斷源都有一個可以設置的級別,同一優先級的中斷同時觸發時,高地址(中斷號較?。┑闹袛嘞软憫?。分組的規則是這樣的:中斷地址位7到位4相同的中斷為一組,比如MC9SXEQ512.h中,Vcan0tx、Vcan0rx、Vcan0err、Vcan0wkup、Vflash、Vflashfd、Vspi2、Vspi1為不同的中斷向量,其地址定義分別為0xFFB0U、0xFFB2U、0xFFB4U、0xFFB6U、0xFFB8U、0xFFBAU、0xFFBCU、0xFFBEU。

這些中斷的位7到位4都為B,它們就被分成了一組。中斷向量表從1~F正好15個組。用來設置組別的寄存器可通過INT_CFADDR寄存器來進行設置,如圖2示。

圖2 中斷組配置地址寄存器

需要設置某個組別的中斷時,只要寫入最后8位地址就行了,比如設置Vcan0rx的中斷優先級,就寫入0xB2即可。HCS12X的中斷既可以運行在內核CPU12X中,也可以運行于XGATE中,中斷的選擇可以通過INT_CFDATA0-7的RQST位來進行選擇,當RQST置為1時,選擇中斷服務程序在XGATE中運行,反之則選擇中斷服務程序在HCS12X處理器中運行,如圖3所示[6]。

圖3 XGATE的中斷配置及中斷響應示意圖

設置好組別之后,需要對中斷優先級和中斷寄存器進行設置,INT_CFDATA0-7的[2:0]位為該中斷的優先級選擇位,中斷優先級為0~7。向INT_CFDATAx低地址中寫入0~7就能設置相應的中斷優先級。

圖4所示的是某一組中斷寄存器INT_CFDATA0~INT_CFDATA7,一共有8個,每個都代表中斷組中的一個中斷。中斷寄存器的設置規則是,該中斷地址的低4位除以2,比如設置Vcan0rx的中斷向量為0xB2,它的低4位為2,除以2后為1,那么我們就需要對INT_CFDATA1進行設置,假如Vcan0rx的中斷優先級設為1,我們向INT_CFDATA1的[2:0]位寫入1即可。

圖4 中斷請求配置及優先級選擇

2.2XGATE的中斷代碼的運行

如果CPU12X、XGATE運行的代碼都放在FLASH中,兩者都訪問總線時,就有可能造成總線沖突。CPU12X訪問片內RAM時只占用總線帶寬的一半,為了降低總線沖突的概率,同時增加系統的運行效率,設計人員經常會將XGATE的代碼放在RAM中運行,這樣在每個CPU12X的RAM訪問周期中,總能讓出一個XGATE的RAM訪問周期。要實現上述功能,設計人員需要對XGATE的代碼重定位,即將中斷代碼從XGATE_CODE_FLASH段重新定義到XGATE_CODE _RAM段。

XGATE在FLASH中的地址映射在工程文件的Prm文件中,XGATE在FLASH中的空間映射如下。其中XGATE存儲空間的 2 KB外設寄存器(0x00000~0x007FF)直接對應FLASH全局地址的0xE08000~0xE087FF;30 KB的FLASH空間共劃分為兩塊,低地址14 KB存儲空間PAGE_E0映射到FLASH全局空間的0xE08800~ 0xE0BFFF、高地址 16 KB存儲空間PAGE_E1映射到 FLASH全局空間的 0xE18000~0xE1BFFF位置。

PAGE_E0_0=READ_ONLYDATA_FAR IBCC_FAR 0xE08000 TO 0xE087FF;//不映射到XGATE;PAGE_ E0=READ_ONLY DATA_FAR IBCC_FAR 0xE08800 TO 0xE0BFFF ALIGN 2[1:1];//PAGE_E0空間映射,PAGE_ E1=READ_ONLY DATA_FAR IBCC_FAR 0xE18000 TO 0xE1BFFF ALIGN2[1:1];//PAGE_E1空間映射。

XGATE在RAM中的空間映射如下,在該工程中,處理器RAM最大空間為32 KB,XGATE對其中24 KB RAM空間進行映射,XGATE存儲空間中的地址范圍為0x8000~0xFFFF;在Prm文件中將RAM劃分為6塊,每個RAM塊為4 KB,映射到RAM空間中對應的地址分別 為 0xF81100~0xF81FFF、0xF91000~0xF91 FFF、0xFA1000~0xFA1FFF、0xFB1000~0xFB1FFF、0xFC1000 ~0xFC1FFF、0xFD1000~0xFD1FFF。

在系統中XGATE代碼默認是指向PAGE_E0、PAGE_E1位置,即XGATE_CODE_FLASH段,只需要將其重新定義到RAM_F8、RAM_F9、RAM_FA、RAM_FB位置,XGATE_CODE_RAM即可實現CODE_SEG段代碼在RAM中運行。圖5中顯示了同一段代碼分別在FLASH(左側)中和RAM(右側)中運行的地址映象。當XGATE_CODE在FLASH中運行時,仿真停止后它的指令指向地址為0xE08xxxFLASH空間;而在RAM中運行時,仿真停止后它的指令指向地址空間為0xF81xxx的RAM空間。

圖5 XGATE CODE在FLASH和RAM中運行匯編代碼

2.3XGATE的信號量互鎖

CPU12X與XGATE之間通信方式是通過資源共享實現數據交互。由于兩個內核都可以隨時獨立訪問內存和片上外設,這樣就會產生數據的完整性問題。為了保證數據的完整性,XGATE集成了8個硬件互斥信號量(Semaphore)。系統可以通過硬件信號量同步兩個內核對共享數據的訪問。信號量有3種狀態,即釋放、CUP12X鎖定、XGATE鎖定。每一個內核在訪問共享數據之前,首先對相應的信號量進行鎖定,在訪問結束后釋放該信號量。信號量在三種狀態之間進行轉換,如圖6所示,XGATE通過ssem加上一個3 bit立即數來鎖定或釋放某個信號量,CPU12X通過信號量寄存器XGSEMG來鎖定或釋放某個信號量[7]。

圖6 信號量狀態轉換

2.4XGATE的應用實例

假如要通過XGATE對汽車總線上的CAN信息(如電流、溫度、壓力、扭矩、速度等信息)進行接收,并將接收到的數據放入到CPU12X和XGATE共享的RAM變量中,可以在RAM共享區中定義一組變量。該組變量在運行過程中,兩個內核都可以訪問它。

然后對XGATE及中斷進行配置。在初始化XGATE模塊中,開通了兩個中斷源,其中一個PIT0中斷處理函數位于CPU12X的代碼中,中斷優先級設為2,CAN0接收中斷運行在XGATE中,中斷優先級為1。

static void SetupXGATE(void)

{//初始化塊和XGATE向量設置XGVBR寄存器的起始地址

XGVBR=(unsigned int)(void*__far)(XGATE_VectorTable-XGATE_VECTOR_OFFSET);

ROUTE_INTERRUPT(PIT0_VEC,0x02);//運行在CPU12X內核中

ROUTE_INTERRUPT(CAN0RX_VEC,0x81);//運行在XGATE內核中

XGMCTL=0xFBC1;//使能XGATE模塊和中斷

最后要初始化XGATE中斷向量表以指向函數。XGATE向量表是完全獨立于CPU的向量表,有兩個項,分別服務于每一個向量。第一個項是指向中斷函數的指針,如CAN0中斷的服務函數CAN0RX_XSR();第二個項是當發生中斷時將被傳遞的參數值,如下所示:

const XGATE_TableEntryXGATE_VectorTable[]={

{ErrorHandler,0x09},//通道9-保留

……

{CAN0RX_XSR,0x59},//通道59-CAN0接收中斷

……

{ErrorHandler,0x79},//通道79-IRQ中斷};

3 結束語

實踐證明,XGATE通過一些特殊的比特提取及插入的單周期指令,特別適用于串行通信協議使用。協處理器可以獨立異步地訪問內存及片上外設,在系統應用中可減輕主處理器CPU12X的負擔,以增加系統的數據吞吐能力;訪問RAM方面XGATE也有其自己的優勢,在單片機及嵌入式系統開發中,展現出其獨特的優勢。

[1]飛思卡爾9S12X系列雙核中的協處理器XGATE使用方法[DB/OL].電子工程世界,2012.[2016-01-15].http://download. eeworld.com.cn/detail/Timson/1504.

[2]張陽.單片機原理及嵌入式系統開發[M].北京:電子工業出版社,2011.9.

[3]張陽,吳曄,滕勤.MC9S12XS單片機原理及嵌入式系統開發[M].北京:電子工業出版社,2011.9.

[4]王威.HCS12微控制器原理及應用[M]北京:北京航空航天大學出版社,2007.

[5]邵貝貝.單片機嵌入式應用的在線開發方法[M].北京:清華大學出版社,2004.10.

[6]Freescale Company.MC9S12XEP100 Reference Manual CoversMC9S12XE Family[DB/OL].[2016-01-15].http://cache.free scale.com/files/microcontrollers/doc/data_sheet/MC9S12XEP100 RMV1.

[7]Freescale Company.How to Configure and Use the XGATE on S12X Devices[DB/OL].[2016-01-15].http://cache.nxp.com/files /microcontrollers/doc/app_note/AN2685.pdf?fsrch=1&sr=2&pageNum=1.

修改稿日期:2016-02-01

Application of Freescale S12X Series Microcomputer Coprocessor

Wu Chengjia,Xu Chuan
(Anhui Ankai Automobile Co.,Ltd,Hefei 230051,China)

The authors introduce the basic characteristics,interrupt and prioritysetting,code operation in RAMand signal interlockingofthe Freescale 16-bit microprocessor series S12X(E)single chip processor(XGATE).Theyalso present the application instance ofusingcoprocessor implementation CAN information interrupt receivingin order to reduce the burden ofCPUand enhance the data throughput ofthe vehicle electronic software system.

Freescale micro-computer;coprocessor;XGATE;S12Xseries

U463.6

B

1006-3331(2016)04-0055-04

吳成加(1971-),男,工程師;研究方向:新能源汽車電驅動及控制系統核心零部件關鍵技術研究。

猜你喜歡
寄存器內核中斷
多內核操作系統綜述①
TMS320F28335外部中斷分析與研究
強化『高新』內核 打造農業『硅谷』
活化非遺文化 承啟設計內核
多級中斷屏蔽技術分析
Lite寄存器模型的設計與實現
一種考慮GPS信號中斷的導航濾波算法
常用電子測速法在某數字信號處理器中的應用*
微軟發布新Edge瀏覽器預覽版下載換裝Chrome內核
移位寄存器及算術運算應用
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合