TI中文支持网
TI专业的中文技术问题搜集分享网站

TDA4VM: c71 udma

Part Number:TDA4VM

我使用如下代码,希望通过udma通道进行数据搬移,发现在c71平台上无法实现从DDR搬移至L2,而C66 core无此问题。而当我将通道号设定为8,即设置为dru通道时,数据可从DDR搬移至L2内存。测试代码如下:

void test_udma()
{
    uint8_t data_check = 0;
    uint8_t *src_buf1 = NULL;
    uint32_t data_len = 1024 * 8;
    volatile uint8_t *p_wr = (volatile uint8_t *)(appMemAlloc(APP_MEM_HEAP_DDR, data_len, APP_UDMA_CACHELINE_ALIGNMENT));//(uint8_t *)(0x70020000);//
    volatile uint8_t *p_rd = (volatile uint8_t *)(appMemAlloc(APP_MEM_HEAP_L2, data_len, APP_UDMA_CACHELINE_ALIGNMENT));//(uint8_t *)(0x70022000);//
    unsigned int i = 0;
    int ret_val = 0;
    app_udma_ch_handle_t    udmaChIn;
    app_udma_copy_nd_prms_t prms_nd_in;
    memset(p_rd, 0x0, data_len);
    appLogPrintf("UDMA: p_rd addr is %p\r\n", p_rd);
    for(i = 0; i < data_len; i++)
    {
        p_wr[i] = i % 256;
    }
    appMemCacheWb((void *)p_wr, data_len);
    udmaChIn = appUdmaCopyNDGetHandle(8);
    // src_buf1 = (uint8_t *)(appMemAlloc(APP_UDMA_HEAP_ID, data_len, APP_UDMA_CACHELINE_ALIGNMENT));
    // if(src_buf1 == NULL)
    // {
    //     Platform_Printf("%s, %d\r\n" , __FUNCTION__, __LINE__);
    //     return -1;
    // }
    prms_nd_in.copy_mode    = 2;
    prms_nd_in.src_addr     = appMemGetVirt2PhyBufPtr((uint64_t) (p_wr), APP_UDMA_HEAP_ID);
    prms_nd_in.dest_addr    = appMemGetVirt2PhyBufPtr((uint64_t) (p_rd), APP_MEM_HEAP_L2);
    prms_nd_in.icnt0        = data_len;
    prms_nd_in.icnt1        = 1;
    prms_nd_in.icnt2        = 1;
    prms_nd_in.icnt3        = 1;
    prms_nd_in.dim1         = data_len;
    prms_nd_in.dim2         = 0;
    prms_nd_in.dim3         = 0;

    prms_nd_in.dicnt0       = prms_nd_in.icnt0;
    prms_nd_in.dicnt1       = prms_nd_in.icnt1;
    prms_nd_in.dicnt2       = 1; /* Ping-pong */
    prms_nd_in.dicnt3       = 1;
    prms_nd_in.ddim1        = data_len;
    prms_nd_in.ddim2        = 0;
    prms_nd_in.ddim3        = 0;

   

    // appUdmaCopyNDPrmsPrint(&prms_nd_in, "IN");
    // appUdmaCopyNDPrmsPrint(&prms_nd_out, "OUT");

    udmaChIn = appUdmaCopyNDGetHandle(0);
    ret_val = appUdmaCopyNDInit(udmaChIn, &prms_nd_in);
    if(ret_val != 0){
        appLogPrintf("UDMA: ERROR: appUdmaCopyNDInit %d!!\n", udmaChIn);
        return 7;
    }
    appLogPrintf("UDMA: SUCCESS: appUdmaCopyNDInit %d!!\n", udmaChIn);
    ret_val = appUdmaCopyNDTrigger(udmaChIn);
    if(ret_val != 0){
        appLogPrintf("UDMA: ERROR: appUdmaCopyNDTrigger %d!!\n", ret_val);
    }
    appLogPrintf("UDMA: SUCCESS: appUdmaCopyNDTrigger %d!!\n", ret_val);
    ret_val = appUdmaCopyNDWait(udmaChIn);
    if(ret_val != 0){
        appLogPrintf("UDMA: ERROR: appUdmaCopyNDWait %d!!\n", ret_val);
    }
    appLogPrintf("UDMA: SUCCESS: appUdmaCopyNDWait %d!!\n", ret_val);
    appUdmaCopyNDDeinit(udmaChIn);
    //appMemCacheInv((void *)src_buf1, data_len);
    for(i = 0; i < data_len; i++)
    {
        data_check =  p_rd[i];
        if(data_check != (i % 256))
        {
            appLogPrintf("%s().data is %d error, i is %d\r\n" , __FUNCTION__, data_check, i);
        }
    }  

}
    当udmaChIn = appUdmaCopyNDGetHandle(8);即设置为DRU通道传输时,可完成数据搬移,请问Ti工程师如何使用udma通道从DDR搬移至L2内存
yu duan:

开出L2内存的地址为0x64800000

,

Cherry Zhou:

您好,我们把您的问题升级到英文论坛给美国工程师看下,链接如下,有答复会尽快给到您:

e2e.ti.com/…/tda4vm-c71-udma

,

Cherry Zhou:

您好,

使用DRU channel8的时候有没有问题?如果用UDMA channel,会有什么问题出现?

赞(0)
未经允许不得转载:TI中文支持网 » TDA4VM: c71 udma
分享到: 更多 (0)