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

DM3730 McBSP发送异常EDMA请求

没有使用TI封装的函数,自己编写驱动。

McBSP1配置为从模式,即clkx和fsx均由FPGA提供。目的是使用EDMA从一个buffer中搬移32bit数据到McBSP1的DXR,通过McBSP1接口发送给FPGA。

实际调试过程中先使用CCS(4.2.0.10018)运行DSP版本,后运行FPGA版本。发现DSP代码load下去刚一运行,McBSP1就给EDMA发送了搬移请求,并且EDMA也响应了该请求,查看内存发现搬移的数据也是正确的。

请问各位高手,如何才能阻止McBSP向EDMA发送这种异常的请求?多谢

Armstrong:

你好!

1.

没有使用TI封装函数,指的是 DMA驱动么?

2.

一般情况下,外部事件触发EDMA传输的话,需要绑定外部事件,从您的描述来看,

感觉好像绑定了不合适的事件,导致了意料之外的传输。具体查下看看。

Tinghao Zhang:

回复 Armstrong:

感谢您的回复

1、确实如您所说,我的EDMA寄存器都是自己手动配置的。

2、按照手册上的描述

McBSP的EDMA请求和EDMA通道的关系应该如上图所示。

我已经调试好了EDMA的接收,使用的是McBSP1和EDMA的通道1,使用的方法如下:

#define     PER_EDMA_TPCC0_BASEADDR                     (0x01C00000)

typedef struct T_PER_EDMAReg0_Tag{ volatile UINT32 TPCC_PID; volatile UINT32 TPCC_CCCFG;/* 0x01C00004 */ volatile UINT8  ucPadding1[248]; volatile UINT32 TPCC_DCHMAP[64];/* 0x01C00100 – 0x01C001FF */ volatile UINT32 TPCC_QCHMAP[8];/* 0x01C00200-0x01C00220 */ volatile UINT8  ucPadding2[32]; volatile UINT32 TPCC_DMAQNUM0;/* 0x01C00240 */ volatile UINT32 TPCC_DMAQNUM1; volatile UINT32 TPCC_DMAQNUM2; volatile UINT32 TPCC_DMAQNUM3; volatile UINT32 TPCC_DMAQNUM4; volatile UINT32 TPCC_DMAQNUM5; volatile UINT32 TPCC_DMAQNUM6; volatile UINT32 TPCC_DMAQNUM7; volatile UINT32 TPCC_QDMAQNUM;/* 0x01C00260 */    volatile UINT8  ucPadding3[28];    volatile UINT32 TPCC_QUETCMAP;/* 0x01C00280 */ volatile UINT32 TPCC_QUEPRI;/* 0x01C00284 */ volatile UINT8  ucPadding4[120]; volatile UINT32 TPCC_EMR;/* 0x01C00300 */ volatile UINT32 TPCC_EMRH; volatile UINT32 TPCC_EMCR; volatile UINT32 TPCC_EMCRH; volatile UINT32 TPCC_QEMR; volatile UINT32 TPCC_QEMCR; volatile UINT32 TPCC_CCERR; volatile UINT32 TPCC_CCERRCLR; volatile UINT32 TPCC_EEVAL;/* 0x01C00320 */ volatile UINT8  ucPadding5[28]; T_TPCC_DRAE atTpccDrae[8];/* 0x01C00340 – 0x01C0037F */ volatile UINT32 TPCC_QRAE[8]; volatile UINT8  ucPadding6[96]; volatile UINT32 TPCC_Q0E[16]; volatile UINT32 TPCC_Q1E[16];/* 0x01C00440-0x01C0047F */ volatile UINT8  ucPadding7[384]; volatile UINT32 TPCC_QSTAT[2];/* 0x01C00600 -0x01C00607 */ volatile UINT8  ucPadding8[24]; volatile UINT32 TPCC_QWMTHRA;/* 0x01C00620 */ volatile UINT32 TPCC_QWMTHRB;/* 0x01C00624 */ volatile UINT8  ucPadding9[24]; volatile UINT32 TPCC_CCSTAT;/* 0x01C00640 */ volatile UINT8  ucPadding10[444]; volatile UINT32 TPCC_MPFAR;/* 0x01C00800 */ volatile UINT32 TPCC_MPFSR; volatile UINT32 TPCC_MPFCR; volatile UINT32 TPCC_MPPAG; volatile UINT32 TPCC_MPPA[8];/* 0x01C00810 – 0x01C0082F */}T_PER_EDMAReg0; 

T_PER_EDMAReg0 *gptPEREDMAReg0 = (T_PER_EDMAReg0 *)PER_EDMA_TPCC0_BASEADDR;

根据手册中的描述,使用如下寄存器进行通道和触发时间的映射

使用代码如下:

 gptPEREDMAReg0 ->TPCC_DCHMAP[1] |= 0x00000020;//将EDMA通道1与MCBSP1_DMA_RX绑定

通过测试,上述代码是有效的;

于是仿照接收的方式,将EDMA通道0与MCBSP1_DMA_TX绑定,使用如下代码:

gptPEREDMAReg0 ->TPCC_DCHMAP[0] |= 0x00000000;

请问这样做有什么问题么?谢谢

 

赞(0)
未经允许不得转载:TI中文支持网 » DM3730 McBSP发送异常EDMA请求
分享到: 更多 (0)