创龙科技
直播中

池冰龄

7年用户 200经验值
私信 关注

SYSBIOS的EDMA3传输问题

[tr]     TMS320C6748光盘目录demoSYSBIOSApplicationEDMA3这个工程中,调试出现问题。
1,原例程调试正常,改成MAX_ACOUNT=100,MAX_BCOUNT=100也正常。
把MAX_ACOUNT改成32,MAX_BCOUNT改成512,函数EDMA3Test()运行完之后,查看数组_dstBuff发现有连续几十个元素值是0

// 最大 ACOUNT
#define MAX_ACOUNT        (10u)
// 最大 BCOUNT
#define MAX_BCOUNT        (10u)
// 最大 CCOUNT
#define MAX_CCOUNT        (1u)


2, 原例程调试正常,改成MAX_ACOUNT=100,MAX_BCOUNT=100也正常。它的传输次数umenabled = bcnt * ccnt=100;
原例程的
unsigned int syncType   = EDMA3_SYNC_A;
改成:unsigned int syncType   = EDMA3_SYNC_AB; //希望它只传输一次。
运行之后,程序死在函数EDMA3Test()里:
        // 等待中断服务函数执行完成
        while(irqRaised == 0u){}
然后在中断服务函数Void EDMA3CCComplIsr(UArg arg)里插入断点,发现程序不进入这个中断。

3, 原例程调试正常,改成MAX_ACOUNT=100,MAX_BCOUNT=100也正常。它的传输次数umenabled = bcnt * ccnt=100;
原例程的

        // 使能 Intermediate & Final 传输完成中断
        paramSet.opt |= (1 << EDMA3CC_OPT_ITCINTEN_SHIFT);
        paramSet.opt |= (1 << EDMA3CC_OPT_TCINTEN_SHIFT);

改成:
     paramSet.opt &= ~(1 << EDMA3CC_OPT_ITCINTEN_SHIFT);  //希望全部传输完成后只中断一次
        paramSet.opt |= (1 << EDMA3CC_OPT_TCINTEN_SHIFT);

运行之后,程序死在函数EDMA3Test()里:
        // 等待中断服务函数执行完成
        while(irqRaised == 0u){}
然后在中断服务函数Void EDMA3CCComplIsr(UArg arg)里插入断点,发现程序不进入这个中断。




请试一下,我的这三种情况。看看是怎么回事


[/tr]

回帖(3)

张舒婷

2020-3-30 12:58:39
1. 没发现存在这个问题
2. 没发现存在这个问题
3. A类传输,必须使能BCOUNT次
举报

石飞鹏

2020-3-30 13:05:16


第一个问题,我把L2改成 L2 is all sram后,正常了。这是什么原因?
举报

赵军

2020-3-30 13:23:02



1,2两个情况,确定是按我说的试过了?
3.A类传输,必须使能BCOUNT次,没有疑问,我也理解。不是传输总次数问题,是想只在全部传输完后一次中断
发生多少次同步事件,与发生多少中断是能配置的。请看一下这个改法的意义。EDMA3视频教程里讲了。
最好是能在开发板上试一下。

     // 使能 Intermediate & Final 传输完成中断
        paramSet.opt |= (1 << EDMA3CC_OPT_ITCINTEN_SHIFT);
        paramSet.opt |= (1 << EDMA3CC_OPT_TCINTEN_SHIFT);

改成:
     paramSet.opt &= ~(1 << EDMA3CC_OPT_ITCINTEN_SHIFT);  //希望全部传输完成后只中断一次
        paramSet.opt |= (1 << EDMA3CC_OPT_TCINTEN_SHIFT);




举报

更多回帖

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