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.

8148 dvr_rdk dsp EDMA L2 ram操作不正常



在dvr_rdk中配置了MARn相应的寄存器,使能了L2 Cache,使用的大小为128K,另外128K当做RAM。目前在dsp上加了一些算法,看了一下dsp的效率不高,不能实时处理,所有打算用EDMA把数据一块一块的从DDR buf搬运到128K L2 ram 上做运算,运算完成后再用EDMA搬运回ddr buf,应该会快一些。 于是我就实验了一下,申请了两个L2 ram上的内存做实验,先从ddr中拷贝了8K的Y数据到s0Buf上,写了一个简单的二值化的函数,把s0Buf、s1Buf传入二值化函数,s1返回二值化的结果,再通过EDMA拷贝回原来的DDR buf内存。看显示的图像不对,处理的图像全变成黑的了。然后我把#pragma DATA_SECTION声明删掉,数据就正常了,希望前辈能够指点一下。

看了dsp生成的map文件里面内存使用了多少就减少多少,没有问题。然后查了几天资料说可能是cache一致性问题,但是加了一些cache操作的函数但是没有作用。希望大家能给指点一下谢谢了!!

#pragma DATA_SECTION(s0Buf, "DSP_L2_RAM")
static unsigned char s0Buf[8000];

#pragma DATA_SECTION(s1Buf, "DSP_L2_RAM")
static unsigned char s1Buf[8000];

pIn是ddr中实时的图像Y的首地址

for(i=0; i<240; i+=10){
    Dat_copy(pIn+704*i, s0Buf, 704, 10);

    IMG_thr_le2min_8_cn(s0Buf, s1Buf, 704, 10, 100);
    Dat_copy(s1Buf, pIn+704*i, 704, 10);

    Cache_wbInvAll();
    Cache_wbInv(pIn+704*i, 7040, Cache_Type_ALL, TRUE);
}

非常谢谢给提示的前辈了!!!