TI论坛
直播中

李静

8年用户 1068经验值
私信 关注
[问答]

C6748做主提供codec时钟,请问MCASP边沿触发应该怎么设置?


  • 我们公司一个音频的项目,基本架构是c6748加AIC3106。后来换了一个codec,这个新的codec是cs4272,这是一个24bit的codec,前一段时间问了芯片原厂,原厂建议暂时用16bit进行数据传输。我配置codec'后基本的数据结构如下图。16bit ,i2s格式,左对齐,没有延时位。

    帧时钟上升沿触发,位时钟也是上升沿触发,没有延时位,只进行单通道放音时我用逻辑分析仪抓了图。可以看出抓的数据和手册描述一致,且只有一个声道有数据。

    DSP的配置,DSP做主。接收帧R是上升沿触发,位时钟上升沿触发。发送帧X是下降沿触发,位时钟下降沿触发。
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    //接收端   
        // 初始化帧同步,TDM 格式使用 slot 个数,对齐帧同步信号的上升沿  0428 修改为mcasp内部驱动
        McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, slotNum, MCASP_RX_FS_WIDTH_WORD,
                            MCASP_RX_FS_INT_BEGIN_ON_RIS_EDGE);

        // 初始化接收时钟,使用内部时钟,时钟上升沿有效 0528 48kHz
        McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_INTERNAL, 7, 1);
        McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
        McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
                              0x00, 0xFF);
    ......
    ......
    //发送端
            McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, slotNum, MCASP_TX_FS_WIDTH_WORD,
                               MCASP_TX_FS_INT_BEGIN_ON_FALL_EDGE);

        // 初始化发送时钟,使用内部时钟,时钟下降沿有效  0528
        McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 7, 1);
        McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
        McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
                              0x00, 0xFF);





    但是经过DMA接收的数据明显不对,应该是0xXXXX  0x0000这样才对,用扬声器播放出来的都是杂音。我第一感觉是哪里没有对齐导致数据全部错了。

    我换成原来的AIC3106做了对比,这里接收的数据是0xXXXX  0x0000格式,播放和录音也正常了。

    现在两个codec的配置不同的地方如下:之前是3106做主,DSP做从。现在的配置DSP做主帧时钟、位时钟、都是DSP发到codec的,其他的格式我按照手册都对了,asp的接收发送的边沿触发也换了好几次都不对,请问一下还有哪里需要注意的。

                                                             

回帖(2)

林芳

2024-10-21 10:42:50

  • 我们公司一个音频的项目,基本架构是c6748加AIC3106。后来换了一个codec,这个新的codec是cs4272,这是一个24bit的codec,前一段时间问了芯片原厂,原厂建议暂时用16bit进行数据传输。我配置codec'后基本的数据结构如下图。16bit ,i2s格式,左对齐,没有延时位。

    帧时钟上升沿触发,位时钟也是上升沿触发,没有延时位,只进行单通道放音时我用逻辑分析仪抓了图。可以看出抓的数据和手册描述一致,且只有一个声道有数据。

    DSP的配置,DSP做主。接收帧R是上升沿触发,位时钟上升沿触发。发送帧X是下降沿触发,位时钟下降沿触发。
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    //接收端   
        // 初始化帧同步,TDM 格式使用 slot 个数,对齐帧同步信号的上升沿  0428 修改为mcasp内部驱动
        McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, slotNum, MCASP_RX_FS_WIDTH_WORD,
                            MCASP_RX_FS_INT_BEGIN_ON_RIS_EDGE);

        // 初始化接收时钟,使用内部时钟,时钟上升沿有效 0528 48kHz
        McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_INTERNAL, 7, 1);
        McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
        McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
                              0x00, 0xFF);
    ......
    ......
    //发送端
            McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, slotNum, MCASP_TX_FS_WIDTH_WORD,
                               MCASP_TX_FS_INT_BEGIN_ON_FALL_EDGE);

        // 初始化发送时钟,使用内部时钟,时钟下降沿有效  0528
        McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 7, 1);
        McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
        McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
                              0x00, 0xFF);





    但是经过DMA接收的数据明显不对,应该是0xXXXX  0x0000这样才对,用扬声器播放出来的都是杂音。我第一感觉是哪里没有对齐导致数据全部错了。

    我换成原来的AIC3106做了对比,这里接收的数据是0xXXXX  0x0000格式,播放和录音也正常了。

    现在两个codec的配置不同的地方如下:之前是3106做主,DSP做从。现在的配置DSP做主帧时钟、位时钟、都是DSP发到codec的,其他的格式我按照手册都对了,asp的接收发送的边沿触发也换了好几次都不对,请问一下还有哪里需要注意的。

                                                             
举报

笔画张

2024-10-21 17:58:56
在您的情况下,您需要将C6748配置为主时钟提供者,以便为CS4272 Codec提供时钟。以下是一些建议的步骤来配置MCASP边沿触发:

1. 配置MCASP模块:首先,您需要配置MCASP模块以使其成为主时钟提供者。这包括设置帧时钟(FrClk)和位时钟(BitClk)的源。在这种情况下,您应该将C6748的内部时钟作为MCASP的时钟源。

2. 设置MCASP时钟极性和相位:根据您的描述,您需要将帧时钟(FrClk)设置为上升沿触发,位时钟(BitClk)也设置为上升沿触发。这可以通过配置MCASP的时钟极性和相位寄存器来实现。

3. 配置MCASP数据格式:您提到您使用的是16位I2S格式,左对齐,没有延时位。您需要在MCASP的数据格式寄存器中设置这些参数。例如,您可以设置数据宽度为16位,数据格式为I2S,对齐方式为左对齐,没有延时位。

4. 配置MCASP通道:由于您只进行单通道放音,您需要在MCASP通道配置寄存器中设置相应的通道。例如,您可以设置通道A为活动通道,通道B为非活动通道。

5. 配置MCASP传输模式:根据您的描述,您需要将DSP配置为主设备。因此,您需要在MCASP传输模式寄存器中设置相应的模式。例如,您可以设置接收帧(R)为上升沿触发,发送帧(X)为下降沿触发。

6. 配置MCASP中断和DMA:根据您的需求,您可能需要配置MCASP的中断和DMA。这包括设置中断源、中断优先级和DMA通道等。

7. 初始化MCASP模块:在完成上述配置后,您需要初始化MCASP模块。这包括使能MCASP时钟、复位MCASP模块、使能MCASP模块等。

8. 测试和验证:最后,您需要测试和验证MCASP配置是否正确。这可以通过捕获数据并将其与预期结果进行比较来完成。您提到已经使用逻辑分析仪捕获了数据,并且数据与手册描述一致,这是一个好的迹象。

总之,要将C6748配置为主时钟提供者,您需要配置MCASP模块,设置时钟极性和相位,配置数据格式、通道和传输模式,初始化MCASP模块,并进行测试和验证。希望这些建议对您有所帮助。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分