在编写AD/DA后进行测试,发现AD已经跑通,可是DA没有反应。
第一个问题是音频信号在CODEC的输出地址是0X01D02000与LINE IN 口一个地址,该如何理解?
第二个问题是DA输出的PING-PONG PARAM已经设定好了,与AD除地址和TCC外无异(AD已经跑通),但没有反应,为何?
(附MCASP AD\DA配置程序)
mcasp_rx_i2s_activate();
mcasp_tx_i2s_activate();
/*
* McASP transmit config as i2s mode
*/
void mcasp_rx_i2s_config(void)
{
/* Set I2S format in the receiver format units */
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
MCASP_RX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
/* configure the clock for receiver */
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
0x00, 0xFF);
/* Enable the receiver slots. I2S uses 2 slots */
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
** Set the serializers, Currently only one serializer is set as
** transmitter and one serializer as receiver.
*/
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
}
/*
* McASP recieve config as i2s mode
*/
void mcasp_tx_i2s_config(void)
{
/* Set I2S format in the transmitter format units */
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
MCASP_TX_FS_EXT_BEGIN_ON_RIS_EDGE);
/* configure the clock for transmitter */
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_EXTERNAL, 0, 0);
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
0x00, 0xFF);
/* Enable the transmit slots. I2S uses 2 slots */
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
** Set the serializers, Currently only one serializer is set as
** transmitter and one serializer as receiver.
*/
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
}
/*
** Activates the data transmission/reception
** The DMA parameters shall be ready before calling this function.
*/
void mcasp_tx_i2s_activate(void)
{
/* Start the clocks */
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_EXTERNAL);
/* Activate the serializers */
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
// /* make sure that the XDATA bit is cleared to zero */
// while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
}
/*
** Activates the data recieve
** The DMA parameters shall be ready before calling this function.
*/
void mcasp_rx_i2s_activate(void)
{
/* Start the clocks */
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
/* Activate the serializers */
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* Activate the state machines */
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
}