i use ipnc rdk3.5.0, 8147
my question:
i use edma3
EDMA3_DRV_create ok.
EDMA3_DRV_open ok.
EDMA3_DRV_requestChannel crashed!!!!!!!
mycode :
g_hEdma = NULL;
MiscParam.isSlave = 0;
//Result = EDMA3_DRV_create(0, &gdmaGblCfgParams, &MiscParam);
Result = EDMA3_DRV_create(1, &gUtils_dmaGblCfgParams, &MiscParam);
if(Result != EDMA3_DRV_SOK)
{
Vps_printf("DMA: EDMA3_DRV_create failed\n");
return -1;
}
memset(&g_initCfg, 0, sizeof(EDMA3_DRV_InitConfig));
Semaphore_Params_init(&semParams);
g_initCfg.drvSemHandle = (EDMA3_OS_Sem_Handle)Semaphore_create(1, &semParams, NULL);
g_initCfg.isMaster = TRUE;
/* Choose shadow region according to the DSP# */
g_initCfg.regionId = 0;//(EDMA3_RM_RegionId)gUtils_dmaObj.region_id;
/* Driver instance specific config NULL */
//g_initCfg.drvInstInitConfig = (EDMA3_DRV_InstanceInitConfig*)&gdmaInstInitConfig;//&gUtils_dmaInstInitConfig;
g_initCfg.drvInstInitConfig = (EDMA3_DRV_InstanceInitConfig*)&gUtils_dmaInstInitConfig;
g_initCfg.gblerrCb = NULL;
g_initCfg.gblerrData = NULL;
Result=1;
g_hEdma = EDMA3_DRV_open(1, (void *)&g_initCfg, &Result);
if(Result != EDMA3_DRV_SOK)
{
Vps_printf("DMA: EDMA3_DRV_open failed\n");
EDMA3_DRV_delete ( 0, NULL );
return -1;
}
Vps_printf("------------DMA: EDMA3_DRV_open ok\n");
memset(g_stparam_arr, 0, sizeof(dam_mem_param)*(MAX_DMA_NUM+2));
iTcc = EDMA3_DRV_TCC_ANY;
iChannel =EDMA3_DRV_DMA_CHANNEL_ANY; // 48+i
Vps_printf( " ----begin 111:%08x, ichannel:%d, tcc:%d", (unsigned int)g_hEdma, iChannel, iTcc );
Result = EDMA3_DRV_requestChannel( g_hEdma, &iChannel, &iTcc, 0, NULL, NULL );
if ( Result != EDMA3_DRV_SOK )
{
return -1;
}
the code is work well on 8127.
but i don't know why it not work on 8148.
It crashed at "Result = EDMA3_DRV_requestChannel( g_hEdma, &iChannel, &iTcc, 0, NULL, NULL );"
Look forward your reply. Thanks