我们修改了 AM64x MCU+ SDK 08.06.00.43的 R5裸机 MSI IRQ 端点示例、以与主板配合使用
嵌入式 Linux 平台的固件和硬件文件。
我们可以成功地检测出 TI 板作为 PCI 器件、请求一个 MSI 中断并注册 IRQ 处理程序。
我们已成功地将出站地址转换单元(ATU)重新配置为指定的 MSI 地址
根复合体。 因此、EP 看到 RC 已启用 MSI 中断、并将一个 MSI 发送到我们的 Linux RC。
我们遇到的问题是我们的 Linux 没有收到中断。 通过 TI PCIe 进行调试
API,我们发现随 MSI 消息发送的 MSI 数据正在被修改(请参阅函数 int32_t
PCIe_epSendMsiIrq ()(位于 PCIe_soc.c:962)。 我们怀疑这是导致我们的 Linux 无法接收 IRQ 的问题。
为了测试这种怀疑,我们使用
在单步执行 API 时调用 PMBus 调试器。 如果我们这样做、Linux 确实会接收并处理 IRQ、但
同时接收到其他意外中断。
我们的问题是:
1.-为什么 API 修改根复合体分配的"MSI 数据"值?
2.-当我们更改"MSI 数据"以便被 RC 接收时、我们的 TI EP 是否会生成多个 MSI 中断、
由于与 PCIe 硬件存在一些我们不知道的交互、会发生什么情况?
感谢您的关注。