主题中讨论的其他器件:HALCOGEN
我想创建一个通用中断驱动的 I2C 读取函数、并且已经完成以下操作:
我调用 i2cInit (),它为 I2C_2采用以下 HALCoGen 设置:
- 启用 I2C2驱动器
- I2C2:
- 启用主模式
- TX/TX Rx:发送器
- 添加模式:7_bit_AMODE
- 位计数:8_bit
- 启用 ICRRDY
- 启用 ICXRDY
- I2C 引脚模式:I2C 功能
- 引脚多路复用:
- 检查 I2C2 (SDA @ G17且 SCL @ G16)
我的读取函数会进行以下调用:
UINT8通道;
i2cSetSlaveAdd ( i2cREG2、SLAVE_ADDR);
i2cSetDirection ( i2cREG2, I2C_TRANSMIT );
i2cSetCount ( i2cREG2, 2 );
i2cSetMode ( i2cREG2, I2C_MASTER );
i2cSetStop( i2cREG2 );
i2cSetStart( i2cREG2 );
i2cSend ( i2cREG2、1U、REGISTER_ADDR );
while ( i2cIsBusy ( i2cREG2 )== true );
while ( i2cIsStopDetected ( i2cREG2 )== true );
i2cClearSCD( i2cREG2 );
i2cSetSlaveAdd (i2cREG2、SLAVE_ADDR);
i2cSetDirection ( i2cREG2, I2C_receiver );
i2cSetCount ( i2cREG2, 2u );
i2cSetMode ( i2cREG2, I2C_MASTER );
i2cSetStart( i2cREG2 );
i2cReceive(i2cREG2, 1u,&ch );
i2cClearSCD( i2cREG2 );
我的 i2cNotification 函数如下:
void i2cNotification (i2cbase_t *i2c,uint32标志)
{
UINT8通道;
if ( FLAG & I2C_RX_INT )
{
i2cReceive(i2cREG2, 1,&ch );
}
}
在 HDK 上运行上述代码后、中断服务例程(ic2Notification)会从 BME280传感器接收到4个字节(错误地为零)、我请求其 ID 为一个字节!
有人能评论一下我上面的函数调用序列中的错误吗?
i2cSetCount 值应该是多少? 它是否需要考虑从器件地址?
谢谢你。




