有关ADAU1701程序与控制器的通讯

各位好,本人刚刚开始接触该系列的DSP芯片,现在想做一个通过控制器(比如MSP430)来控制DSP程序下载切换的电路。想问一下该想法可不可行。

大体上说来,就是,我在SIGMASTUDIO中编写两套音频处理的程序,然后通过下载器下载到控制器或者某一块存储器中去,当控制器发出指定的信号时,存储器会选择相应的音频处理程序下载到DSP中去,当控制器发出另一个信号时,存储器又会将另一套程序下载到DSP中。

现在最大的问题就是,程序能否打包下载到某一段存储器中,以及,程序下载能否在收到某个触发信号之后自动运行。

若该想法不可行,能否告知一些相应的理由。若想法可行,还望提供一些相关的资料以供参考。

谢谢!

  • Hi 彦祖,

    可以的。只需要将ADAU1701当做I2C Slave,需要更新程序的时候先关DSP,然后通过I2C/SPI将SigmaStudio编译好的二进制文件写入RAM即可。

    不过你为什么要设计两个不同的Schematic呢?不能在一个Schematic里实现两种选择吗?只要Mips够用的话,建议只做一个Schematic。 而ADAU1701带self-boot功能,可以外接EEPROM实现上电自启动。这样就不需要MCU在上电的时候通过I2C/SPI写RAM了。

    How to self-boot the EVAL-ADAU1701MINIZ (evalua... | EngineerZone

    Thanks,

    Jun

  • jun,

        你好,看了你对很多提问的解答,觉得分析到点子上了,让人茅塞顿开。我也在此请教个问题,如下图,对于EQ的参数,如果要上位机要通过MCU去控制,应该要有个算法

    https://wiki.analog.com/resources/tools-software/sigmastudio/toolbox/filters/general2ndorder

    这上面有相关的公式,在SigmalStudio的HELP 也有,我就想知道,上面的公式,在这个例子里是怎样推出来的?能就这个例子详细和具体地指教一下吗?

    EQ Algorithm


    The 2nd Order  and medium-size EQ blocks use multiple biquad filters, based on Robert Bristow-Johnson's work as shown here:

     

    Common Variables

    A  = 10^(boost/40)

    ω0 = 2*pi*f0/Fs

    alpha = sin(ω0)/(2*Q) (type: Peaking)

          = sin(ω0)/2 * sqrt((A + 1/A)*(1/S - 1) + 2) (type: Shelving)

    gainLinear = 10^(gain/20)

     

     

    Peaking

    Transfer function

    Coefficients

    a0 =  1 + alpha/A

    a1 = -2 * cos(ω0)

    a2 =  1 - alpha/A

    b0 = (1 + alpha*A) * gainLinear

    b1 = -(2 * cos(ω0)) * gainLinear

    b2 = (1 - alpha*A) * gainLinear

     

     Low-Shelf

    Transfer function

    Coefficients

    a0 = (A+1) + (A-1)*cos(ω0) + 2*sqrt(A)*alpha

    a1 = -2*( (A-1) + (A+1)*cos(ω0) )

    a2 = (A+1) + (A-1)*cos(ω0) - 2*sqrt(A)*alpha

    b0 =  A*( (A+1) - (A-1)*cos(ω0) + 2*sqrt(A)*alpha ) * gainLinear

    b1 =  2*A*( (A-1) - (A+1)*cos(ω0) ) * gainLinear

    b2 =  A*( (A+1) - (A-1)*cos(ω0) - 2*sqrt(A)*alpha ) * gainLinear

     

    High-Shelf

    Transfer function

    Coefficients

    a0 = (A+1) - (A-1)*cos(ω0) + 2*sqrt(A)*alpha

    a1 =  2*( (A-1) - (A+1)*cos(ω0) )

    a2 = (A+1) - (A-1)*cos(ω0) - 2*sqrt(A)*alpha

    b0 =  A*( (A+1) + (A-1)*cos(ω0) + 2*sqrt(A)*alpha ) * gainLinear

    b1 = -2*A*( (A-1) + (A+1)*cos(ω0) ) * gainLinear

    b2 =  A*( (A+1) + (A-1)*cos(ω0) - 2*sqrt(A)*alpha ) * gainLinear

     

    For each of these three filters, all the coefficients are divided by a0, normalizing them and making a0 = 1, so that only 5 coefficients must be stored.

     

    In the implementation on the DSP, when the coefficients are stored in parameter RAM, a1 and a2 need to be inverted. This is done in software before the parameters are written to memory.

       谢谢你的帮忙

        黄工SigmalStudio.zip

       1382924416

       8或qq  2576224822