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

求高手帮忙解决一个DM3730的EDMA问题

问题概述:使用McBsp从FPGA接收数据,然后用EDMA将数据从DRR寄存器搬移到一个buffer中(IQBuff),调试发现EDMA只能搬移一次数据,之后就不再搬移了,请问各位高手怎么样才能让EDMA将DRR寄存器中的数据发乎搬移到IQBuff中,并且每次搬移都从同一个起始地址开始存储数据。

我的配置如下(程序中的LINK可能不需要):

 

#define ONE_FRAME_SYM_NUM  (UINT32)1250 

#define     PER_EDMA_PARAM_CHANNEL1_BASEADDR            (0x01C04020)
#define     PER_EDMA_PARAM_CHANNEL1_LINK_BASEADDR       (0x01C04000+(0x20*73))

typedef struct T_PER_EDMAReg2_Tag
{
 volatile unsigned int TPCC_OPT;
 volatile unsigned int TPCC_SRC;
 volatile unsigned int TPCC_ABCNT;
 volatile unsigned int TPCC_DST;
 volatile unsigned int TPCC_BIDX;
 volatile unsigned int TPCC_LNK;
 volatile unsigned int TPCC_CIDX;
 volatile unsigned int TPCC_CCNT;
}T_PER_EDMAReg2;

T_PER_EDMAReg2 *gptPEREDMAReg2CH1 = (T_PER_EDMAReg2 *)PER_EDMA_PARAM_CHANNEL1_BASEADDR;
T_PER_EDMAReg2 *gptEDMALinkToCH1 = (T_PER_EDMAReg2 *)PER_EDMA_PARAM_CHANNEL1_LINK_BASEADDR;

    gptPEREDMAReg2CH1 ->TPCC_OPT = 0x00001200;
    gptPEREDMAReg2CH1 ->TPCC_SRC = (UINT32)MCBSP_DRR_ADDR(1);//DRR address of McBSP1
    gptPEREDMAReg2CH1 ->TPCC_ABCNT = (UINT32)(0x00000004 | (UINT32)(ONE_FRAME_SYM_NUM <<16));
    gptPEREDMAReg2CH1 ->TPCC_DST = (UINT32)&IQBuff[0];//a buffer,the address is 0x800C1DD0
    gptPEREDMAReg2CH1 ->TPCC_BIDX = 0x00040000;
    gptPEREDMAReg2CH1 ->TPCC_LNK = ((UINT32)(ONE_FRAME_SYM_NUM <<16) | 0x4E40);
    gptPEREDMAReg2CH1 ->TPCC_CIDX = 0x0;
    gptPEREDMAReg2CH1 ->TPCC_CCNT = 0x1;

    gptEDMALinkToCH1 ->TPCC_OPT = 0x00201200;
    gptEDMALinkToCH1 ->TPCC_SRC = (UINT32)MCBSP_DRR_ADDR(1);
    gptEDMALinkToCH1 ->TPCC_ABCNT = (UINT32)(0x00000004 | (UINT32)(ONE_FRAME_SYM_NUM <<16));
    gptEDMALinkToCH1 ->TPCC_DST = (UINT32)&IQBuff[0];
    gptEDMALinkToCH1 ->TPCC_BIDX = 0x00040000;
    gptEDMALinkToCH1 ->TPCC_LNK = ((UINT32)(ONE_FRAME_SYM_NUM << 16) | 0x4E40);
    gptEDMALinkToCH1 ->TPCC_CIDX = 0x0;
    gptEDMALinkToCH1 ->TPCC_CCNT = 0x1;

Tinghao Zhang:

补充一下,查看了相关寄存器

TPCC_EMR   0x00000002 表示DMA Missed events

TPTC_ERRSTAT 0x00000005,其中TRERR置位,表示TR检测到违反FIFO Mode transfer(SAM或DAM为1)对齐规则或者ACNT或者BCNT为0;BUSERR置位,表示TC检测到在写响应总线或者读响应总线上的错误码

检查TPCC_ERRDET 0x00001A01,表示TCC为011010,STAT置位为0x1,表示读地址错误

赞(0)
未经允许不得转载:TI中文支持网 » 求高手帮忙解决一个DM3730的EDMA问题
分享到: 更多 (0)