我有几个问题,附件是一个非常简化的DMA例子,可以实现一个核内数据的搬移,但是只有Core0可以用,其他Core都一直在等待interrupt,一直在while中出不来。。
while (irqRaised1 == 0u)
{
printf ("waiting for interrupt…\n");
}
也就是只有core0在transfer complete之后触发了完成中断,修改了irqRaised1。
其他核并不能产生中断。
我理解的是,根据手册:完成中断有两种类型,一种是Global Transfer Completion Interrupt,一种是Transfer Completion Interrupt Shadow Region x。
为了使每个核都可以搬移数据,是不是需要采用第二种方式?这是由哪里配置的?
unsigned int gblCfgReqdArray [NUM_DSPS] = {
0, /* DSP#0 is Master, will do the global init */
1, /* DSP#1 is Slave, will not do the global init */
1, /* DSP#2 is Slave, will not do the global init */
1, /* DSP#3 is Slave, will not do the global init */
};
Andy Yin1:
EDMA中断是到CIC上,每个core的CIC输入事件是不一样的,所以需要确认一下现在的CIC配置映射关系输出的CIC是否会输入到其他core,否则得重新选择CIC输出映射,具体参阅数据手册中断章节。
na zhang1:
回复 Andy Yin1:
不好意思我还是没有看懂,CIC具体指什么?
您说的映射在给出的多核edma的例子中对应的是哪一步分代码,能麻烦您继续说明一下么?
非常感谢!
na zhang1:
回复 Andy Yin1:
能麻烦您给我一份多核edma 的例子么?
非常感谢!
na zhang1:
回复 Andy Yin1:
我的工程是不管从 哪个核开始单核跑,只有core0可以顺利的搬移完进入到中断,别的核都一直在等待中断