Dear Sir/Madam,
I have a system with DSP and ARM. ARM and DSP exchange some data via two channels build by DSPLINK between them. When I want to configure EDMA on DSP side, EDMA3 driver creation by EDMA3_DRV_create function is halted and the execution does not exit. By the way, when I run the DSP code on Code Composer Studio without ARM involved all thing is OK and the EDMA is configured. The .tcf file is uploaded.
My memory configuration is as follows:
MEMORY CONFIGURATION
name origin length used unused attr fill
---------------------- -------- --------- -------- -------- ---- --------
IRAM 11808000 00030000 00000cf0 0002f310 RWIX
CACHE_L2 11838000 00008000 00000000 00008000 RWIX
CACHE_L1P 11e00000 00008000 00000000 00008000 RWIX
CACHE_L1D 11f00000 00008000 00000000 00008000 RWIX
L3_CBA_RAM 80000000 00020000 00020000 00000000 RWIX
SDRAM0 c2000000 01e00000 00e3395c 00fcc6a4 RWIX
RESET_VECTOR c3e00000 00000080 00000000 00000080 RWIX
SDRAM c3e00080 000fff80 000e9d8b 000161f5 RWIX
DSPLINKMEM c3f00000 00030000 00000000 00030000 RWIX
POOLMEM c3f30000 000d0000 00000000 000d0000 RWIX
My code to configure EDMA3 is as follows:
EDMA3_DRV_Result edma3Result = EDMA3_DRV_SOK;
;EDMA3_DRV_GblConfigParams *globalConfig = &sampleEdma3GblCfgParamsOMAPL137; //set global config to defaults in sample Params (located in bios_edma3_drv_sample_OMAPL137_cfg.c)
EDMA3_RM_MiscParam miscParam; // used in DRV_create() function to specify master/slave
EDMA3_DRV_InitConfig initCfg;
EDMA3_DRV_InstanceInitConfig *instanceConfig = &sampleInstInitConfigOMAPL137; // located in bios_edma3_drv_sample_OMAPL137_cfg.c
initCfg.isMaster = TRUE;
initCfg.regionId = (EDMA3_RM_RegionId)1u; // user must specify region (LLD/DRV does not support "global" region)
initCfg.drvSemHandle = &OsSem; // OsSem added statically in the .tcf file with an initial count of 1*/
initCfg.drvInstInitConfig = instanceConfig; // device-specific configuration - resources owned by region 1
initCfg.gblerrCb = NULL; // callback function to catch channel controller errors such as TCC error, queue threshold exceeded, etc.
initCfg.gblerrData = NULL; // any data required by the error callback function
miscParam.isSlave = FALSE; //ARM + DSP, specify who is the master, single-chip = use FALSE
edma3Result = EDMA3_DRV_create(edma3InstanceId, globalConfig, (void *)&miscParam); //the execution is stopped at this point
(Please visit the site to view this file)I would be very very thankful if somebody can help me.
Regards,
J.J.