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.

[参考译文] CCS/TLV320DAC32:TLV320DAC32 I2C输入 (读取,写入)

Guru**** 2348500 points
Other Parts Discussed in Thread: TLV320DAC32, TLV320ADC3101
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/586900/ccs-tlv320dac32-tlv320dac32-i2c-i-f-read-write

部件号:TLV320DAC32
主题中讨论的其他部件: TLV320ADC3101

工具/软件:Code Composer Studio

大家好

客户评估MSP 430F5242和TLV320DAC32之间的I2C通信。

为了检查其是否正确写入了登记簿,在写入后将读取相同地址的登记簿。

但是,似乎正在读取指定地址+1的寄存器内容。

下图显示了将0x55写入寄存器地址0x03,然后读取寄存器地址0x03,0x02时的波形。

因此,当读取寄存器地址0x02时,将输出0x55。

比较数据表P22的图24 (I2C写入)和图25 (I2C读取)似乎没有问题。

您是否知道书写或阅读是否有问题?

下面是MSP 430源代码。

reg = 0x03,num = 1

uchar I2C_READ (uchar reg,uchar num,uchar *buf)

uchar tx_buf[10];

tx_buf[0]=reg;

PTxData =(uchar *)&TX_buf[0];                    /* Tx缓冲区指针集*/

UCB1CTL1 |= UCSWRST;                       /*启用软件重置*/

UCB1CTL0 = UCMST + UCMODE_3 + UCWYNC; /* I2C主控,同步模式*/

UCB1CTL1 = UCSSEL_2 + UCSSWRST;           /*使用SMCLK,保持软件重置*/

UCB1BR0 = 80;                                 /* fSCL (8MHz)= SMCLK/80 = 100kHz (SMCLK/20 = 400kHz)*/

UCB1BR1 = 0;

UCB1I2CSA = I2C_ADR;                        /*从属地址*/

UCB1CTL1 &=~UCSWRST;                     /*清除软件重置,恢复操作*/

UCB1IE |= UCTXIE;                             /*启用TX中断*/

UCB1IE |= UCRXIE;                             /*启用RX中断*/

TM1M_CNT = 200;                              /*超时*/

FI2C_IRQ =关闭;                                /*中断*/

PRxData =(uchar *) buf;                          /* Rx缓冲区指针集*/

RXByteCtr = 0;

TXByteCtr = 1;

同时(UCB1CTL1和UCTXSTP);                  //确保停止条件已发送

UCB1CTL1 || UCTR + UCTXSTT;                 // I2C TX,启动条件

同时(1)

如果(FI2C_IRQ == ON)中断;

如果(TM1M_CNT ==0)转到TM_ERR;

}

FI2C_IRQ =关闭;                                 /*中断*/

//接收过程

RXByteCtr = 1;

同时(UCB1CTL1和UCTXSTP);                   //确保停止条件已发送

UCB1CTL1 &=~UCTR;                           //清除UCTR

UCB1CTL1 || UCTXSTT;                          // I2C启动条件

期间(UCB1CTL1和UCTXSTT);                    //开始条件已发送?

UCB1CTL1 || UCTXSTP;                          // I2C停止条件

同时(1)

如果(FI2C_IRQ == ON)中断;

如果(TM1M_CNT ==0)转到TM_ERR;

}

返回正常;

tm_err:

SetResponse (((uchar *)"TM err");

返回错误;/*错误*/

}

#pragma vector = USI_B1_Vector

__interrupt void USI_B1_ISR(void)

SWITCH(__EIV_IN_RANGE(UCB1IV,12))

案例0:中断;                            /*矢量0:无中断*/

案例2:中断;                            /*矢量2:ALIFG */

案例4:中断;                            /*矢量4:NACKIFG */

案例6:中断;                            /*向量6:STTIFG */

案例8:中断;                            /*矢量8:STPIFG */

案例10:                                 /*矢量10:RXIFG */

案例12:                                 /*矢量12:TXIFG */

IF (RXByteCtr == 1)

{//主中继器接收?

*PRxData = UCB1RXBUF;       //获取RX数据

FI2C_IRQ =打开;                /*中断*/

}

否则

{//主传输

IF (TXByteCtr)                   //检查TX字节计数器

UCB1TXBUF =* PTxData;        //加载TX缓冲区

TXByteCtr                    // Decrement TX字节计数器

}
否则

UCB1CTL1 || UCTXSTP;        // I2C停止条件

UCB1IFG &=~UCTXIFG;         //清除USI_B0 TX int标志

FI2C_IRQ =打开;                 /*中断*/

}

}

中断;

默认:中断;

}

}

它能够使用与连接到相同I2C总线的TLV320ADC3101相同的功能正常读写...

请进行注释,以便它可以与TLV320DAC32正常通信。

此致,

Takashi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Takashi:

    这很可能是某种时间问题。
    是否有办法增加重复开始前的时间?

    此致,
    Ivan Salazar
    德州仪器(TI)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好Ivan:

    感谢您的回复。

    添加的客户在使用以下内容重复开始前等待。

    1.在I2C 100kHz咔嗒声下测试重复启动的延迟时间(从1到250 us)

    2.在I2C 10kHz时钟上测试重复启动的延迟时间,从1到250 us

    3.在I2C 400kHz时钟下测试重复启动的延迟时间,从1到250 us

    但是,I2C读取的结果没有改变,读取另一个地址的寄存器。

    下图显示插入I2C 100kHz和110us等待时的波形。

    在重复开始之前,我应该等待多长时间?

    还有其他可能的原因吗?

    此致,

    Takashi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    高桥

    您是否有机会使用不同的TLV320DAC32 IC尝试此功能? 只是为了验证这是否是单个设备的问题。

    此致,
    Ivan Salazar
    音频应用工程师-低功率音频和执行器
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Lavan,

    我也是同样的现象。
    我使用Win-7 PC。
    如果将PC从Win-7更改为Win-XP,我的问题要解决吗?

    此致,
    ACGUY