Thread 中讨论的其他部件:AM2634、 SysConfig
您好!
我想激活 Sitara AM2634上 EDMA 的"传输完成中断"以触发 PRU-CPU、而不是任何 R5F CPU。
为此、我使用了 SDK "MCU-PLUS-SDK-AM263X"中提供的"EDMA (中间)中断传输"示例。 我已确定这些代码用于触发中断:
EDMA_ccPaRAMEntry_init(&edmaParam);
// code removed for clarity
edmaParam.opt |=
(EDMA_OPT_TCINTEN_MASK | EDMA_OPT_ITCINTEN_MASK |
((((uint32_t)tcc) << EDMA_OPT_TCC_SHIFT) & EDMA_OPT_TCC_MASK)); // enable interrupt in the PaRAM
/* Register interrupt */
intrObj.tccNum = tcc;
intrObj.cbFxn = &EDMA_regionIsrFxn;
intrObj.appData = (void *) &gEdmaTestDoneSem;
status = EDMA_registerIntr(gEdmaHandle[0], &intrObj);
DebugP_assert(status == SystemP_SUCCESS);
使用该代码、我能够以正确的 XBAR 配置触发 PRU 中断控制器中的事件32至48! 遗憾的是,每次触发中断时,函数 EDMA_regionIsrFxn()都会在运行示例的 R5F 处理器上执行。
因此,我尝试调查函数 EDMA_registerIntr()的作用,并避免在 R5F 中启用中断,我尝试了以下代码:
// get base objects of eDMA
baseAddr = EDMA_getBaseAddr(gEdmaHandle[0]);
regionId = EDMA_getRegionId(gEdmaHandle[0]);
tcc = EDMA_RESOURCE_ALLOC_ANY;
EDMA_ccPaRAMEntry_init(&edmaParam);
// code removed for clarity
edmaParam.opt |=
(EDMA_OPT_TCINTEN_MASK | EDMA_OPT_ITCINTEN_MASK |
((((uint32_t)tcc) << EDMA_OPT_TCC_SHIFT) & EDMA_OPT_TCC_MASK)); // enable interrupt in the PaRAM
/* enable interrupt */
EDMA_enableEvtIntrRegion(baseAddr, regionId, tcc);
遗憾的是、仅启用事件中断区域不会触发 SoC 级别的中断。 在不 在 R5F CPU 上执行 IRQ 例程的情况下、我是否错过了一些东西来激活"EDMA (中间)中断传输"?
感谢你的帮助。
BR、Nicolas