ΣSigmaStudio Ask AI Русский Log in

ADAU1446 - interface read/write register and I2C address

SigmaDSP & SigmaStudio andrea.labhf Jun 16, 2010 00:00 3 replies Original on forum ↗
Subscribe
andrea.labhf Question
Jun 16, 2010 00:00

Hi all,

I'm working with an ADAU1446.

I use the DSP in selfboot mode, but there is a microcontroller appended on I2C line that have to comunicate with DSP.

In past I've worked on top of a similar application with ADAU1701.'ve used interface read/write registers.

In ADAU1701 these register have a fixed I2C address that is specified in the datasheet of the device.

So you can compile-recompile-upsidedown DSP SigmaStudio project and your Interface registers stay locked.

Otherwise, in ADAU1446, there isn't an address space reserved for Interface register so SigmaStudio assign a dynamic address to Interfaces every time you compile a project.

This is a problem beacause I've to update the Interface register Address in my Microcontroller Application every time that I modify the SigmaStudio file.

This is very restrictive and easily lead to error.

Is there a way to lock the I2C Address assigned to a block in SigmaStudio?

How can I workaround this issue?

Thanks

Andrea

Audio Signal Processors

adau1446

sigmastudio

SigmaDSP Audio Processors

SigmaDSP

selfboot

adau1701

self-boot

Show More

ADIApproved Reply
Jun 21, 2010 00:00

Hi Andrea,

There is no way to lock the parameter addresses assigned to SigmaStudio blocks. That would require some extra development on the compiler and it would also use the RAM space less effectively. The way to solve this problem is to use the C-compatible .h files exported by SigmaStudio and include these in your microcontroller code compilation.

First, create a project. Here's my simple example: Input - Volume - Output

Link-Compile-Download OR Link-Compile-Connect.

Click the Export System Files button. You will be prompted to name the files. I called mine "Test."

This creates several output files in the same directory as the project file. For now, take a look at the one whose filename ends in IC_1_PARAM.h.

The file's contents look something like this:

/* Module Modulo Size - Modulo Size*/
#define MOD_MODULOSIZE_COUNT 1
#define MOD_MODULOSIZE_DEVICE "IC1"
#define MOD_MODULOSIZE_MODULO_SIZE_ADDR 0
#define MOD_MODULOSIZE_MODULO_SIZE_FIXPT 0x00002000
#define MOD_MODULOSIZE_MODULO_SIZE_VALUE SIGMASTUDIOTYPE_INTEGER_CONVERT(8192)
#define MOD_MODULOSIZE_MODULO_SIZE_TYPE SIGMASTUDIOTYPE_INTEGER

/* Module Single 1 - Single Volume Control*/
#define MOD_SINGLE1_COUNT 1
#define MOD_SINGLE1_DEVICE "IC1"
#define MOD_SINGLE1_GAIN1940ALGNS1_ADDR 8
#define MOD_SINGLE1_GAIN1940ALGNS1_FIXPT 0x00800000
#define MOD_SINGLE1_GAIN1940ALGNS1_VALUE SIGMASTUDIOTYPE_FIXPOINT_CONVERT(1)
#define MOD_SINGLE1_GAIN1940ALGNS1_TYPE SIGMASTUDIOTYPE_FIXPOINT

Note that my important parameter, volume, is assigned a name: MOD_SINGLE1_GAIN1940ALGNS1. Its address and default value are defined in this file.

#define MOD_SINGLE1_GAIN1940ALGNS1_ADDR 8
#define MOD_SINGLE1_GAIN1940ALGNS1_FIXPT 0x00800000

So, if you include this file in your microcontroller compilation, you can simply refer to the volume control's parameter address as MOD_SINGLE1_GAIN1940ALGNS1_ADDR. Then, every time you update the project, as long as you keep the cell's name the same, the new IC_1_PARAM.h file will have an updated address defined. Basically, you just need to keep updating the include file and all of your addresses will be updated automatically.

1ab27b9cc3dc4516182f7a20bc53976f.jpg
1ab27b9cc3dc4516182f7a20bc53976f.jpg
1ab27b9cc3dc4516182f7a20bc53976f.jpg-234x193.jpg
1ab27b9cc3dc4516182f7a20bc53976f.jpg-234x193.jpg
7a949587e2e97aebb147ce471f3b40a2.jpg
7a949587e2e97aebb147ce471f3b40a2.jpg
7a949587e2e97aebb147ce471f3b40a2.jpg-178x55.jpg
7a949587e2e97aebb147ce471f3b40a2.jpg-178x55.jpg
0e263e0b8309340ee7bc07e3899792d2.jpg
0e263e0b8309340ee7bc07e3899792d2.jpg
0e263e0b8309340ee7bc07e3899792d2.jpg-69x47.jpg
0e263e0b8309340ee7bc07e3899792d2.jpg-69x47.jpg
289cf98eaa53dd161fc3ac1237fef50b.jpg
289cf98eaa53dd161fc3ac1237fef50b.jpg
289cf98eaa53dd161fc3ac1237fef50b.jpg-97x45.jpg
289cf98eaa53dd161fc3ac1237fef50b.jpg-97x45.jpg
39a36a031ba85b39f02d68f84af45bdc.jpg
39a36a031ba85b39f02d68f84af45bdc.jpg
39a36a031ba85b39f02d68f84af45bdc.jpg-83x95.jpg
39a36a031ba85b39f02d68f84af45bdc.jpg-83x95.jpg
andrea.labhf Reply
Jun 22, 2010 00:00

Hi BrettG.

thanks for the detailed explanation.

Another related question:

If I don't add any cell but I change some filter values and then I recompile the project, does SigmaStudio change everytime the I2C address of blocks?

What I'd do is to make a stable project structure, export parameter.h, and then recompile with Sigmastudio without adding any blocks and without upgrading address map.

It is surprising that in a cheaper DSP like ADAU1701 are present Interface Register with a fixed address but in ADAU1446 Interface Register are pratically useless due to the fact that they have no fixed address.

Thanks

Andrea

ADIApproved Reply
Jun 22, 2010 00:00

If you are not adding, deleting, or changing anything in your signal flow, then your parameter addresses should not change from one compilation to the next. Changing parameter data will not change the addressing of the parameters.