您的位置: OpenADSP社区论坛 -> SHARC/TigerSHARC专区 -> 新手上路 -> ADSP-21469的SRC问题
本帖共有1671个阅读者
发表帖子 发表投票 回复主题
ADSP-21469的SRC问题
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
ADSP-21469的SRC问题
问:

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

我是OP...
等级:管理员 参考IP地址:*.*.*.*
2014/7/19 11:59:45
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
答:

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

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

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


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2014/7/19 12:00:15
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
问:非常感谢你的回答,我在最开始贴的程序确实是错误的,在 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的产生信号吗?

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


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2014/7/19 12:00:50
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
答:

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加进来


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2014/7/19 12:01:07
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
问:

我在系统中把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的声音是一样的

我是OP...
等级:管理员 参考IP地址:*.*.*.*
2014/7/19 12:01:25
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
答:

你要确认你的PCG的代码是否正确工作。用示波器看PCG产生的信号比较直观。下面的PCG的代码可以给你参考

#define CLKIN 25000000

#define TX_SAMPLE_RATE 48000
#define RX_SAMPLE_RATE 96000


#define BCLK_TX  (64 * TX_SAMPLE_RATE)
#define BCLK_RX  (64 * RX_SAMPLE_RATE)


#define CLKA_DIVIDER (CLKIN/(BCLK_TX))
#define CLKB_DIVIDER (CLKIN/(BCLK_RX))

#define FSA_DIVIDER (CLKIN / TX_SAMPLE_RATE)
#define FSB_DIVIDER (CLKIN / RX_SAMPLE_RATE)


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

*pPCG_CTLA1 = CLKA_DIVIDER | PHASE_SHIFTA;    // 48KHz
*pPCG_CTLA0 =  FSA_DIVIDER | ENFSA | ENCLKA ;

  
*pPCG_CTLB1 = CLKB_DIVIDER | PHASE_SHIFTB;    // 96KHz
*pPCG_CTLB0 =  FSB_DIVIDER | ENFSB | ENCLKB ;


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2014/7/19 12:01:43
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154085 Call, 1 Queries, Processed in 0.031250 second(s),