中國電子科技集團公司第七研究所 陳玉生
KeyStone多核DSP中斷系統原理及實現
中國電子科技集團公司第七研究所 陳玉生
本文概述KeyStone多核DSP中斷系統的架構,分析DSP中斷系統原理以及中斷系統的實現,最后以TCI6614 GPIO為例說明中斷系統的實現。
KeyStone多核DSP;中斷系統
TI keystone系列DSP中斷由兩部分組成[1],芯片中斷控制器(INTC)和DSP核中斷處理控制器(corePac Interrupt Control)。INTC共有4個,如圖1所示, INTC0主要負責core0,core1,core2,core3,INTC1主要負責控制EDMA3的TPCC1和TPCC2,INTC2主要負責控制EDMA3的TPCC0和HyperLink的中斷,INTC3負責與ARM中斷。corePac內部的中斷控制器位于corePac內部,主要負責將外部中斷事件轉換為CorePac內部的中斷信號,在DSP的Core0到Core3各有自己的核內中斷控制器。

圖1 TCl6614中斷處理系統框圖
INTC0的輸入系統事件有3預留的二級事件,123個內核二級事件和82個公共事件,共有128個輸入系統事件;而INTC0輸出給Core0的主機事件有AIF的廣播事件8個,二級主機事件18個,INTC0廣播事件8個,INTC0輸出給Core0的主機事件共有34個 。
INTC中斷控制器[2]主要作用是負責將系統事件映射為CorePac可直接處理的主機事件。系統事件可以是外部設備模塊產生。INTC接收到系統事件并將其映射到內部通道,內部通道將其為映射到主機中斷接口上。在KeyStone架構中,中斷信道和主機事件之間的映射關系是確定的,一一對應的映射關系。
通過編程配置C66x CorePac中斷控制器產生CPU中斷事件,INTC中斷控制器最多同時輸入128個系統中斷事件,經過INTC的邏輯組合,最后輸出12個CPU中斷、1個CPU的異常中斷。
INTC中斷控制器通過以下4個步驟將系統事件映射為主機事件,如圖2所示,這4個步驟如下:
步驟1:使能系統事件;
步驟2:獲取中斷狀態信息;
步驟3:信道映射;
步驟4:主機事件映射。

圖2 lNTC中斷控制器系統
步驟1:使能系統事件
通過編程設置使能系統事件,被使能的系統事件將會產生并映射為主機事件。
步驟2:獲取中斷狀態信息
INTC從狀態寄存器獲取系統事件狀態信息,通過狀態信息去判斷系統事件是否在處于使能狀態。狀態寄存器中的每個比特位是獨立的,當狀態寄存器的狀態位被置位時,使能相應的系統事件;當狀態寄存器被清除,其對應的系統事件狀態被清除。
步驟3:信道映射
INTC把已使能的系統事件映射到內部通道,如圖3所示。當多個系統事件被映射到相同的信道時,通過邏輯組合的方式將多個系統事件映射為多個或者一個主機事件,或操作將多個系統事件進行組合在一起。
步驟4:主機事件映射
主機事件映射是固定的,一對一的對應關系,INTC將已定義好的信道事件映射到主機事件中。每個信道映射均有一個寄存器來定義主機事件。

圖3 信道映射模塊
2.1 中斷映射方法和原理
2.1.1 通道中斷映射寄存器(CH_MAP_REGx)
通道映射寄存器定義了每個系統事件對應的信道。每個系統事件映射需要8bit,因此1個32bit的中斷映射寄存器可以配置4個系統事件,如圖4所示,表1-通道中斷映射寄存器比特位域說明。系統事件數最多為1024個,因此最多需要256個中斷映射寄存器(CH_MAP_REGx)。

圖4 中斷映射寄存器

表1-通道中斷映射寄存器比特位域說明
2.1.2 主機中斷映射寄存器(HINT_MAP_REGx)
主機中斷事件映射寄存器為每個主機事件映射到每個通道,這個寄存器完成INTC的信道到CorePac中斷控制器的主機事件的映射。INTC信道和主機事件的映射關系是固定的,一一對應關系。每個通道需要8bit,因此1個 32bit的主機中斷事件寄存器映射4個通道。由于映射通道數最多為256個,因此最多需要64個主機中斷映射寄存器(HINT_MAP_REGx),如圖5所示,表2-主機中斷映射寄存器比特域說明。

圖5 主機中斷映射寄存器

表2-主機中斷映射寄存器比特位域說明
CorePac中斷控制器[3]將外部中斷信號轉換為CPU中斷的輸入(INT[15∶4])。外部輸入中斷信號有3個,分別是1個RESET事件(復位信號)、1個NMEVT事件(不可屏蔽中斷信號)、128個EVT事件(普通中斷事件信號)。在CPU內部,可供處理的中斷信號為INT[15:4],即CPU可處理的中斷信號只有12個,如圖6所示。
CorePac中斷控制器負責將輸入事件通過邏輯組合方式產生17個中斷信號給CorePac DSP,這17個中斷信號為:
1個可屏蔽硬件異常中斷;
1.3.3 隨訪時間 本觀察組所有患者均于2016年1月起開始隨訪,至2017年12月結束,當隨訪期滿、復發或發生死亡事件即終止。隨訪方式主要通過上門隨訪或門診隨訪。對照主要是收集所有入組病人在建立健康檔案前一年沒有經過社區指導與監護的各項對比指標情況。
12個可屏蔽硬件中斷;
1個不可屏蔽中斷;
1個復位中斷信號。
CorePac中斷控制器包括有中斷選擇器,事件組合器,異常組合器。其中中斷選擇器負責將任意的系統事件通過邏輯組合后產生12個可屏蔽中斷;事件組合器主要作用是將大量的系統事件通過邏輯組合生成4個事件;異常事件組合器將任意的系統事件組合產生1個硬件異常中斷。

圖6 CorePac中斷控制器
3.1 中斷選擇寄存器(lnterrupt Mux Register)

圖8 DlR寄存器

圖10 上升沿觸發寄存器

圖11 事件標志寄存器
中斷選擇寄存器通過編程的方式從128個源中斷事件中選擇12個可用的中斷輸入到DSP的INT中斷事件,如圖7所示,表3-中斷選擇寄存器比特位域說明。每個中斷選擇寄存器可以配置保存4個中斷事件的信息,因此12個DSP的INT中斷事件需要3個中斷選擇寄存器。

圖7 中斷選擇寄存器

表3-中斷選擇寄存器比特位域說明
綜上所述,每個DSP最多有1024個系統事件,經過中斷映射后只有12個DSP的INT中斷,
通過TCI6614 GPIO[4]說明中斷系統的實現說明。
4.1 初始化GPlO狀態
4.1.1 設置GPIO的輸出狀態
通過配置Direction Register(DIR)寄存器,GPIO端口可以作為輸入端口或輸出端口,如圖8所示,表4-GPIO方向寄存器比特位域說明。由于需要GPIO端口產生中斷給CPU,因此將GPIO配置為輸出端口,寄存器相應的比特位置0,即:
DIR=0x00000000

表4-GPlO方向寄存器比特位域說明
4.1.2 設置GPIO中斷使能
為了使能所有的GPIO作為中斷源輸入到CPU中斷,Bank Interrupt Enable Register(BINTEN)寄存器最低比特位設置為1,如圖9所示,表5-BINTEN寄存器使用說明。即:
BINTEN=0x00000001

圖9 BlNT寄存器

表5-BlNTEN寄存器使用說明
4.1.3 設置GPIO中斷觸發方式
觸發中斷可以是上升沿或下降沿,如設置上升沿為中斷觸發沿,則將寄存器SET_RIS_TRIG相應的比特位置1,如圖10所示,如表6所示,上升沿觸發寄存器使用說明,即:
SET_RIS_TRIG=0x0000ffff.

表6-上升沿觸發寄存器使用說明
4.2 GPlO的中斷通道映射
根據TCI6614系統事件映射,128個中斷事件,前面4個是combiner的輸出,其余每個中斷事件號對應著EVTMASK0~EVTMASK3的比特位。GPIO的GPINT4~GPINT15對應著EventNumber事件號78~89,并且EventNumber事件號78~89對應Event Mask Register 2(EVTMASK2)寄存器的第15~25比特位。如GPINT4中斷對應Event Number 78,通過設置EVTMASK2的第15比特位為0,則表示GPINT4被使能,并將作為系統事件,通過邏輯組合產生INTC2中斷事件(映射到通道2上),如圖11所示,表7,事件標志寄存器使用說明。
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))