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

OMAPL138 DSP MCASP接口 DMA数据搬移问题

大家好,目前我遇到了一个棘手的问题,希望大家帮助。利用omapl138与tlv320aic29接口连接且omapl138做主设备。mcasp的配置大概如下:配置为I2S的TDM模式,采样率为12k,完全按照手册配置流程进行的配置,edma利用外围配置端口访问mcasp,采用的是AB同步方式搬移数据,CCNT的长度初值为1280。

mcasp0regs->GBLCTL = 0x00000000;

mcasp0regs->RMASK= 0xFFFF;

mcasp0regs->RFMT=0x00018078;

(1-bit延时;高位在前;单元大小为16位;外围配置端口;不旋转)
mcasp0regs->AFSRCTL=0x00000102;
(I2S模式;单个位;内部产生帧同步;上升沿)
mcasp0regs->ACLKRCTL=0x00000029;
(下降沿移出数据;内部接收时钟源;10分频)
mcasp0regs->AHCLKRCTL=0x00008004;
(内部接收高频时钟源;不反相;5分频)
mcasp0regs->RTDM=0x00000001;
(一个slot有效)

mcasp0regs->RCLKCHK = 0x00FF0008;
mcasp0regs->REVTCTL=0x00000000;
(EDMA接收数据请求使能)

mcasp0regs->XMASK= 0xFFFF;mcasp0regs->XFMT=0x0001807C;
(1-bit延时;高位在前;单元大小为16位;外围配置端口;右旋位数为16位)
mcasp0regs->AFSXCTL=0x00000102;
(I2S模式;单个位;内部产生帧同步;上升沿)
mcasp0regs->ACLKXCTL=0x00000029;
(上升沿移出数据;发送接收同步;内部发射时钟源;10分频)
mcasp0regs->AHCLKXCTL=0x00008004;
(内部发送高频时钟;不反相;5分频)
mcasp0regs->XTDM=0x00000003;
(I2S模式)

mcasp0regs->XCLKCHK = 0x00FF0008;
mcasp0regs->XEVTCTL=0x00000000;
(EDMA发送数据请求使能)

mcasp0regs->PFUNC = 0x00000000;

mcasp0regs->PDIR = 0x1C004000;

mcasp0regs->DITCTL = 0x00000000;

mcasp0regs->DLBCTL = 0x00000000;
mcasp0regs->AMUTE = 0x00000000;

其中串行器14配置为发射,串行器15配置为接收。

程序刚开始可以正常运行,发射和接收均能正常工作,但是静置一段时间(大概两天时间),发现mcasp的发射异常,XSTAT显示underrun错误,同时XDATA位被置位,但是edma已经不再搬移数据。同时EDMA计数器CCNT的值既不是0也不是1280,而是停留在了一个中间值500。mcasp的接收不受影响可以正常工作。求助大神帮忙分析一下可能是什么原因造成的这种现象。

Shine:

能够运行其他代码吗?还是就mcasp接口出问题了?先把EDMA功能去掉,试一下mcasp的loopback模式是否能成功?

Da He:

回复 Shine:

其他各部分程序包括从edma通过mcasp从mic采集数据都能够正常运行,只有edma发射数据送给codec放音这里出了问题。我感觉这里是mcasp作为主设备向codec送数据,是不是可以理解为不是后端的codec造成的数据搬移错误?

赞(0)
未经允许不得转载:TI中文支持网 » OMAPL138 DSP MCASP接口 DMA数据搬移问题
分享到: 更多 (0)