This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

PCM3070 MiniDSP Instruction Control Registers

Other Parts Discussed in Thread: PCM3070, TAS5708

Hi,

I'm working on a design that couples together PCM3070 and TAS5708. I'm utilizing both I2S and line outs of PCM3070.

I'm using the 8x4x framework

FS = 48Khz

CODEC_CLKIN = 86.016Mhz

NADC, NDAC = 2

MADC, MDAC = 7

AOSR and DOSR =128. 

I'm having trouble finding the right values for "Instruction Control Registers" (Page 0 Register 15, 16 and 21, 22). Some numbers seem to magically work for a generated code, while others don't. The only constraint that is mentioned on the Application Reference Manual is that they have to be a multiple of decimation factor (4) and interpolation factor (8) , but that doesn't seem to be enough.

Any clues on what they stand for and how to come up with the right values for them is greatly appreciated.

Regards

  • This is very frustrating! I really appreciate a TI engineer or anyone with experience with this chip input on this.

    Thanks,

  • Hi,

    These control register values (called IDAC and IADC) are automatically generated by PurePath Studio based on the miniDSP_A and miniDSP_D cycles property of the framework. The default SystemSettingsCode (a framework property that allows register editing) has lines called IDAC and IADC that automatically convert these properties into register values. The output .cfg or .h file should reflect this once the code is compiled.

    Regards,

    J-

  • Hi J,

    Thanks for your input. From what I have seen, they are not generated automatically, but they are design time properties of the Framework which you set manually in Purepath Studio. Whatever numbers you put in Purepath studio shows up in the .h file, regardless of whether it works or not.

    Let me know if I'm missing something.

    Thanks,

    Siavash

     

  • Siavash,

    Do you see the following lines in the SystemSettingsCode?

    IDAC = %%prop(miniDSP_D_Cycles)

    IADC = %%prop(miniDSP_A_Cycles)

    Regards,

    J-

  • Hi,

    Then you should obtain the output marked in red below when compiling, which correspond to an IDAC/IADC of 904.

    Cfg file:

    #   # reg[  0][ 17] = 0x08 ; 8x Interpolation
    w 30 11 08
    #   # reg[  0][ 23] = 0x04 ; 4x Decimation
    w 30 17 04
    #   
    w 30 0f 03
    #   
    > 88
    #   
    w 30 15 03
    #   
    > 88

    Header file:

    //   # reg[  0][ 17] = 0x08 ; 8x Interpolation
        { 17,0x08},
    //   # reg[  0][ 23] = 0x04 ; 4x Decimation
        { 23,0x04},
    //   
        { 15,0x03},
    //   
        { 16,0x88},
    //   
        { 21,0x03},
    //   
        { 22,0x88},

    Regards,

    J-

  • Hi,

    Yes, the numbers that are given for registers 15, 16, 21, and 22 in the header file, are the same numbers that you input in Purepath Studio. Purepath doesn't calculate them, it just writes them to the .h file. 

    For example, if in Purepath Studio I change 904 to 1024, PurePath will happily generate the code but when I download it to my DSP, no sound come out.

    Basically, I can input a range of numbers for IDAC and IADC in Purepath and it will generate the code without any errors. However, not all of them work when I download the code to DSP. Some of them generate white noise, others generated a distorted version of the input signal, and sometimes there is no sound at all.

    I suspect there is some other constraints for setting these numbers that is not mentioned in the datasheet. I think 

  • Hi,

    Ok. The issue is that MDAC*DOSR >= IDAC and MADC*AOSR >= IADC. So configure PLL settings such that M = 8, N = 2, OSR = 128, which will yield 1024.

    Regards,

    J-

  • Thanks J. I'll give it a try!