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.

MCACP 接收中断溢出问题

TI工程师,你好:

我最近在调试c6748的板子,使用mcasp与编解码芯片wm8731进行通信。

wm8731设置成从设备,发送数据。c6748设置成主设备,接收数据。mcasp的配置如下:

void McASPInit(void)
{
//复位
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
HWREG(SOC_MCASP_0_CTRL_REGS + MCASP_GBLCTL) = 0;

//帧同步 0x02:2-slot(I2S)
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 0x02, MCASP_RX_FS_WIDTH_WORD,
MCASP_RX_FS_INT_BEGIN_ON_FALL_EDGE);

//设置时钟源以及分频。 7,表示ACLKRCTL的时钟分频;7,表示AHCLKRCTL的时钟分频
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_INTERNAL, 7, 0);

//设置时钟极性
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
McASPRxHFClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_HI_FREQ_CLK_NO_INVERT);

//AFSRCTL 设置2-slot(I2S),这里也设置2个slot
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, 0x3);

//AXR15做为接收。
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, 15);

//AFSR 接收帧同步,AFSX 发送帧同步; AXR15 接收数据线。7 发送数据线;ACLKR 发送时钟, ACLKX 接收时钟。
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSR | MCASP_PIN_AFSX |
MCASP_PIN_ACLKR | MCASP_PIN_ACLKX | MCASP_PIN_AXR(15) | MCASP_PIN_AXR(7));

//时钟,帧同步,发送数据线设置为输出
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSR | MCASP_PIN_AFSX |
MCASP_PIN_ACLKX | MCASP_PIN_AXR(7) | MCASP_PIN_ACLKR );
//接收数据线设置为输入
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AXR(15));

//中断:接收开始,接收时钟错误,接收同步错误,接收溢出
McASPRxIntDisable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_STARTOFFRAME | MCASP_RX_DATAREADY |
MCASP_RX_LASTSLOT | MCASP_RX_DMAERROR | MCASP_RX_CLKFAIL | MCASP_RX_SYNCERROR | MCASP_RX_OVERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DATAREADY);

//运行时钟,高频时钟
HWREG(SOC_MCASP_0_CTRL_REGS + MCASP_RGBLCTL) |= MCASP_RGBLCTL_RCLKRST | MCASP_RGBLCTL_RHCLKRST;
while((HWREG(SOC_MCASP_0_CTRL_REGS + MCASP_RGBLCTL) & (MCASP_RGBLCTL_RCLKRST | MCASP_RGBLCTL_RHCLKRST))
!= (MCASP_RGBLCTL_RCLKRST | MCASP_RGBLCTL_RHCLKRST)) ;

//激活serializers
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
HWREG(SOC_MCASP_0_CTRL_REGS + MCASP_RSTAT) = 0xFFFF;
HWREG(SOC_MCASP_0_CTRL_REGS + MCASP_RGBLCTL) |= MCASP_RGBLCTL_RSRCLR;
while((HWREG(SOC_MCASP_0_CTRL_REGS + MCASP_RGBLCTL) & MCASP_RGBLCTL_RSRCLR)
!= MCASP_RGBLCTL_RSRCLR);

//激活状态机
HWREG(SOC_MCASP_0_CTRL_REGS + MCASP_RGBLCTL) |= MCASP_GBLCTL_RSMRST;
while((HWREG(SOC_MCASP_0_CTRL_REGS + MCASP_RGBLCTL) & MCASP_GBLCTL_RSMRST)
!= MCASP_GBLCTL_RSMRST) ;

//激活帧同步产生器
HWREG(SOC_MCASP_0_CTRL_REGS + MCASP_RGBLCTL) |= MCASP_GBLCTL_RFRST;
while((HWREG(SOC_MCASP_0_CTRL_REGS + MCASP_RGBLCTL) & MCASP_GBLCTL_RFRST)
!= MCASP_GBLCTL_RFRST) ;
}

中断处理函数中读取状态寄存器,一直是0x179或者0x171,一直存在溢出错误。这可能是什么原因导致的?

非常感谢。