C66xx SRIO DoorBell的使用

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/u013215852/article/details/88914432

关于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

猜你喜欢

转载自blog.csdn.net/u013215852/article/details/88914432