没有使用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;
请问这样做有什么问题么?谢谢
TI中文支持网


