嵌入式开发者社区
标题:
SYSBIOS下EDMA3传输问题
[打印本页]
作者:
bjx1234
时间:
2016-12-20 11:16
标题:
SYSBIOS下EDMA3传输问题
TMS320C6748光盘目录demo\SYSBIOS\Application\EDMA3这个工程中,调试出现问题。
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)里插入断点,发现程序不进入这个中断。
请试一下,我的这三种情况。看看是怎么回事
作者:
Lewis
时间:
2016-12-21 08:25
1. 没发现存在这个问题
2. 没发现存在这个问题
3. A类传输,必须使能BCOUNT次
作者:
bjx1234
时间:
2016-12-21 09:22
本帖最后由 bjx1234 于 2016-12-21 09:24 编辑
第一个问题,我把L2改成 L2 is all sram后,正常了。这是什么原因?
作者:
bjx1234
时间:
2016-12-21 09:26
本帖最后由 bjx1234 于 2016-12-21 09:32 编辑
Lewis 发表于 2016-12-21 08:25
1. 没发现存在这个问题
2. 没发现存在这个问题
3. A类传输,必须使能BCOUNT次 ...
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);
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4