主题中讨论的其他器件:TCA9539
我们的一个客户使用 MSPM0 通过 I2C 与 IO 扩展器 TCA9539通信。
一个操作是重复启动的写入数据读取数据操作。 下面是代码:
通用位8 I2C_CfgReadTransfer (Uint32* Register、Uint32 slave_address、uint8 RegisterAddress、uint8 *I2C_in_buffer、uint8 i2c_buffer_length )
{
T_I2C_MASTER_TRANSMIT_STATUS RETURE_VALUE = I2C_MASTER_ERR_BUFFER_OVERIFLOW;
UINT8接收计数器;
DL_I2C_enableController ReadOnTXEmpty ((I2C_Regs*)寄存器);
/*使用 Tx 数据填充 FIFO。 完整传输为8个字节、只有4个字节
* GPIO 端口扩展器需要*/
DL_I2C_fillControllerTXFIFO (((I2C_Regs*)寄存器)、&RegisterAddress、(uint16) C_I2C_REG_ADD_SIZE);
如果 ((C_I2C_RX_MAX_packet_size > i2c_buff_length)和(0u!= i2c_buff_length))
{
如果 ( C_I2C_MAX_7_BIT_ADD >= SLAVE_ADDRESS )
{
/*等待 I2C 进入空闲状态*/
同时 (!(DL_I2C_getControllerStatus ((I2C_Regs*))和 C_I2C_CONTROLLER_IN_IDLE_MASK));
/*此函数自动发送"开始+停止"*/
DL_I2C_startControllerTransfer (((I2C_Regs*) Register)、slave_address、DL_I2C_controller_direction_rx、(i2c_buff_length);
/*从目标接收所有字节*/
附录四
. } 突出显示的 API 调用是正确的、能够启动所需的操作。 但是、它不起作用、因为最后一个 API DL_I2C_startControllerTransfer ()清除(覆盖)先前的 DL_I2C_enableControllerReadOnTXEmpty ()调用设置的 RD_ON_TXEMPTY 位。 这是 DL_I2C_startControllerTransfer API 上的一个问题。