Other Parts Discussed in Thread: TLV320ADC5140, TLV320AIC3106,
TI技术人员你好,我现在使用DSP与两片四通道的音频解码器TLV320ADC5140使用MCASP连接,通信口打算使用AX0,AX1进行数据接收或者只用AX0接收 ,位时钟,同步时钟并联。然后使用FIFO,EDMA接受数据。
我在网上没有找到类似例程,只有官方提供的DSP与TLV320AIC3106进行IIS通信的,我想在这基础上参考一下,原来的例程把MCASP口初始化为IIS模式改成TDM模式,例程如下
// 初始化 McASP 为 I2S 模式.只接收
McASPI2SConfigure(MCASP_RX_MODE, WORD_SIZE, SLOT_SIZE, I2S_SLOTS, MCASP_MODE_DMA);//MCASP_BOTH_MODE
/****************************************************************************/
/* */
/* 初始化 McASP 接收通道 */
/* */
/****************************************************************************/
void McASPI2SRxConfigure(unsigned char wordSize,unsigned char slotSize,
unsigned int slotNum, unsigned char modeDMA)
{
// 复位
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
switch(modeDMA)
{
case MCASP_MODE_DMA:
// 使能 FIFO
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);//第一个 1:指定启用 接收通道(Rx 方向)。 第二个 1:表示启用 FIFO 功能
// 设置接收 word 和 slot 的大小
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, wordSize, slotSize,
MCASP_RX_MODE_DMA);
break;
case MCASP_MODE_NON_DMA: //不使用DMA
// 设置接收 word 和 slot 的大小
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, wordSize, slotSize,
MCASP_RX_MODE_NON_DMA);
break;
}
// 初始化帧同步,TDM 格式使用 slot 个数,对齐帧同步信号的上升沿
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, slotNum, MCASP_RX_FS_WIDTH_WORD,//时隙数量 位宽设置为WORD级别,(每个时隙的位宽)
MCASP_RX_FS_EXT_BEGIN_ON_RIS_EDGE); //帧同步信号在上升沿时标志新帧开始,
//需与发送端(如 ADC5140)的配置一致
// 初始化接收时钟,使用外部时钟,时钟上升沿有效 。MCASP_RX_CLK_EXTERNAL外部时钟输入,
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0); //第一个0 分频系数,CLKRDIV = 0, 第二个0 时钟极性上升沿采样
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);//接收时钟极性,将其设置为上升沿有效
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,//接收时钟32分频,接收时钟低阈值0为不限制,
0x00, 0xFF); //最大频率阈值(上限值),此处为 255,对应计数值上限。
// 使能发送接收同步
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_EXTERNAL, 0, 0);
// 使能 接收 slot 配置 TMS320C6748 的 McASP(多通道音频串行端口)接收方向的时隙使能状态,启用时隙的数量
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, (1 << slotNum)-1);
// 设置串行器,设置12通道接收
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
// 初始化 McASP 引脚,和引脚输入输出方向
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
//配置 TMS320C6748 DSP 的 McASP(多通道音频串行端口)引脚方向为输入模式,
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX // 帧同步信号引脚 (AFSX)
| MCASP_PIN_ACLKX // 位时钟引脚 (ACLKX)
| MCASP_PIN_AXR(MCASP_XSER_RX));// 接收数据引脚 (AXR)
/*
如果设置为为时钟和同步时钟输出,
// 设置AFSX和ACLKX为输出
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX | MCASP_PIN_ACLKX);
// 设置AXR12为输入
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AXR(12));
*/
}
// 设置接收 word 和 slot 的大小和DMA
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, wordSize, slotSize,
MCASP_RX_MODE_NON_DMA);这个函数是不是配置成IIS专用的库函数?我没用找到类似配置成TDM模式下直接配置 word 和 slot 的大小和DMA的函数?
请问我想配置成4个时隙,32位传输,这里应该怎么修改?怎么配置MCASP口为TDM模式