AnsweredAssumed Answered

How to program the adau1772?

Question asked by ccyao on Jan 28, 2013
Latest reply on Feb 7, 2013 by ccyao

I use the ADAU1172 to connect with 4 analog/digital microphones. Both ADC_SDATA0 and DAC_SDAT are connected to a DSP and are operated in TDM4 mode.  Is it necessary to download program and paramater into the ADAU1772 or is simply to configure the control registers only?

 

In addition, how to read/write thoese control registers in burst mode?

I wrote a simple program to sequecially read thoese control registers via I2C bus but  I could only read one register once.

 

#define ACK                (0)

#define NACK              (0)

#define SLAVE_ADDR (0x3c<<1)

 

void i2c_start(void);

void i2c_stop(void);

unsigned char i2c_tx1byte(unsigned char txData);

unsigned char i2c_rx1byte(unsigned char Ack);

 

unsigned char ack[4];

unsigned char rcv[4];

 

void main(void)

{

  i2c_start();

  /* set address = 0x0041 */

  ack[0] = i2c_tx1byte(SLAVE_ADDR); // return ACK

  ack[1] = i2c_tx1byte(0x00);  // return ACK

  ack[2] = i2c_tx1byte(0x41);  // return ACK

 

  /* read two word */

  i2c_start(); //repeat start

  ack[3] = i2c_tx1byte(SLAVE_ADDR|0x01); //return ACK

  rcv[0] = i2c_tx1byte(ACK);   // return 0x05, same as the reset value

  rcv[1] = i2c_tx1byte(ACK);   // return 0xff, shoud be 0x00

  rcv[2] = i2c_tx1byte(ACK);   // return 0xff, should be 0x0f

  rcv[3] = i2c_tx1byte(NACK); // return 0xff, should be 0x00

  i2c_stop();

}

Outcomes