调试dsp与fpga的通信时,fpga的ram满512bits时fpga给dsp一个中断,通知dsp读取其数据,其中dsp是在中断函数中通过edma完成数据的读取的。问题是在调试的时候我在主函数的死循环中加了printf语句,这个个时候两者间的通信正常。但是当我去掉printf语句后,dsp只能响应一定次数的中断(即dsp只能读取fpga一定次数的数据),这个时候dsp的程序就跑飞了,停止运行,请问这是怎么回事?
本人刚开始学dsp,没找到原因,希望能得到帮助!谢谢
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
调试dsp与fpga的通信时,fpga的ram满512bits时fpga给dsp一个中断,通知dsp读取其数据,其中dsp是在中断函数中通过edma完成数据的读取的。问题是在调试的时候我在主函数的死循环中加了printf语句,这个个时候两者间的通信正常。但是当我去掉printf语句后,dsp只能响应一定次数的中断(即dsp只能读取fpga一定次数的数据),这个时候dsp的程序就跑飞了,停止运行,请问这是怎么回事?
本人刚开始学dsp,没找到原因,希望能得到帮助!谢谢
我把edma数据读取放在了DSP中断函数外,但是还是出现同样的结果。我没有对BIOS进行过设置。我把我的工程放在上面,如果你有时间可以帮我看一下吗?
另外我在运行的时候,问题最开始时是当中断响应一定次数后,错误先处在edma上:
status = CSL_edma3HwChannelControl(hChannel,CSL_EDMA3_CMD_CHANNEL_SET,NULL);
if (status != CSL_SOK) {
printf("Edma channel set command is failed\n");
return;
}
regionIntr.region = CSL_EDMA3_REGION_5;
regionIntr.intr = 0;
regionIntr.intrh = 0;
do {
/* Poll on interrupt bit 0 */
CSL_edma3GetHwStatus(hModule,CSL_EDMA3_QUERY_INTRPEND,®ionIntr);
} while (!(regionIntr.intr & 0x1));
先是停留在红色的地方,等待edma的中断响应位,等待一段时间后,程序指针就跳到这一段汇编中
B0000028 028C3626 LDB.D1T2 *A3++[1],B5
B000002C 7877 SUB.D2 B0,1,B0
B000002E 012B [ B0] BNOP.S2 0xB0000028 (PC+8 = 0xb0000028),0
B0000030 1EBB [!B0] BNOP.S2 0xB0000014 (PC-12 = 0xb0000014),0
B0000032 04A6 MVK.L1 0,A1
B0000034 308C69F0 [!B0] AND.D1 3,A3,A1
B0000038 02903636 STB.D1T2 B5,*A4++[1]
B000003C E3208000 .fphead n, l, W, BU, br, nosat, 0011001
B0000040 328F89F0 [!B0] AND.D1 -4,A3,A5
现在不知道该怎样解决,希望你能帮帮我,非常感谢!
IPR没能置位, EDMA transfer completion一直完成不了 , 像是EMIF口down掉了, 导致EDMA数据传输不能完成, 因为你能收到一定次数的中断响应, 所以感觉像是FPGA RAM不稳.
为了排除是不是FPGA造成的, 可以先试试DSP内部循环搬移数据块是否也会搬几次后有问题?