TI论坛
直播中

韦明

7年用户 284经验值
私信 关注
[问答]

关于c6455的edma数据传输问题

调试dsp与FPGA通信时,fpga的ram满512bits时fpga给dsp一个中断,通知dsp读取其数据,其中dsp是在中断函数中通过edma完成数据的读取的。问题是在调试的时候我在主函数的死循环中加了printf语句,这个个时候两者间的通信正常。但是当我去掉printf语句后,dsp只能响应一定次数的中断(即dsp只能读取fpga一定次数的数据),这个时候dsp的程序就跑飞了,停止运行,请问这是怎么回事?
本人刚开始学dsp,没找到原因,希望能得到帮助!谢谢

回帖(8)

余少虹

2018-8-2 08:46:27
这个感觉跟printf函数关系不大, 一般倒是加了printf函数会出错的多.  
试试把EDMA数据读取放在DSP中断函数之外, 这样可以加速DSP对下次FPGA中断的响应.
另外, 你用BIOS了么?
举报

韦明

2018-8-2 08:54:43
引用: vuywsdfwf 发表于 2018-8-2 08:46
这个感觉跟printf函数关系不大, 一般倒是加了printf函数会出错的多.  
试试把EDMA数据读取放在DSP中断函数之外, 这样可以加速DSP对下次FPGA中断的响应.
另外, 你用BIOS了么?

我把edma数据读取放在了DSP中断函数外,但是还是出现同样的结果。我没有对BIOS进行过设置。我把我的工程放在上面,如果你有时间可以帮我看一下吗?
另外我在运行的时候,问题最开始时是当中断响应一定次数后,错误先处在edma上:
    status = CSL_edma3HwChannelControl(hChannel,CSL_EDMA3_CMD_CHANNEL_SET,NULL);
    if (status != CSL_SOK) [
        printf("Edma channel set command is failedn");
        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
现在不知道该怎样解决,希望你能帮帮我,非常感谢!
举报

余少虹

2018-8-2 09:12:12
引用: ljmlvmd 发表于 2018-8-2 08:54
我把edma数据读取放在了DSP中断函数外,但是还是出现同样的结果。我没有对BIOS进行过设置。我把我的工程放在上面,如果你有时间可以帮我看一下吗?
另外我在运行的时候,问题最开始时是当中断响应一定次数后,错误先处在edma上:
    status = CSL_edma3HwChannelControl(hChannel,CSL_EDMA3_CMD_CHANNEL_SET,NULL);

IPR没能置位, EDMA transfer completion一直完成不了 , 像是EMIF口down掉了, 导致EDMA数据传输不能完成, 因为你能收到一定次数的中断响应, 所以感觉像是FPGA RAM不稳.

为了排除是不是FPGA造成的, 可以先试试DSP内部循环搬移数据块是否也会搬几次后有问题?
举报

韦明

2018-8-2 09:26:38
引用: vuywsdfwf 发表于 2018-8-2 09:12
IPR没能置位, EDMA transfer completion一直完成不了 , 像是EMIF口down掉了, 导致EDMA数据传输不能完成, 因为你能收到一定次数的中断响应, 所以感觉像是FPGA RAM不稳.

为了排除是不是FPGA造成的, 可以先试试DSP内部循环搬移数据块是否也会搬几次后有问题? ...

你好,现在我调试发现当没有printf语句时,函数每调用一次,我的堆栈一直向上累加,一直到堆栈溢出。当加上printf()语句时,函数每运行一次堆栈不会向上累加,堆栈就不会溢出,程序能正常运行。我不知道这是怎么回事?该怎么处理?c语言怎么进行出栈操作呢?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分