ADSP21469的SRC问题

本人新手一枚,在实现21469例程里面        Power_On_Self_Test的analog_audio_test模块时,使用I2S传输模式对产生的sin信号进行DAC转换从耳机输出,程序正确。在此基础上增加SRC采样速率转换模块。耳机有声音出来,但是声音不对,希望各位能够帮忙解决问题,谢谢!!

digital_in_audio_out.rar.zip
  • 重新修改后,信号经过SRC模块无变化,或者说没有进入到SRC模块中,请大家指导一下程序错在哪里?

  • 0
    •  Analog Employees 
    on Jul 29, 2013 12:07 PM

    你好!

    1)我建议你先把PCG的代码拿掉,SRC的输入和输出的sclk, fs,SPORT0 的SCLK,FS信号都使用SPORT1的SCLK,FS信号,你看看是否可以听到正确的声音

    2)你用PCG的产生SCLK, FS 信号,你用示波器量一下,这2个信号是否正确

    3)如果2正确了,你把PCG的信号输入给SPORT0,把SRC的代码拿掉,直接跑sport loopback,你看看是否有正确的声音

  • 你好!

          非常感谢你的回答,我在最开始贴的程序确实是错误的,在 Power_On_Self_Test的analog_audio_test模块里面数据是在DAC运行时才被写进去的,所以我的SRC加入的位置不对,我进行了重新修改后,SRU的配置程序如下:

    void Init_DAI_I2S()

    {

        Clear_DAI_Pins();;

       

        SRU(PCG_CLKA_O, SRC0_CLK_IP_I);

        SRU(PCG_FSA_O, SRC0_FS_IP_I);

        SRU(PCG_CLKA_O, SPORT0_CLK_I);

        SRU(PCG_FSA_O, SPORT0_FS_I);

        SRU(SPORT0_DA_O, SRC0_DAT_IP_I);

       

     

        SRU(DAI_PB07_O, SRC0_CLK_OP_I);

        SRU(DAI_PB08_O, SRC0_FS_OP_I);   

        SRU(HIGH, PBEN12_I);

        SRU(SRC0_DAT_OP_O, DAI_PB12_I);    // DAIP12 (DSDATA1) to SPORT0 DA (TX)  

    //--------------------------------------------------------------------------

    // Route SPI signals to AD1939 Control Port.

        SRU(SPI_MOSI_O, DPI_PB01_I);     //Connect MOSI to DPI PB1.

        SRU(DPI_PB02_O, SPI_MISO_I);     //Connect DPI PB2 to MISO.

        SRU(SPI_CLK_O, DPI_PB03_I);      //Connect SPI CLK to DPI PB3.

        SRU(SPI_FLG0_O, DPI_PB04_I);     //Connect SPI FLAG0 to DPI PB4.

       

       

    //---------------------------------------------------------------------------

    // Tie pin buffer enable from SPI peripheral to determine whether they are

    // inputs or outputs

        SRU(SPI_MOSI_PBEN_O, DPI_PBEN01_I);

        SRU(SPI_MISO_PBEN_O, DPI_PBEN02_I);

        SRU(SPI_CLK_PBEN_O, DPI_PBEN03_I);

        SRU(SPI_FLG0_PBEN_O, DPI_PBEN04_I);  

    }

    ======================================PCG的设置为:

    #define CLKIN                     25000000

    #define SRC0_SAMPLE_RATE          192000

    #define BCLK_SRC0                 (64 * SRC0_SAMPLE_RATE)

    #define CLKA_DIVIDER (CLKIN/BCLK_SRC0)

    #define FSA_DIVIDER  (CLKIN/SRC0_SAMPLE_RATE)

    #define PHASE_SHIFTA (((CLKA_DIVIDER)/2+1)<<20)

    void InitPCG()

    {

              *pPCG_CTLA1=CLKA_DIVIDER | PHASE_SHIFTA;

              *pPCG_CTLA0=FSA_DIVIDER | ENFSA | ENCLKA;

     

              *pPCG_PW=0;

              *pPCG_SYNC=0;

    }

    sine513是频率为1hz的正弦波,产生如下波形:

    现在耳机可以听到声音且感觉没有杂音,但是从输出的波形看我怀疑输入信号是否有进入到SRC模块中,因为听到的声音和直接进行DAC转换时设置不同采样率的结果一样?例外SRU配置SRC的输出FS和CLK的时候使用的是DAI_PB07,DAI_PB08的输出,但是因为没有ADC的话,这两个应该没有任何连接,但是设置成别的声音有不对,还请麻烦您帮忙指导一下该怎么解决这个问题

    例外,因为条件限制所以没有示波器,请问一下还有别的方法可以查看PCG的产生信号吗?

    非常期待你的指导和回答,谢谢!!!

  • 0
    •  Analog Employees 
    on Jul 30, 2013 7:55 AM

    你好!

    1)我的建议是你先把PCG相关的代码拿掉

    2)  你的系统的SRU设计有问题,你可以这样配置,所有的SPORT,SRC,以及DAC的FS ,CLK,都共用ADC产生的FS,CLK

       1. Connect ADC to SPORT0

        2. Connect SPORT1 to SRC1-INPUT

        3. Connect SRC1-OUTPUT to SPORT2

        4. Connect SPORT3&4 to DAC's

    3)你的系统里面需要把SPORT1 ,SPORT3, SPORT4配置成TX,SPORT0,SPORT2配置成RX

    4)你需要把数据从SPORT0 RXBUF 拷贝到SPORT 1 TXBUF,从SPORT2 的RX BUF 拷贝到SPORT3&4 TXBuf

    5)  关于上面的配置,你可以参看C:\Analog Devices\VisualDSP 5.0\214xx\Examples\ADSP-21469 EZ-Board\SPDIF to Analog TalkThru with SRC (C)

    6)等你的SRC+SPORT的loopback跑起来了,再考虑把PCG加进来

  • 您好!

          我在系统中把SPORT2,SPORT3和SPORT4这些内容全部去掉了,现在的程序只是-->SPORT0--->SRC0--->DAC(1939)的方式,信号是内存中sine4000的.dat文件产生的,SPORT0和SRC0的输入时钟和帧同步是PCG产生的,SRC0的CLK_OP_I和FS_OP_I由DAI_PB06_O和DAI_PB07_O提供,耳机里听到的声音正确,但是我不知道是否有经过SRC的模块,因为听到的声音和不加入SRC仅仅把1939的采样率改为192的声音是一样的