已回答假定已回答

PCG 输出是否有“随意性”?DSP仿真时复位后运行,时序就错误了

Sunnyhgh 在 2015-10-21 詢問的問題
最後回覆由hpkamen於2015-10-25提供

程序是用PCG产生Left-justified的时钟:

PCG输入时钟:

PCG_EXTA_I由CLKIN输入,频率24.576MHZ

DAC输入时钟:

PORT1_DA_O连接-->DAC的DATA

PCG_CLKA_O连接-->DAC的BCLK

PCG_FSA_O连接-->DAC的LRCK

PORT1的输入时钟:

PCG_CLKA_O连接-->PORT1_CLK_I

PCG_FSA_O连接-->PORT1_FS_I


问题是这样的:

1.  在程序仿真过程中(时序正常:LRCK在BCLK下降沿产生),程序有修改-->然后编译-->重新加载DEX文件-->运行-->时钟时序错误(时序错误:LRCK在BCLK上升沿产生);见图1。

2. 用仿真器复位DSP,然后手动加载DXE文件,时钟时序错误,并且产生了偏移(时序错误:LRCK在BCLK高电平时产生);见图2。

3.再用仿真器复位DSP,然后手动加载DXE文件,在程序仿真过程中(时序正常:LRCK在BCLK下降沿产生)。见图3.


图1:(时序错误:LRCK在BCLK上升沿产生)

从上到下的时序分别是:1 DAC_LRCK ; 2 DAC_BCLK ; 3_DAC_DATA  ;4 ADC_LRCK ; 5_ADC_DATA ;6_ADC_BCLK

PCG1.bmp

图2:(时序错误:LRCK在BCLK高电平时产生)

从上到下的时序分别是:1 DAC_LRCK ; 2 DAC_BCLK ; 3_DAC_DATA  ;4 ADC_LRCK ; 5_ADC_DATA ;6_ADC_BCLK


PCG2.bmp


图3:(时序正常:LRCK在BCLK下降沿产生)

从上到下的时序分别是:1 DAC_LRCK ; 2 DAC_BCLK ; 3_DAC_DATA  ;4 ADC_LRCK ; 5_ADC_DATA ;6_ADC_BCLK

PCG3.bmp



程序的配置

/////////////////////////////

SRU:

    // MCLK IN  MCLK=24.576mhz

    SRU(LOW, DAI_PB06_I);

    SRU(LOW, PBEN06_I);

 

    //   PCG CLK连接 和CLKA /FSA输出

    SRU(DAI_PB06_O, PCG_EXTA_I);

    // BCLK OUT FOR ADC/DACS

    SRU(PCG_CLKA_O, DAI_PB17_I);

    SRU(PCG_CLKA_O, DAI_PB05_I);

    // LRCK OUT FOR ADC/DACS

    SRU(PCG_FSA_O, DAI_PB18_I);

    SRU(PCG_FSA_O, DAI_PB07_I);

 

//  Connect the ADC to SPORT0, using data input A

    //  Clock in on pin 17

    SRU(PCG_CLKA_O, SPORT0_CLK_I);

    //  Frame sync in on pin 18

    SRU(PCG_FSA_O, SPORT0_FS_I);

    //data input

    SRU(LOW, DAI_PB19_I);

    SRU(DAI_PB19_O, SPORT0_DA_I);

    SRU(LOW, PBEN19_I);

 

    //DAC 1 DATA

  //  SRU(LOW, DAI_PB04_I);

    SRU(SPORT1_DA_O, DAI_PB04_I);

    //DAC 1 BCLK

    SRU(PCG_CLKA_O, SPORT1_CLK_I);

    // DAC 1 FS

    SRU(PCG_FSA_O, SPORT1_FS_I);

 

 

    //  DAC     OUTPUT

    //DAC1 DATA 

    SRU(HIGH, PBEN04_I);

    // BCLK OUT FOR DACS

    SRU(HIGH, PBEN05_I);

    // LRCK OUT FOR DACS

    SRU(HIGH, PBEN07_I);

 

    // BCLK OUT FOR ADCS

    SRU(HIGH, PBEN17_I);

    // LRCK OUT FOR ADCS

    SRU(HIGH, PBEN18_I);

   

   

    // DAC0 DAT TO DAC3 DAT

     SRU(DAI_PB04_O, DAI_PB01_I);

    SRU(HIGH, PBEN01_I);

 

///////////////////////////

PCG 配置

     //配置PCG

    *pPCG_CTLA0 = 256  // LRCK=MCLK/256=6.144

    | (unsigned int) 1 << 30 | (unsigned int) 1 << 31;// BCLK/LRCK OUTPUT ENABLE

    // BCLK=MCLK/4=6.144,  

    *pPCG_CTLA1 = 4 | (unsigned int)2 << 20 // LRCK 在BCLK 上升沿处产生

    | (unsigned int) 1 << 30 | (unsigned int) 1 << 31;

          *pPCG_PW=0;

          *pPCG_SYNC=0;

///////////////////////////////

結果