Thanks for your answer Mark.
I've already seen this code but thanks anyway.
I even contacted TI support but they only repeated what it is said on
their datasheets!
So I'll try to see how it really works now that i have access to the
"workstation"!
Mark Robinson <
[email protected]> wrote in message news:<
[email protected]>...
> phuture_project wrote:
> > I'm using the TMS320DM642 and need to configure the registers of a
> > video decoder thanks to the I2C module.
>
> Don't know if it helps, but since no-one else has replied, this is
> the code that TI use to talk to the SAA7115 on the DM642 EVM -
>
> #define I2CDELAY(iterations) { \
> volatile Int j; \
> for(j = 0; j < iterations; j ++); \
> }
> #define DELAY_TIME 1000
>
> static const I2C_Config EVM642VIDEOIIC_Config = {
> 0, /* master mode, i2coar; */
> 0, /* no interrupt, i2cimr; */
> (20-5), /* scl low time, i2cclkl; */
> (20-5), /* scl high time,i2cclkh; */
> 1, /* configure later, i2ccnt;*/
> 0, /* configure later, i2csar;*/
> 0x4620, /* master tx mode, */
> /* i2c runs free, */
> /* 8-bit data + NACK */
> /* no repeat mode */
> (75-1), /* 4MHz clock, i2cpsc */
> };
>
> void _IIC_write(I2C_Handle hI2C,
> Uint8 devAddress,
> Uint32 subAddress,
> Uint8 *data,
> Uint16 numBytes
> )
> {
> Int i;
> I2C_Config prevIICConfig;
>
> /* make sure handle is valid */
> if(hI2C == INV) {
> return;
> }
> /* Wait until bus is free */
> while (I2C_bb(hI2C));
> /* save old settings */
> I2C_getConfig(hI2C, &prevIICConfig);
> /* set I2C mode register */
> I2C_RSETH(hI2C, I2CMDR, EVM642VIDEOIIC_Config.i2cmdr);
> /* set I2C imr register */
> I2C_RSETH(hI2C, I2CIMR, EVM642VIDEOIIC_Config.i2cimr);
> /* configure the I2C slave address register */
> I2C_RSETH(hI2C, I2CSAR, devAddress);
> /* set I2C count register */
> I2C_RSETH(hI2C, I2CCNT, numBytes + 1);
> /* write the sub address */
> I2C_RSETH(hI2C, I2CDXR, subAddress);
> /* Generate start condition */
> I2C_start(hI2C);
> I2CDELAY(DELAY_TIME);
> /* write the data */
> for(i = 0; i < numBytes; i ++) {
> while(!I2C_xrdy(hI2C));
> I2C_writeByte(hI2C, *data ++);
> I2CDELAY(DELAY_TIME);
> }
> /* Generate stop condition */
> I2C_sendStop(hI2C);
> I2CDELAY(DELAY_TIME);
> /* Wait until bus is free */
> while (I2C_bb(hI2C));
> I2CDELAY(DELAY_TIME);
> /* now restore the previous I2C settings */
> /* set I2C mode register */
> I2C_RSETH(hI2C, I2CMDR, prevIICConfig.i2cmdr);
> /* set I2C imr register */
> I2C_RSETH(hI2C, I2CIMR, prevIICConfig.i2cimr);
> /* configure the I2C slave address register */
> I2C_RSETH(hI2C, I2CSAR, prevIICConfig.i2csar);
> /* set I2C count register */
> I2C_RSETH(hI2C, I2CCNT, prevIICConfig.i2ccnt);
> I2CDELAY(DELAY_TIME);
> }
>
> Cheers
>
> mark-r