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.
TI专家、各位朋友:
最近在使用OMAPL138,ARM端OS是Linux,DSP端OS是DSP/BIOS 5.41,ARM端和DSP端通过DSPLINK进行通信。DSPLINK的开发环境的是在Linux环境下搭建的。工程中,MCASP接口上挂了两片CODEC(AIC 3104),我想先在DSP端拿到音频数据,然后通过DSPLINK传输到ARM端录音。但目前在DSP端出了一个问题,我想把音频数据传输到ARM端之前先做一个验证,于是我就让这两片CODEC分别直通。我使用EDMA来搬运数据,采用PINGPONG传输,PINGPONG传输的BUFFER都映射到DDR2上,在EDMA传输完成进入中断后,将PING(或者PONG)接收BUFFER中的数据拷贝到PING(或者PONG)的发送BUFFER中,PINGPONG交替进行,来实现直通。通过连接仿真器,打出的LOG,我发现EDMA的收发中断很正常,但通过耳机听声音,发现都是噪音。我猜测在EDMA中断我做了收发BUFFER直通的拷贝,这个是需要CPU来参与,既然CPU来做,那么数据从DDR2---->L2 Cache----->L1D Cache的过程中是否破坏了Cache数据一致性了呢?由于Cache的不一致导致了我拷贝的是错误的数据,导致我耳机听到的都是噪音?
对于此问题的一些其他的说明:
#1:在DSPLINK的开发环境中,配置了MARn相应的寄存器,使能了L2 Cache,使用的大小为128K,另外128K当做RAM
#2:DDR2的分配,DDR2大小为64M,前32M通过U-boot参数配置分配给了ARM端,后32M通过修改DSPLINK开发环境的配置文件分配给了DSP端(对于DSP端分配的DDR2空间可能比较大,其实用的很小,只是用来暂时调试),并把DSP端的32M DDR2 使能了缓存。
#3:不使用DSPLINK,不用ARM,只使用DSP,单独写个工程来做CODEC直通,我发现这个是好的,可以通过耳机听到正常的声音。在这个工程中data和code都是映射到L2 RAM的,而上述工程是映射到DDR2的,这两个工程在内存映射上存在区别。
#4:在dsplink通信工程中,在DSP端我自己通过配置寄存器来使用的EDMA,Cache搬运代码段和数据段是不是也要使用EDMA,我不确保我配置的EDMA对系统本身要使用的EDMA没有冲突。
最后:出现上述问题,我只是怀疑是Cache 一致性的问题,导致我耳机听到的都是噪音,因为我实在想不出还有什么其他的原因还能导致这个问题。对于DDR2到L2 的Cache是否需要软件去维护一致性?