你好,
C6748 McASP使用内部时钟通过I2S查询方式向外发送数据。
这样的话 AHCLKX / ACLKX / AFSX ,全部由AUXCLK分频而来并向外输出。初始化完成,各时钟输出正常,可以测到。
但发送数据时,先判断寄存器XSTAT的XDATA位是否为1,第一次调用发送函数XDATA位为1,之后一直XDATA位一直为0。
请问这大概是什么情况导致的呢?
另外,我的理解:McASP使用内部时钟时,I2S向外发送数据,即使DSP没有外接AD等设备,也是能在ACLKX、AXR等引脚测得波形的?求证这种理解是否正确。
Tony Tang:
XUNDRN置位了:underrun,表示没有及时给数,同时XDATA又不置1,是不是你使能了不只一条数据线,但只送了一次数据啊?
zc wang:
回复 Tony Tang:
感谢您的回答,
只使能了一条数据线。
又仔细调试,发现在执行发送函数前,即执行McASPTxEnable()中黄色语句后,XUNDRN置位1,如图:
void McASPTxEnable(unsigned int baseAddr){ /* Release the Transmit State machine from reset*/ HWREG(baseAddr + MCASP_GBLCTL) |= MCASP_GBLCTL_XSMRST; while((HWREG(baseAddr + MCASP_GBLCTL) & MCASP_GBLCTL_XSMRST) != MCASP_GBLCTL_XSMRST) ; /* Release the frame sync generator from reset*/ HWREG(baseAddr + MCASP_GBLCTL) |= MCASP_GBLCTL_XFRST; while((HWREG(baseAddr + MCASP_GBLCTL) & MCASP_GBLCTL_XFRST) != MCASP_GBLCTL_XFRST) ;}