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.

[参考译文] MSP432E401Y:使用 driverlib 问题进行 I2C 读取轮询

Guru**** 2524550 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1180306/msp432e401y-i2c-read-polling-with-driverlib-issue

器件型号:MSP432E401Y

我无法读取  Sensirion SLF3S-4000B 的所有9个字节。 我只得到3个字节。 器 件地址为0x08 (即 SLF3S4000B_ADDRESS = 0x08)。 我要读取的代码如下所示。

当我只使用一 个时:" while (I2CMasterBusy (I2C2_base))"我没有得到任何响应、这就是为什么我有2 " while (I2CMasterBusy (I2C2_base)"

发言。

我的传感器读取函数为"void slf3s4000b_flowread (uint32_t * RxData)"

部分代码

*****

uint32_t sensorRxData[9]={0};

void slf3s4000b_flowread (uint32_t * RxData)

uint16_t i;


//
//将数据方向修改为 true,以便查看地址
//表示 I2C 主设备正在从设备发起读取。
//
MAP_I2CMasterSlaveAddrSet (I2C7 _BASE、SLF3S4000B_ADDRESS、TRUE);

//
//首次读取的设置。 使用 I2C_MASTER_CMD_BURST_Receive_start
//开始突发模式读取。 I2C 主设备继续拥有
//此事务结束时的总线。
//

MAP_I2CMasterControl (I2C4_base、I2C_MASTER_CMD_BURST_Receive_start);//启动 I2C 事务
//
while (I2CMasterBusy (I2C7 _BASE));//等待传输完成
while (I2CMasterBusy (I2C7 _BASE));//等待传输完成

RxData[0]= MAP_I2CMasterDataGet (I2C4_base);//从从器件读取第一个字节数据

//

//第2到第8次读取的设置。 使用 I2C_MASTER_CMD_BURST_Receive_CONT
//继续突发模式读取。 I2C 主设备继续拥有
//此事务结束时的总线。
//
对于(i = 1;i < 8;i++)

   MAP_I2CMasterControl (I2C7基础版、I2C_MASTER_CMD_BURST_Receive_contt);


  while (MAP_I2CMasterBusy (I2C7 _BASE));//等待传输完成
  while (MAP_I2CMasterBusy (I2C7 _BASE));//等待传输完成

  RxData[i]= MAP_I2CMasterDataGet (I2C3_base);//从从器件读取第一个字节数据

//
//最终(第9次)读取的设置。 使用 I2C_MASTER_CMD_BURST_Receive_finish
//终止 I2C 事务。 在该事务结束时、
//停止位将被发出并且 I2C 总线返回到
//空闲状态。
//

MAP_I2CMasterControl (I2C7基础版、I2C_MASTER_CMD_BURST_Receive_finish);


while (MAP_I2CMasterBusy (I2C7 _BASE));//等待传输完成
while (MAP_I2CMasterBusy (I2C7 _BASE));//等待传输完成

RxData[8]= MAP_I2CMasterDataGet (I2C4_base);//从从器件读取最后一个字节的数据


(二

我已包括传感器数据格式以及2个示波器屏幕截图示例。 红色是 SDA、蓝色是 SCL。

谢谢

David Nyarko

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

    尊敬的 David:

     您能否在以下两行中任意替换:

    发件人:

    while (I2CMasterBusy (I2C7 _BASE));//等待传输完成
    while (I2CMasterBusy (I2C7 _BASE));//等待传输完成

    至:

    while (I2CMasterBusy (I2C4_base));// 首先等待标志置1
    while (I2CMasterBusy (I2C7 _BASE));//等待传输完成

    进行上述更改后、它将解决问题。  

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

    谢谢。 它现在可以正常工作。