TI,您好!
目标功能:实现RC(LINUX)向EP(TMS320C6655)发送MSI中断。
现状:
1. RC发送0(4,8也试过,整个中断向量号怎么确定?)到EP端的PCIe应用寄存器MSI_IRQ(0X21800054),没有任何反应。
2. EP端在CCS上查看到的相关寄存器:
MSI_IRQ:0
EP_IRQ_SET:0
EP_IRQ_CLR:0
EP_IRQ_STATUS:0
MSI0_IRQ_STATUS_RAW:0x0000000E
MSI0_IRQ_STATUS:0
MSI0_IRQ_ENABLE_SET:0x00000001
MSI0_IRQ_ENABLE_CLR:0x00000001
MSI(1-7)_IRQ_STATUS_RAW:0x0000000F
MSI(1-7)_IRQ_STATUS:0
MSI(1-7)_IRQ_ENABLE_SET:0
MSI(1-7)_IRQ_ENABLE_CLR:0
MSI_CAP:0x00017005
请论坛里的高手帮忙指导一下,如何调试MSI中断?整个过程中这些寄存器哪些是EP要配置的,哪些会根据RC的情况自动变化?
能帮忙讲解下MSI从RC发到EP过程中,这些寄存器变化的过程更好,不胜感激。
/////////////////////////////////////////////////////////////////////////////////////
以下是MSI事件到硬件中断的映射
void PCIeIntRegister(void)
{
void PCIeIntRegister(void) { Hwi_Handle hwi0; Hwi_Params hwiParams; Hwi_Params_init(&hwiParams); hwiParams.enableInt =FALSE;// set the event id of the peripheral assigned to this interrupthwiParams.eventId = 17;//PCIExpress_MSI_INTn+0/2/4/6// don't allow this interrupt to nest itself// hwiParams.maskSetting = Hwi_MaskingOption_ALL ;hwiParams.priority = 4; hwi0=Hwi_create(5, PCIE_MSI_ISR, &hwiParams, NULL); if(hwi0 == NULL) { System_printf("hwi0 create fail !!! \n"); BIOS_exit(0); } Hwi_enableInterrupt(5); }
/////////////////////////////////////////////////以下是相关寄存器截图/////////////////////////////////////////////////////////////
谢谢
Thomas Yang1:
论坛置顶帖里有Keystone STK包,其中PCIE测试工程下有 PCIE STK userguide 对MSI interrupt的实现有详细描述,你可以结合代码阅读,有助于理解