在PCIe中断中,一共存在4种中断分别为:MSI中断、legacy中断、错误中断和电源管理及重启事件中断。比较常用的是MSI中断和legacy中断。当C6678当做EP端时,只能产生MSI和legacy中断中的一种。当C6678作为RC端时,MSI和legacy中断都能处理。
如图 1所示,C6678支持32个MSI中断,每四个中断组成一个中断事件号。需要注意的是核0只能支持4号中断事件号。以此类推,核1只能支持5号中断,核7只能支持11号中断。由此可知,常用的核0只能支持中断vector0、8、16和24,且这四个中断vector共享一个4号中断事件号。
图 1 PCIe中断事件
1.1 MSI中断初始化配置
具体配置过程如下:
(1)配置MSI_EN=1(寄存器MSI_CAP中bit16),使能MSI中断。
(2)配置MULT_MSG_EN=0x5(寄存器MSI_CAP[22:20],见图 2)。
图 2 MULT_MSG_EN的配置