小弟学习K1_STK(从官网下的最新的例程keystone软件开发包)里面的PCIE(例程),这个是例程里面RC端和EP端用的是MSI中断。PCIE_int_cfg.number_tx_MSI = PCIE_16_MSI;这个结构体里面配置了MSI16这个中断向量。然后工程跑的是loopback模式。调用了这个语句KeyStone_PCIE_RC_MSI_allocate((PCIE_MSI_Regs *)&gpPCIE_EP_regs->MSI_CAP,PCIE_RC_BAR0_ADDRESS+((Uint32)&gpPCIE_app_regs->MSI_IRQ)-(Uint32)gpPCIE_app_regs);,这个语句的大致意思就是MSI中断配置。那是不是我只要改之前的那个结构体赋值,比如说是PCIE_16_MSI,然后不用管调用的那个函数,就可以触发16号PCIE中断呢?
Shuxin Zhao:
回复 Brighton Feng:
谢谢您的回答,现在重新看了一下您写的例程,感觉和带BIOS的那个PDK的例程特别不一样。这里面的结构体定义挺多的挺复杂的。而且又要开cache,还有一个什么prefetchable存储区的配置。我现在就是想实现两片6678用PCIE进行通信,不用cache。然后数据量最大是256M。肯定是开辟32个8M的region。然后采用的是RC->EP->RC这样的测试方式。打算采用MSI中断。之前的那个PDK的例程是查询方式。您能给一下满足我这个需求的建议吗。我怕对您的程序改动太大实现不了功能。因为我是初学者,您这个程序我理解起来得一段时间。您可以简答告诉我重点要注意哪些函数的修改吗
Brighton Feng:
回复 Shuxin Zhao:
完整的PCIE协议可比我们这个示例代码复杂:) 我们的文档和代码都假设用户已经熟知PCIE协议哦
不过示例中的一些测试代码如果你不用的话可以不用管,如“PCIE_DSP_core_performance.c”和“PCIE_Edma_Performance.c”
重点把“KeyStone_PCIE_Init_drv.c”和“PCIE_Intc.c”搞清楚。
在你理解清楚我们的例程的基础上,你只需要裁剪一些代码和修改一些参数就应该可以实现你的要求。