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.
没有使用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发送这种异常的请求?多谢
感谢您的回复
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;
请问这样做有什么问题么?谢谢