Other Parts Discussed in Thread: EK-TM4C123GXL
Thread 中讨论的其他器件:EK-TM4C123GXL
大家好、
在回调和阻塞模式下、i2c 传输的字节之间存在间隙、这是我遇到的问题。
当使用阻塞调用时、传输的各个部分之间存在8ms 的间隔。
我认为内部驱动程序会使用中断、因此即使任务切换了字节、也会正确发送。
我在使用 SPI 或 UART 驱动程序时没有遇到问题。
如果我使用仅具有单个任务的 Devkit 示例进行尝试、我没有任何问题。 传输不会分解成多个部分。
CCS 版本: 10.1.1.00004
Tirtos 版本: tirtos_tivac_2_16_00_08 (安装在 CCS 中,出于某种原因不是最新版本)
Tirtos 随 TivaWare_C_Series-2.1.71b 提供、但我使用 的是 TivaWare_C_Series-2.2.0.295。
下面是 i2c 线的一些捕获:
定制电路板阻断 i2c:

在同一传输中存在7.4ms 的较大间隙。
如果我使用回调模式、情况更糟、中间有50ms 的延迟:

如果有多个传输、则中间有多个裁切。 这些切割不是在转移之间、而是在转移中间。
有些交易不会被削减、但大多数交易会被削减。

下面是我初始化 i2c 驱动程序的方法。
//Init code
I2C_Params i2cParams;
I2C_Params_init(&i2cParams);
i2cParams.bitRate = I2C_100kHz;
I2C_Handle i2c = I2C_open(I2C0, &i2cParams);
if (i2c == NULL)
{
System_abort("Error Initializing I2C\n");
}
以下是我的转接呼叫:
//Transaction call
uint8_t buffer[] = {0x06,0x00,0x04,0xFF,0x07,0x00,0x05,0xFF};
I2C_Transaction transaction = { buffer, sizeof(buffer), NULL, NULL, 0x20 };
if(!I2C_transfer(i2c, &cfg_transaction))
{
System_printf("Problems sending i2c value.\n");
}
有人能帮我解决这个问题吗?