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.

[参考译文] TMS320C6678:如果代码未#39;t 检查 EDMA 是否传输完成、则数据将不会移动到目标地址

Guru**** 2615125 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/659713/tms320c6678-if-the-code-don-t-check-if-edma-is-transmit-finish-or-not-the-data-will-not-be-move-to-destination-address

器件型号: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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我发现您是否检查 IPR 位与数据是否已到达之间没有关系。 您如何知道数据已到达? 由软件或 CCS/JTAG 提供? 这是在特定的 EDMA 通道、传输控制器上发生的吗?

    假设您设置了 EDMA、并使用 ESR 位触发传输、不要使用软件检查 IPR 位、只需查看 JTAG/CCS 中的 EDMA IPR 寄存器、您是否看到了 IPR 集? 如果是、您是否看到数据已到达? 此外、您可能还需要查看 EDMA 用户指南4.2.2错误寄存器、以查看是否记录了任何错误(如果数据确实没有传输)。

    此致、Eric