关于SRIO DoorBell中断的路径
Keystone DSP的SRIO模块共有24个system Interrupt,即INTDST0~23。其中INDTST0~15为通用的system Interrupt,可以连接到LSU或者DoorBell中断,再输入到CIC0,而INTDST16~23只连接DoorBell中断,属于system Event,直接输入到CorePac。
KeyStorn模块的DoorBell中断的路由路径有4种,分别为经过CIC0和EventCombiner、经过CIC0但不经过EventCombiner、不经过 CIC0但经过EventCombiner、不经过CIC0和EventCombiner。
本文以DSP6678中的core0为例,不经过CIC0和EventCombiner,以INTDST16(16+n,n=0)说明core0 SIRO DoorBell中断
说明:RapidIO的协议中Doorbell包中的16bit Doorbell info没有含义,但是KeyStone DSP将Doorbell info的0~3bit作为了n,以0000 0000 0010 0101为例,REG号为2,Doorbell info = 0b0101;
下图为官方给出的设置例子:
1、SYS/BIOS HWI中断的配置
HWI.evevtID = 20;
可由TMS320C6678 System Event Inputs — C66x CorePac Primary Interrupts 表格得到,n为核心数
针对DSP6678,CORE0的SRIO中断事件即为0+16,CORE1的中断事件为1+16,。。。
2、DoorBell中断路由配置
(1)DoorBell可以路由至专用中断,也可路由至16个通用中断;
作为例子,将INTERRUPT_CTL的值设为0,路由至Dedicated Doorbell Interrupts;
此时,使用Table 3-33
以核心0的SRIO DoorBell 中断为例,核心0对应的专用中断为INIDST16
(2)设置ICRR1,ICRR2寄存器
设置4个不同的“事件”,将ICR0~ICR3对应INTDST16,即将ICR0~ICR3的值都设置为INTDST16的value,即0000b
(3)产生一个DoorBell中断
LSU5中写入相应info,例如是ICR0对应的事件,写入0,ICR1事件写入1,ICR2事件写入2
(4)读取中断状态寄存器的值,0~15bit相应位为1则发生了中断,例如bit2 = 1,则代表的是ICR2事件中断
(5)清楚DoorBell中断,相应位写入1