请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320C6678 您好、专家、
这是一个来自 DEYI 支持论坛的问题。
客户正在编写 EDMA 代码。 EDMA 开始时、检查 EDMA 是否完成发送。 数据将显示在 目的地址中。
但是、当 EDMA 启动时、客户不会检查 EDMA 是否完成发送、经过长时间延迟后 、数据将不会显示在 目标地址中。
代码如下所示:
void my_EDMA_init (int CoreID) 是初始 μ。
my_EDMA_transfer_wait 设置 EDMA 参数,并启动 EDMA,、然后检查 EDMA 是否传输完成。
my_EDMA_transfer_no_wait 设置 EDMA 参数,并启动 EDMA,然后它不会检查 EDMA 是否已完成传输
#include "keyston_common.h"
#include "mycommon.h"
#include "myedma.h"
//#include "myedmatest.h"
#include "mydelay.h"
#include
int * paramRegAddr;
volatile UINT32 * TPCC_ESR;
volatile UINT32 * TPCC_IPR;
volatile UINT32 * TPCC_ICR;
CSL_TpccRegs* EMDCRegs;
int EDMA_instNum;
int EDMA_tcNum;
int EDMA_channelNum;int EDMA_channelNum;
int EDMA_paranum;
int EDMA_regionNum;
void my_EDMA_init (int CoreID)
{
switch (CoreID)
{
case 0:
EDMA_instNum=0;
EDMA_tcNum=0;
EDMA_paranum=0;
break;
case 1:
EDMA_instNum=0;
EDMA_tcNum=1;
EDMA_paranum=1;
break;
case 2:
EDMA_instNum=1;
EDMA_tcNum=0;
EDMA_paranum=2;
break;
case 3:
EDMA_instNum=1;
EDMA_tcNum=1;
EDMA_paranum=3;
break;
case 4:
EDMA_instNum=1;
EDMA_tcNum=2;
EDMA_paranum=4;
break;
案例5:
EDMA_instNum=1;
EDMA_tcNum=3;
EDMA_paranum=5;
中断;
案例6:
EDMA_instNum=2;
EDMA_tcNum=0;
EDMA_paranum=6;
break;
case 7:
EDMA_instNum=2;
EDMA_tcNum=1;
EDMA_paranum=7;
break;
默认值:
break;
}
EDMA_channelNum=(EDMA_paranum&0x000000ff);
EDMA_regionNum=EDMA_paranum;
EMDMACCRegs=gpEDMA_CC_regs[EDMA_instNum];//确定采用哪个通道控制器0 1 2
my_EDMA_init_reg_globle (
EDMA_instNum、//int instNum、//0 1 2 EDMA_Num
、//int tcNum、//int tcNum 0:0:0:1 inst1:1:1:
1:1:2);par2
:2:2;channelum/inuel3:1:2;paredma/inu3:1:1:2
void my_edma_init_reg_global(
int instC1,//0 1 2
int tcNum,//instNum 0:0 1 1 2 3 instNum 2:0 1 2:0 2 3
int paramelNum,//
int paramum/=core id 0-7
)
{*int
int int int
* uipPaRAM;/*pase0=pet_param+=param_param0_param_param_param_param/=nsigned pags+=param_param_param+*=param0_param_param_param+*/=param0_param_param_param_param_param_param_param_param_param=p0-7*/=en_param_param_param_param_param_param_param_param_param_param_param=p0-7*/=ning*=ined*/=ined*/=ined*/=en_param0*/=
i++)
*uipPaRAM++=0;
uipPaRAM =(unsigned int *)&(gpEDMA_CC2_regs->ParamSet[0]);
for (i=0;i<8*CSL_EDMA3_TPCC2_Num_PARAMSETS;i++)
*uPaMR=0*/ INTS_NUM_TSN
通道
将模块的channel与参数通道绑定
数/ INTS=TS_RMA_NUM0 > 3;
//计算要写入值的位位置。 */
lsb =(channelNum -(dmaRegIndex * 8))<< 2;
//写入事件队列*/
CSL_FINSR (gpEDMA_CC_regs[instNum]->TPCC_DMAQNUM[dmaRegIndex]、ltcdr + 2、lregNum、paramAdma&[instNum];
param_Params=[gparams]-[gedr]&[gparams]-[gparams]-[gedring]<gparam.[ds]-[gparam]-[
if (EDMA_channelNum<32)
{
TPCC_ESR=&EMDMACCRegs->TPCC_ESR;
TPCC_IPR=&EMACCRegs->TPCC_INIT;TIPR_ICR=
&EMDMACCRegs->TPCC_ICR;
}
函数名称 TPCC_ESR=&EDR_ECC_32;TIPRICR-2R = TIP_TRCM_TRICRICR-2R
函数作用 TCC_TRC;TIP_TRICRICRICRIC_TR_ECC_ECC_ECC_ECC_ECC_TRC
:TIP_TRICRICRICRH=&TRC 初始化edma使用的param空间的值 输入参数 TIP_ECC_ECC_ECC_TRC;TIP_TRICRICRICRICRICES= TIP_TR
输出参数:无
μ s 返回值 μ s 无
μ s 注意事项 μ s:没有初始化dst
μ s、dst用来触发qdma的传输 void my_edma_transfer_wait (
//unsigned int edma3cc_id、// 0 1 2
// unsigned int channel、// c0:0-15 CC1:0-63
unsigned CC2:0-63 /////unsigned int regparam_id、
unsigned reg0_opt_short、
unsigned ccst 1:0-63 unsigned int reg2、unsigned regint reg2、unsigned regunsigned reginct 2
unsigned int reg3_dstAddr、
unsigned short reg4_srcbidx、
unsigned short reg4_dstbidx、
unsigned short reg5_link、
unsigned short reg5_bcntrld、
unsigned short reg6_srccidx、
unsigned short reg6_dstcidx、
unsigned short reg7_ccnt
)
{
// int edma_instNum;
// int edma_tcNum;
// int edma_channelNum;
// int edma_paranum;
// int edma_tcNum;
EMCACCRegs->ParamSet[EDMA_paran].op=reg0_op;
EMDMACCRegs->ParamSet[EDMA_paran].SRC =reg1_srcAddr;
EMACCRegs->ParamSet[EDMA_Regum].A_regCNT =(EDM2_DRV-2_DRV-2_DRV-2|ENDRV3|ENDRV-2_DRVDD_DRV-2R
)<DMACK_1.DRVDD_ADDRV-2_ADDRV-2_ADDRV-2_ADDRV-2_DRV-2|_ADDRVEEDBCR10<DM_DRV=ENDRV-2_ADC16_DRV=ENDx
(EDM_ADDRVEE_ADDRVEEx)
EMDCRegs->ParamSet[EDMA_paran].link_BCNTRLD =(reg5_bcntrld<16)|(reg5_link&0xFFFF);
EMDCRegs->ParamSet[EDMA_paran].SRC_DST_regX =(reg6_dstcidx<DMACK_params-0xCC13V|
);CCRCCRCC13V<DMAC_TRX<DMACT_params-<CCTRUCCTRX<TRX<DMCCTRX<|_param.SRC_params]|_param.SRC_param<DMAC16_CCTRL<TRL<DMAC_param.SRC_param.ADCID<TRD =
paramdr[EDMA_param].op=reg0_opt;
EMDMACCRegs->ParamSet[EDMA_paramum].SRC =reg1_srcAddr;EMDMACCRegs->ParamSet[EDMA_Paramum].a_reg2_Bcnt<16|DMACK_params=0xDMACK_1.DMACK_params+DMAC4+DMACK_params=reg4&;ADDRV-2_DRV-2_DRV=DMAC_DRV-2_DRV-2_DRV+DMAC_DMACDx
(reg_ADDRV+DMAC_ADDRV-2_DMD)
EMDCRegs->ParamSet[EDMA_paran].link_BCNTRLD =(reg5_bcntrld<16)|(reg5_link&0xFFFF);
EMDCRegs->ParamSet[EDMA_paran].SRC_DST_regX =(reg6_dstcidx<DMACK_params-0xCC13V|
);CCRCCRCC13V<DMAC_TRX<DMACT_params-<CCTRUCCTRX<TRX<DMCCTRX<|_param.SRC_params]|_param.SRC_param<DMAC16_CCTRL<TRL<DMAC_param.SRC_param.ADCID<TRD =
tPCC_ESR;
tPCC_IPR=&EMDMACCRegs->TPCC_IPR;
tPCC_ICR=&EMDMACCRegs->TPCC_ICR;
}
否则
{TESR_ESR=
&EDMACCRegs->EPCC_ESR<*(*EDR_EDR)
;// tPCCC_EPCR=*EICR=</EPCR=</EPCR=*1</EPCR=*(*EPCR=*/EICR=}/EPC_EECR=</EICR=*(*EECT_END+/EPCR=*EICR=}/</EPC_EICR=</EPC_END+/EICR=*EECMR=*/</EPC_END+/TPC_R=*EECMR=</EICR=</EPC_END+/TPC_EPC_NOTED+/TPC_EICR=</EICR=*/</EPC_EPC_EPC_EPC_EPC_1</E
此致、
Wesley