中國(guó)電子科技集團(tuán)公司第七研究所 陳玉生
KeyStone多核DSP中斷系統(tǒng)原理及實(shí)現(xiàn)
中國(guó)電子科技集團(tuán)公司第七研究所 陳玉生
本文概述KeyStone多核DSP中斷系統(tǒng)的架構(gòu),分析DSP中斷系統(tǒng)原理以及中斷系統(tǒng)的實(shí)現(xiàn),最后以TCI6614 GPIO為例說(shuō)明中斷系統(tǒng)的實(shí)現(xiàn)。
KeyStone多核DSP;中斷系統(tǒng)
TI keystone系列DSP中斷由兩部分組成[1],芯片中斷控制器(INTC)和DSP核中斷處理控制器(corePac Interrupt Control)。INTC共有4個(gè),如圖1所示, INTC0主要負(fù)責(zé)core0,core1,core2,core3,INTC1主要負(fù)責(zé)控制EDMA3的TPCC1和TPCC2,INTC2主要負(fù)責(zé)控制EDMA3的TPCC0和HyperLink的中斷,INTC3負(fù)責(zé)與ARM中斷。corePac內(nèi)部的中斷控制器位于corePac內(nèi)部,主要負(fù)責(zé)將外部中斷事件轉(zhuǎn)換為CorePac內(nèi)部的中斷信號(hào),在DSP的Core0到Core3各有自己的核內(nèi)中斷控制器。
圖1 TCl6614中斷處理系統(tǒng)框圖
INTC0的輸入系統(tǒng)事件有3預(yù)留的二級(jí)事件,123個(gè)內(nèi)核二級(jí)事件和82個(gè)公共事件,共有128個(gè)輸入系統(tǒng)事件;而INTC0輸出給Core0的主機(jī)事件有AIF的廣播事件8個(gè),二級(jí)主機(jī)事件18個(gè),INTC0廣播事件8個(gè),INTC0輸出給Core0的主機(jī)事件共有34個(gè) 。
INTC中斷控制器[2]主要作用是負(fù)責(zé)將系統(tǒng)事件映射為CorePac可直接處理的主機(jī)事件。系統(tǒng)事件可以是外部設(shè)備模塊產(chǎn)生。INTC接收到系統(tǒng)事件并將其映射到內(nèi)部通道,內(nèi)部通道將其為映射到主機(jī)中斷接口上。在KeyStone架構(gòu)中,中斷信道和主機(jī)事件之間的映射關(guān)系是確定的,一一對(duì)應(yīng)的映射關(guān)系。
通過(guò)編程配置C66x CorePac中斷控制器產(chǎn)生CPU中斷事件,INTC中斷控制器最多同時(shí)輸入128個(gè)系統(tǒng)中斷事件,經(jīng)過(guò)INTC的邏輯組合,最后輸出12個(gè)CPU中斷、1個(gè)CPU的異常中斷。
INTC中斷控制器通過(guò)以下4個(gè)步驟將系統(tǒng)事件映射為主機(jī)事件,如圖2所示,這4個(gè)步驟如下:
步驟1:使能系統(tǒng)事件;
步驟2:獲取中斷狀態(tài)信息;
步驟3:信道映射;
步驟4:主機(jī)事件映射。
圖2 lNTC中斷控制器系統(tǒng)
步驟1:使能系統(tǒng)事件
通過(guò)編程設(shè)置使能系統(tǒng)事件,被使能的系統(tǒng)事件將會(huì)產(chǎn)生并映射為主機(jī)事件。
步驟2:獲取中斷狀態(tài)信息
INTC從狀態(tài)寄存器獲取系統(tǒng)事件狀態(tài)信息,通過(guò)狀態(tài)信息去判斷系統(tǒng)事件是否在處于使能狀態(tài)。狀態(tài)寄存器中的每個(gè)比特位是獨(dú)立的,當(dāng)狀態(tài)寄存器的狀態(tài)位被置位時(shí),使能相應(yīng)的系統(tǒng)事件;當(dāng)狀態(tài)寄存器被清除,其對(duì)應(yīng)的系統(tǒng)事件狀態(tài)被清除。
步驟3:信道映射
INTC把已使能的系統(tǒng)事件映射到內(nèi)部通道,如圖3所示。當(dāng)多個(gè)系統(tǒng)事件被映射到相同的信道時(shí),通過(guò)邏輯組合的方式將多個(gè)系統(tǒng)事件映射為多個(gè)或者一個(gè)主機(jī)事件,或操作將多個(gè)系統(tǒng)事件進(jìn)行組合在一起。
步驟4:主機(jī)事件映射
主機(jī)事件映射是固定的,一對(duì)一的對(duì)應(yīng)關(guān)系,INTC將已定義好的信道事件映射到主機(jī)事件中。每個(gè)信道映射均有一個(gè)寄存器來(lái)定義主機(jī)事件。
圖3 信道映射模塊
2.1 中斷映射方法和原理
2.1.1 通道中斷映射寄存器(CH_MAP_REGx)
通道映射寄存器定義了每個(gè)系統(tǒng)事件對(duì)應(yīng)的信道。每個(gè)系統(tǒng)事件映射需要8bit,因此1個(gè)32bit的中斷映射寄存器可以配置4個(gè)系統(tǒng)事件,如圖4所示,表1-通道中斷映射寄存器比特位域說(shuō)明。系統(tǒng)事件數(shù)最多為1024個(gè),因此最多需要256個(gè)中斷映射寄存器(CH_MAP_REGx)。
圖4 中斷映射寄存器
表1-通道中斷映射寄存器比特位域說(shuō)明
2.1.2 主機(jī)中斷映射寄存器(HINT_MAP_REGx)
主機(jī)中斷事件映射寄存器為每個(gè)主機(jī)事件映射到每個(gè)通道,這個(gè)寄存器完成INTC的信道到CorePac中斷控制器的主機(jī)事件的映射。INTC信道和主機(jī)事件的映射關(guān)系是固定的,一一對(duì)應(yīng)關(guān)系。每個(gè)通道需要8bit,因此1個(gè) 32bit的主機(jī)中斷事件寄存器映射4個(gè)通道。由于映射通道數(shù)最多為256個(gè),因此最多需要64個(gè)主機(jī)中斷映射寄存器(HINT_MAP_REGx),如圖5所示,表2-主機(jī)中斷映射寄存器比特域說(shuō)明。
圖5 主機(jī)中斷映射寄存器
表2-主機(jī)中斷映射寄存器比特位域說(shuō)明
CorePac中斷控制器[3]將外部中斷信號(hào)轉(zhuǎn)換為CPU中斷的輸入(INT[15∶4])。外部輸入中斷信號(hào)有3個(gè),分別是1個(gè)RESET事件(復(fù)位信號(hào))、1個(gè)NMEVT事件(不可屏蔽中斷信號(hào))、128個(gè)EVT事件(普通中斷事件信號(hào))。在CPU內(nèi)部,可供處理的中斷信號(hào)為INT[15:4],即CPU可處理的中斷信號(hào)只有12個(gè),如圖6所示。
CorePac中斷控制器負(fù)責(zé)將輸入事件通過(guò)邏輯組合方式產(chǎn)生17個(gè)中斷信號(hào)給CorePac DSP,這17個(gè)中斷信號(hào)為:
1個(gè)可屏蔽硬件異常中斷;
1.3.3 隨訪時(shí)間 本觀察組所有患者均于2016年1月起開(kāi)始隨訪,至2017年12月結(jié)束,當(dāng)隨訪期滿、復(fù)發(fā)或發(fā)生死亡事件即終止。隨訪方式主要通過(guò)上門(mén)隨訪或門(mén)診隨訪。對(duì)照主要是收集所有入組病人在建立健康檔案前一年沒(méi)有經(jīng)過(guò)社區(qū)指導(dǎo)與監(jiān)護(hù)的各項(xiàng)對(duì)比指標(biāo)情況。
12個(gè)可屏蔽硬件中斷;
1個(gè)不可屏蔽中斷;
1個(gè)復(fù)位中斷信號(hào)。
CorePac中斷控制器包括有中斷選擇器,事件組合器,異常組合器。其中中斷選擇器負(fù)責(zé)將任意的系統(tǒng)事件通過(guò)邏輯組合后產(chǎn)生12個(gè)可屏蔽中斷;事件組合器主要作用是將大量的系統(tǒng)事件通過(guò)邏輯組合生成4個(gè)事件;異常事件組合器將任意的系統(tǒng)事件組合產(chǎn)生1個(gè)硬件異常中斷。
圖6 CorePac中斷控制器
3.1 中斷選擇寄存器(lnterrupt Mux Register)
圖8 DlR寄存器
圖10 上升沿觸發(fā)寄存器
圖11 事件標(biāo)志寄存器
中斷選擇寄存器通過(guò)編程的方式從128個(gè)源中斷事件中選擇12個(gè)可用的中斷輸入到DSP的INT中斷事件,如圖7所示,表3-中斷選擇寄存器比特位域說(shuō)明。每個(gè)中斷選擇寄存器可以配置保存4個(gè)中斷事件的信息,因此12個(gè)DSP的INT中斷事件需要3個(gè)中斷選擇寄存器。
圖7 中斷選擇寄存器
表3-中斷選擇寄存器比特位域說(shuō)明
綜上所述,每個(gè)DSP最多有1024個(gè)系統(tǒng)事件,經(jīng)過(guò)中斷映射后只有12個(gè)DSP的INT中斷,
通過(guò)TCI6614 GPIO[4]說(shuō)明中斷系統(tǒng)的實(shí)現(xiàn)說(shuō)明。
4.1 初始化GPlO狀態(tài)
4.1.1 設(shè)置GPIO的輸出狀態(tài)
通過(guò)配置Direction Register(DIR)寄存器,GPIO端口可以作為輸入端口或輸出端口,如圖8所示,表4-GPIO方向寄存器比特位域說(shuō)明。由于需要GPIO端口產(chǎn)生中斷給CPU,因此將GPIO配置為輸出端口,寄存器相應(yīng)的比特位置0,即:
DIR=0x00000000
表4-GPlO方向寄存器比特位域說(shuō)明
4.1.2 設(shè)置GPIO中斷使能
為了使能所有的GPIO作為中斷源輸入到CPU中斷,Bank Interrupt Enable Register(BINTEN)寄存器最低比特位設(shè)置為1,如圖9所示,表5-BINTEN寄存器使用說(shuō)明。即:
BINTEN=0x00000001
圖9 BlNT寄存器
表5-BlNTEN寄存器使用說(shuō)明
4.1.3 設(shè)置GPIO中斷觸發(fā)方式
觸發(fā)中斷可以是上升沿或下降沿,如設(shè)置上升沿為中斷觸發(fā)沿,則將寄存器SET_RIS_TRIG相應(yīng)的比特位置1,如圖10所示,如表6所示,上升沿觸發(fā)寄存器使用說(shuō)明,即:
SET_RIS_TRIG=0x0000ffff.
表6-上升沿觸發(fā)寄存器使用說(shuō)明
4.2 GPlO的中斷通道映射
根據(jù)TCI6614系統(tǒng)事件映射,128個(gè)中斷事件,前面4個(gè)是combiner的輸出,其余每個(gè)中斷事件號(hào)對(duì)應(yīng)著EVTMASK0~EVTMASK3的比特位。GPIO的GPINT4~GPINT15對(duì)應(yīng)著EventNumber事件號(hào)78~89,并且EventNumber事件號(hào)78~89對(duì)應(yīng)Event Mask Register 2(EVTMASK2)寄存器的第15~25比特位。如GPINT4中斷對(duì)應(yīng)Event Number 78,通過(guò)設(shè)置EVTMASK2的第15比特位為0,則表示GPINT4被使能,并將作為系統(tǒng)事件,通過(guò)邏輯組合產(chǎn)生INTC2中斷事件(映射到通道2上),如圖11所示,表7,事件標(biāo)志寄存器使用說(shuō)明。
EVTMASK2=~((1〈〈14)|(1〈〈15)|(1〈〈16)|(1〈〈17)| (1〈〈18)|(1〈〈19)|(1〈〈20)|(1〈〈21)|(1〈〈22)|(1〈〈23)| (1〈〈24)|(1〈〈25))