TI论坛
直播中

吴樵

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

请教关于6748的音频数据流传输时的cache使用问题

     我这里使用c6748做了一个音频降噪和音质增强的算法。现在出现了这样的问题,因为要跑算法所以使能了cache。但是使能之后喇叭的声音就断了。
     我的音频传输流是这样的。通过mcasp总线从aic3106采集音频数据,然后经过dsp算法处理后再经过mcasp总线把数据传输出去。没有加算法之前是透传,没有使能cache,我把pc端放的音乐直接从喇叭端发出来没有问题。我的代码和数据段在ddr2上,跑算法会有些迟缓,就把cache打开了。于是出现了上面的问题。
     
CacheEnableMAR((unsigned int)0xC0001000, (unsigned int)0x08000000);
CacheEnable(L1DCFG_L1DMODE_32K|L1PCFG_L1PMODE_32K|L2CFG_L2MODE_128K);
     我在接收和发送中断的时候都CacheWBInvAll();
     请问一下ti的工程师,我这里有哪些地方思路有问题。
     我的工程代码和数据段都放在ddr里面。
.text:_c_int00 > EntryPoint /* 可执行代码 C 程序入口点*/
.text > DDR2 /* 可执行代码 */
.stack > DDR2 /* 软件系统栈 */
.cio > DDR2 /* C 输入输出缓存 */
".vectors" > Vector /* 中断向量表 */
.const > DDR2 /* 常量 */
.data > DDR2 /* 已初始化全局及静态变量 */
.switch > DDR2 /* 跳转表 */
.sysmem > DDR2 /* 动态内存分配区域 */
.far > DDR2 /* 远程全局及静态变量 */
.args > DDR2
.ppinfo > DDR2
.ppdata > DDR2

回帖(11)

余少虹

2018-8-1 07:03:38
请问是用EDMA传数据的吗?如果跑算法只是有些迟缓功能正常,但cache打开后出现声音断的话,一般是cache一致性的问题。
举报

吴樵

2018-8-1 07:17:16
引用: vuywsdfwf 发表于 2018-8-1 07:03
请问是用EDMA传数据的吗?如果跑算法只是有些迟缓功能正常,但cache打开后出现声音断的话,一般是cache一致性的问题。

肯定是一致性的问题,关掉就正常了。但是不开的话,算法跑不起来。现在不清楚是需要怎么设置回写和无效cache。
举报

余少虹

2018-8-1 07:23:06
引用: wo97306730 发表于 2018-8-1 07:17
肯定是一致性的问题,关掉就正常了。但是不开的话,算法跑不起来。现在不清楚是需要怎么设置回写和无效cache。

你应该用了EDMA吧?
你看一下回写和无效cache放的位置对不对?在CPU读数据前做cache invalid,在CPU写之后做cache writeback。
举报

吴樵

2018-8-1 07:40:11
引用: vuywsdfwf 发表于 2018-8-1 07:23
你应该用了EDMA吧?
你看一下回写和无效cache放的位置对不对?在CPU读数据前做cache invalid,在CPU写之后做cache writeback。

我无效和写回都做了分别是在两个中断里面

接收中断做了无效
/****************************************************************************/
/* */
/* 此函数会在接收完成中断里调用 */
/* */
/****************************************************************************/
static void McASPRxDMAComplHandler(void)
[
FrameCnt1++;
unsigned short nxtParToUpdate;
// 更新 lastFullRxBuf 标志一个新的接收 buffer 接收完成
lastFullRxBuf = (lastFullRxBuf + 1) % NUM_BUF;
nxtParToUpdate = PAR_RX_START + parOffRcvd;
parOffRcvd = (parOffRcvd + 1) % NUM_PAR;

CacheInv((unsigned int)&rxBufPtr[lastFullRxBuf], sizeof(rxBuf0));
........
发送中断做了写回

/****************************************************************************/
/* */
/* 此函数会在发送完成中断里调用 */
/* */
/****************************************************************************/
static void McASPTxDMAComplHandler(void)
[
FrameCnt2++;
CacheWB((unsigned int)&txBufPtr[lastSentTxBuf], sizeof(txBuf0));
......
举报

更多回帖

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