999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

KeyStone架構的多核DSP中斷路由機制及其實現方法

2017-02-09 03:12:20沙海珍魏利卓
單片機與嵌入式系統應用 2017年1期

沙海珍,魏利卓

(1.重慶郵電大學 通信與信息工程學院,重慶 400065;2.中國電子信息產業集團有限公司第六研究所)

?

沙海珍1,魏利卓2

(1.重慶郵電大學 通信與信息工程學院,重慶 400065;2.中國電子信息產業集團有限公司第六研究所)

在KeyStone多核DSP應用系統中,中斷的使用是不可或缺的一部分,處理中斷的能力也是衡量一個芯片性能的重要因素之一。本文以TI公司推出的高性能TMS320C6670四核DSP為基礎,講述了基于KeyStone架構的多核DSP的中斷路由機制,并以TMS320C6670集成的SRIO高速接口的LSU中斷和DOORBELL中斷為例,通過調用TMS320C6670的SYS/BIOS提供的CSL庫函數,分別給出了兩者的實現方法。

DSP;中斷;TMS320C6670;SRIO

引 言

TI公司推出的TMS320C6670(以下簡稱C6670)四核DSP采用先進的KeyStone多內核架構,集成了HyperLink、PCIe、SRIO以及其他外設,可實現內核與存儲器存取的直接通信,能夠充分發揮多內核性能。它在電源方面采用TI Green Power技術,使其具有很好的電源效率。此外,C6670在計算方面采用定點+浮點架構,支持將浮點算法方便地移植到多核平臺上[1]。基于以上這些優點,C6670在數字控制領域已經有著非常廣泛的應用,成為電子工業領域不可替代的高性能產品。

中斷處理是一個芯片必須具備的能力,尤其在DSP系統中是必不可少的重要環節,它對輸入輸出處理、多道程序和分時操作、實時處理和人機交互等方面都起著重要的作用。中斷由外設請求和CPU響應兩個過程組成。首先,某一外設向CPU發出請求信號,請求CPU暫停當前程序而去處理中斷服務子程序ISR。其次,當CPU接收到這個請求信號后,便對當前執行的主程序進行現場標記并暫停其運行,自動轉移到請求設備的中斷服務子程序中去。當中斷服務程序結束后,CPU就回到之前標記的主程序之處繼續執行。

1 KeyStone多核DSP的中斷系統架構

C6670的中斷控制系統由兩部分組成:芯片中斷處理控制器(Chip Interrupt Controller,CIC)和核中斷控制器(Interrupt Controller,INTC),架構圖略——編者注。外部設備產生的中斷由CIC和INTC共同作用,以實現CPU響應中斷的目的。其中,CIC位于內核外部,主要負責將外部中斷映射到CorePac、EDMA和HyperLink內部的主機中斷信號。CorePac中斷控制器則位于核內部,負責將主機中斷信號轉為CPU可處理的12個可屏蔽中斷信號。

1.1 CorePac中斷路由

在C6670中,EDMA3控制器以及4個CorePac都可以直接接收中斷,但是無論是CorePac還是EDMA3控制器,其能直接接收的中斷輸入是有限的。KeyStone CorePac能夠直接接收的中斷輸入為1個可屏蔽的硬件Exception、12個可屏蔽的硬件Interrupt(INT4~INT15)、1個不可屏蔽的NMI信號以及1個復位信號[2]。Exception其實也為Interrupt,區別在于Exception常常伴隨的是錯誤信息的發生。其中Exception、NMI、Reset信號都是芯片保留的中斷輸入,用戶能夠自行配置的中斷輸入實際為12個(INT4~INT15),在這12個可屏蔽中斷輸入中,INT4的優先級最高,INT15的優先級最低。

然而,作為一個復雜的DSP芯片,如果其能處理的中斷源僅為15個,是遠遠無法滿足復雜程序需求的。所以為了能夠處理更多的中斷源,KeyStone結構的DSP CorePac內部集成了一個中斷控制器INTC,其作用是將更多的中斷源(對于KeyStone架構DSP來說,是128個System Event)路由到這12個可屏蔽中斷輸入中去。

CorePac中集成了Interrupt Selector,使得編程人員可以將這128個System Event中的任何一個路由到INT4~INT15中的任何一個,從而完成事件響應。例如,C6670的第85號System Event為GPINT11事件,如果把第85號事件路由到CorePac的第7個可屏蔽中斷輸入(INT7),那么當DSP的第11個GPIO引腳的事件發生以后,且當前沒有更高優先級的中斷發生(比INT7更高優先級的中斷),則DSP的CorePac會跳轉到中斷向量表,進一步去執行中斷處理函數。

CorePac的INTC中還集成了一個Event Combiner控制器,起到事件合成的作用。這128個System Event中的第4~127個System Event都是來自芯片內部或者外部的Event,都是有實際物理意義的,而使用Event Combiner則可以將第4~31號System Event中的若干個合成為Event #0,或者將第32~63號System Event中的若干個合成為Event #1,或者將第64~95號System Event中的若干個合成為Event #2,或者將第96~127號System Event中的若干個合成為Event #3。如圖1所示,則等效的System Event有128個。

圖1 Event Combiner目的圖

對于合成的System Event,是“或”的關系。即如果使用了Event Combiner將第7、13、35號System Event合成為Event #0,那么只要7、13、35中的任何一個事件發生,就等效為Event #0事件發生。

整個CorePac中,128個System Event到12個可屏蔽中斷(INT4~INT15)的結構框圖見圖2。

圖2 INTC內部中斷路由結構圖

1.2 CIC中斷路由

KeyStone DSP核心CorePac能夠處理128個System Event(其中實際有直接物理意義的為124個,Event 0~3為合成的結果,共計128個),絕大部分是芯片內部DMA、QMSS等模塊產生的事件,這128個事件仍然無法滿足程序的需求。因為DSP芯片諸多外設產生的事件同樣需要得到及時地處理,比如SRIO、PCIE等外設,而每個外設產生的事件往往不止一個,比如SRIO事件也分為包發送成功事件、包發送失敗事件、Doorbell接收事件等。所以,如果希望在這些大量的外設事件發生后,CorePac能夠去執行相應的中斷處理函數,那么這些事件也是需要路由到CorePac的12個可屏蔽中斷輸入(INT4~INT15)中去的。但是,這些外設事件是不能夠像128個System Event那樣直接路由到INT4~INT15中去的[3]。而CIC在外設事件到CorePac之間的路由起到了橋梁的作用。需要注意的是,CIC/Cpintc不是CorePac的INTC,其是在CorePac外部的,CorePac的INTC是在CorePac內部的。

由圖1可知,C6670內部有3個CIC,即CIC0~CIC2。其中CIC0負責外設事件到CorePac的路由,CIC1~CIC2負責外設事件到EDMA3或者HyperLink控制器之間的路由。這里只討論CIC0的功能,而CIC1~CIC2的路由機制一致,與CIC0的區別僅僅為目的地不同。

CIC0的輸入稱為System Interrupt,輸出為CIC0_OUTx(稱為Host Interrupt)。CIC0能夠接收的System Interrupt有208個,CIC0的目的即為把這208個System Interrupt路由到其CIC0_OUTx去。如果若干個System Interrupt通過CIC0路由到了某一個Host Interrupt,那么這若干個System Interrupt為“或”的關系。而Host Interrupt與CorePac的 INTC的System Event是一一對應的。例如,Host Interrupt中的CIC0_OUT0對應的是System Event 56,或者CIC0_OUT(64+0+10×n)對應的是System Event22,其中n為核號。

2 KeyStone DSP中斷路由路徑

總的來說,KeyStone DSP中斷路由路徑有兩種,如圖3所示。第一,System Event經過Event Combiner后,再通過Interrupt Selector路由到INTCx,或者System Event不經過Event Combiner,直接通過Interrupt Selector路由到INTCx。第二,System Interrupt經過CIC0路由到某個Host Interrupt,而Host Interrupt是對應到System Event的,之后再將該System Event經過Event Combiner、Inter-

rupt Selector路由到INTCx,或者直接將該System Event經過Interrupt Selector路由到INTCx。

Primary Interrput直接對應于某個System Event。例如GPINT4對應System Event #78,輸入CorePac INT。用戶可以選擇是否經過Event Combiner,如果經過Event Combiner,則合成為Event2,再經過Interrupt Selector路由到INTCx;如果不經過Event Combiner,則直接將System Event #78經過Interrupt selector路由到INTCx。

Secondary Interrupt也稱為System Interrupt,先經過CIC0路由到CIC0的某個輸出(Host Interrupt),比如可以將CIC0的第122號輸入INTDST10,經過CIC0路由到CIC0_OUT7。而每個Host Interrupt是直接對應某個System Event的,例如CIC0_OUT7對應的是System Event #63。如果經過Event Combiner,則合成為Event1,再經過Interrupt Selector路由到INTCx;如果不經過Event Combiner,則直接將System Event #63路由到INTCx。

圖3 System Interrupt到INTCx的路由路徑

3 KeyStone DSP的SRIO中斷

SRIO模塊能夠輸出若干種不同的中斷,這些中斷屬于System Interrupt。如果當SRIO中斷到來后,想讓DSP及時地去處理相應的中斷函數,則需要將該中斷經過某個路徑路由到INTCx中去。

SRIO的主要中斷有兩種:一種為包發送中斷,該中斷可以通知DSP,SRIO模塊已經發送了一個協議包;另一種為Doorbell中斷,為SRIO模塊接收遠程器件發送來的Doorbell包,并做相應的處理。其中, SRIO模塊中的LSU寄存器負責的是DIO協議包的發送,則DIO協議包的發送中斷可以稱為LSU中斷[4]。無論是LSU中斷還是Doorbell中斷,都是SRIO內部的Peripheral Interrupt,需要路由到System Interrupt。System Interrupt是從SRIO外設輸出到CIC0輸入端口的信號。

KeyStone DSP的SRIO模塊共有24個System Interrupt,稱為INTDST0~23。其中INTDST0~15為通用System Interrupt,可以連接LSU或者Doorbell Peripheral Interrupt,再輸入到CIC0;而INTDST16~INTDST23只連接Doorbell Peripheral Interrupt,且為System Event,是直接輸入到CorePac的。

3.1 SRIO LSU中斷路徑的實現

SRIO模塊內部會產生40個LSU中斷,其中有32個中斷由寄存器LSU0_ICSR控制,另外8個由寄存器LSU1_ICSR控制。這里以寄存器LSU0_ICSR的最低位ICS0代表的SRCID0 Transaction Complete without errors中斷信號為例,說明LSU中斷路由的實現,路由路徑如圖4所示。首先將LSU產生的“SRCID0 Transaction Complete without errors”路由到INTDST1,然后將INTDST1對應的中斷處理函數myDioTxCompletionIsr插入到CpIntc_dispatch表中,接著在CIC0內部,將INTDST1路由到Host Interrupt #8,獲取Host Interrupt #8對應的System Event ID,此處為74,將System Event #74經過Event Combiner送入Interrupt Selector,并將CpIntc_dispatch

插入到EventCombiner_dispatch中去。在程序的SYS/BIOS cfg文件loopbackDioIsr.cfg中,定義了以下代碼:

ECM.eventGroupHwiNum[0] = 7;

ECM.eventGroupHwiNum[1] = 8;

ECM.eventGroupHwiNum[2] = 9;

ECM.eventGroupHwiNum[3] = 10;

即可將System Event #2路由到INTC9。

圖4 LSU中斷路由路徑

如此,則當“SRCID0 Transaction Complete without errors”發生時,CPU能夠響應。首先去處理EventCombiner_dispatch表,而CpIntc_dispatch表已經插入了Event Combiner_dispacth表,則接著去處理CpIntc_dispatch表。而中斷處理函數myDioTxCompletionIsr插入到了CpIntc_dispatch表,則myDioTxCompletionIsr就會被執行。

3.2 SRIO Doorbell中斷路徑的實現

根據RapidIO協議可知,Doorbell包中攜帶16位的Doorbell Info。對于協議本身來說,這16位數據是沒有含義的,而對于KeyStone DSP來說,這16位的Doorbell Info即為Doorbell中斷源。

KeyStone DSP定義了Doorbell Info的第0~3位代表位信息,第5~6位代表Reg信息,其他位為保留位,無含義。例如,如果KeyStone DSP接收到的Doorbell中Info Field為0b 0000 0000 0100 1010,即表示Reg=2且Bit=10中斷,對應的是Doorbell[2]_ICSR.ICS10標志位被置1。也就是說,如果Doorbell[n]_ICSR.ICSx位被硬件置1,則表明接收到的Doorbell Info[3:0]=x,doorbell Info[6:5]=n。KeyStone SRIO模塊能夠產生的Peripheral Interrupt共4×16=64種,每種對應一個特定的Doorbell Info值。

如前所述,Peripheral Interrupt是需要路由到System Interrupt(INTDST0~INTDST23)上去的。而寄存器Doorbelln_ICRR和Doorbelln_ICRR2定義了Reg=n且Bit=x的Doorbell Info Peripheral Interrupt被路由到INTDSTy上去。

一旦能夠將某個特定的Doorbell Info路由到某個INTDSTy上之后,剩下的步驟就是將INTDSTy再經過某個路徑路由到INTCz上去,就能實現當DSP接收到該Doorbell Info時,中斷能夠被處理。

KeyStone SRIO模塊的Doorbell中斷的路由路徑有4種,分別為經過CIC0和Event Combiner、經過CIC0但不經過Event Combiner、不經過CIC0但經過Event Combiner、不經過CIC0和Event Combiner。

下面說明Doorbell不經過CIC0和Event Combiner實現中斷的路由路徑,如圖5所示。

首先,將Reg=0且Bit=任意的Doorbell Info中斷路由到INTDST16。部分代碼如下:

CSL_SRIO_SetDoorbellRoute(hSrio, 0);

for (i = 0; i < 16; i++){

CSL_SRIO_RouteDoorbellInterrupts(hSrio, 0, i, 0);

CSL_SRIO_RouteDoorbellInterrupts(hSrio, 1, i, 1);

CSL_SRIO_RouteDoorbellInterrupts(hSrio, 2, i, 2);

CSL_SRIO_RouteDoorbellInterrupts(hSrio, 3, i, 3);

}

然后,直接將INTDST16對應的System Event #20直接路由到INTC7上,關鍵代碼如下:

Hwi_Params hwiParams;

Hwi_Handle myHwi;

Error_Block eb;

Hwi_Params_init(&hwiParams);

Error_init(&eb);

hwiParams.arg = (UArg)hDrvManagedSrioDrv;

hwiParams.eventId = 20;

myHwi = Hwi_create(7, (CpIntc_FuncPtr)myDoorbellCompletionIsr, &hwiParams, &eb);

結 語

本文以四核DSP TMS320C6670為例,詳細地介紹了基于KeyStone架構的多核DSP的中斷系統的組成、中斷的路由機制及其不同的實現方法,并簡要介紹了其高速串行接口SRIO的兩種中斷:LSU中斷和Doorbll中斷的路由路徑。本文軟件程序設計沒有采用直接對寄存器進行操作,而是借助SYS/BIOS平臺中硬件中斷Hwi的創建來進行中斷的實現,通過調用CSL的庫函數,省去了直接對寄存器操作的繁雜過程,在很大程度上提高了編碼的效率及正確性。

[1] 牛金海.TMS320C66x KeyStone架構多核DSP入門與實例精解[M].上海:上海交通大學出版社,2014:58-62.

[2] Texas Instruments.TMS320C66x CorePac User's Guide,2013.

[3] Texas Instrument.Keystone Architecture Chip Interrupt Controller(CIC) User's Guide,2012.

[4] 吳文德.基于TI6678平臺的SYS/BIOS應用技術研究[D].北京:中國科學院大學,2015.

[5] Texas Instrument.Multicore Programming Guide Multicore Programming and Applications/DSP Systems,2012.

[6] Texas Instruments.TMS320C66x DSP CPU and Instruction Set Reference Guide,2010.

沙海珍(碩士研究生),主要研究方向為寬帶無線移動互聯網絡;魏利卓(碩士研究生),主要研究方向為嵌入式軟件開發。

圖8 文件上傳結果

結 語

參考文獻

[1] 汪小燕,連曉平,董燕,等.基于TFTP協議的嵌入式系統開發方法設計與實現[J].華中科技大學學報:自然科學版,2006,34(12):56-58.

[2] 熊傳玉,徐尤華.Android系統下基于JSON的天氣預報應用的實現[J].微型電腦應用,2016,32(1):8-10.

[3] 謝永悠.簡單文件傳送協議(TFTP)的C語言實現[J].電子元器件應用,2010,12(3):55-58.

[4] 沈煒,王曉聰.基于Qt的嵌入式圖形界面的研究和應用[J].工業控制計算機,2016,29(1):101-104.

柯玉山(碩士研究生),主要研究方向嵌入式系統應用、無線傳感器網絡;陳阿輝(碩士研究生),主要研究方向為雷達測距系統;邱菁(碩士研究生),主要研究方向為雷達測距算法。

(責任編輯:薛士然 收稿日期:2016-08-05)

Sha Haizhen1,Wei Lizhuo2

(1.Communication and Information Engineering,Chongqing University of Posts and Telecommunications,Chongqing 400065,China;2.China Institute of Electronic Information Industry Group Co.,Ltd.6)

In the system of KeyStone multi-core DSP’s application,the use of interrupts is an indispensable section,and the ability to handle the interrupt is an important factor of measuring the performance of a chip.In the paper,based on the TMS320C6670 with four cores, the routing path of interrupts on KeyStone multi-core DSP is introduced in detail.Taking the high-speed interface SRIO’s LSU interrupt and DOORBELL interrupt as the example,the realization methods are given respectively through calling CSL library functions provided by SYS/BIOS of TMS320C6670.

DSP;interrupt;TMS320C6670;SRIO

TP601

A

?士然

2016-08-09)

主站蜘蛛池模板: 欧美国产三级| 青青操国产视频| 日本中文字幕久久网站| 18禁不卡免费网站| 国产99在线观看| 欧美成人h精品网站| 色综合热无码热国产| 国产国模一区二区三区四区| 色综合中文字幕| 丁香五月激情图片| 色久综合在线| 欧美一级高清视频在线播放| 波多野结衣一区二区三区88| 2021国产精品自拍| 呦系列视频一区二区三区| 色悠久久综合| 日本午夜精品一本在线观看| 99视频在线免费观看| 久久免费观看视频| 手机看片1024久久精品你懂的| 99热这里只有精品在线观看| 中文字幕一区二区视频| 国产精品三级专区| 欧美中文字幕无线码视频| 欧美国产菊爆免费观看| 国产免费观看av大片的网站| 婷婷色一二三区波多野衣 | 日韩经典精品无码一区二区| 亚洲欧美日韩成人高清在线一区| 国产成人一区| 91丨九色丨首页在线播放| 青青操国产| 日本欧美中文字幕精品亚洲| 好吊日免费视频| 亚洲精品免费网站| 国产精品9| AV不卡在线永久免费观看| 国产69囗曝护士吞精在线视频| 国产夜色视频| 伊人成人在线视频| 免费网站成人亚洲| 日韩黄色在线| 免费国产一级 片内射老| 国产色婷婷视频在线观看| 日韩毛片免费观看| 无遮挡一级毛片呦女视频| 992tv国产人成在线观看| 国产精品夜夜嗨视频免费视频| 真实国产精品vr专区| 精品久久久久成人码免费动漫 | 精品无码一区二区三区在线视频| 片在线无码观看| 国产国产人成免费视频77777| a网站在线观看| 色九九视频| 青青草91视频| 国产网站在线看| 午夜毛片免费看| 欧美精品1区| 久久91精品牛牛| 在线看国产精品| 免费不卡视频| 国内精品视频在线| 国产自产视频一区二区三区| 伊人色在线视频| 国产一区在线观看无码| 九色在线观看视频| 中国特黄美女一级视频| 国产免费看久久久| 谁有在线观看日韩亚洲最新视频 | 狠狠色婷婷丁香综合久久韩国| 日韩在线永久免费播放| 国产精品偷伦在线观看| 一区二区自拍| 97人妻精品专区久久久久| 国产网站黄| 久久99精品国产麻豆宅宅| 婷婷亚洲综合五月天在线| 免费aa毛片| 日本三级欧美三级| 亚洲成a人片77777在线播放| 国产香蕉97碰碰视频VA碰碰看|