请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F28379D 我希望执行以下步骤来读取数据:
但我发送地址两次、我不想这样做:
以下是我的示波器图像:
代码片段如下所示:
I2caRegs.I2CMDR.bit.IRS = 1; //复位 I2C //确保 I2C 不忙且已停止 while (I2cRegs.I2CSTR.bit.BB = 1); //忙循环 I2caRegs.I2CSTR.bit.SCD = 1; //清除 SCD 位(停止条件位) while (I2caRegs.I2CMDR.bit.STP==1); //停止位循环 I2caRegs.I2CSAR.ALL = 0x00; // I2C 从地址 I2caRegs.I2CCNT = 1; //假设寄存器地址为一个字节 while (I2cRegs.I2CSTR.bit.BB = 1); //仍然忙? //I2caRegs.I2CMDR.ALL = 0x2620; //开始、无停止位、主器件、TX、复位 I2C 00100110 I2caRegs.I2CMDR.bit.NACKMOD = 0; // NACK 模式位 I2caRegs.I2CMDR.bit.FREE = 0; //挂起时停止 I2C I2caRegs.I2CMDR.bit.STT = 1; //起始条件位 I2caRegs.I2CMDR.bit.STP= 0; //停止条件位 I2caRegs.I2CMDR.bit.MST = 1; //主模式 I2caRegs.I2CMDR.bit.TRX = 1; //发送器模式 I2caRegs.I2CMDR.bit.XA = 0; // 7位寻址模式 I2caRegs.I2CMDR.bit.RM = 0; //非重复模式 I2caRegs.I2CMDR.bit.DLB = 0; //数字回送模式被禁用 I2caRegs.I2CMDR.bit.IRS = 1; //启用 I2C 模块 I2caRegs.I2CMDR.bit.STB = 0; // I2C 模块不处于起始字节模式 I2caRegs.I2CMDR.bit.FDF = 0; //禁用自由数据格式模式 I2caRegs.I2CMDR.bit.BC = 0; //每个数据字节8位 while (I2cRegs.I2CSTR.bit.XRDY = 0); //在巴士免费前什么也不做 I2caRegs.I2CDXR.ALL = 0x01; //传感器的寄存器地址(1个字节) while (!I2cRegs.I2CSTR.bit.ARDY); //准备好了吗? //I2caRegs.I2CMDR.ALL = 0x2C20; //开始、CNT = 0时的停止位、主器件、Rx、复位 I2C 00101100 I2caRegs.I2CMDR.bit.NACKMOD = 0; // NACK 模式位 I2caRegs.I2CMDR.bit.FREE = 0; //挂起时停止 I2C I2caRegs.I2CMDR.bit.STT = 1; //起始条件位 I2caRegs.I2CMDR.bit.STP= 1; //停止条件位 I2caRegs.I2CMDR.bit.MST = 1; //主模式 I2caRegs.I2CMDR.bit.TRX = 0; //接收器模式 I2caRegs.I2CMDR.bit.XA = 0; // 7位寻址模式 I2caRegs.I2CMDR.bit.RM = 0; //非重复模式 I2caRegs.I2CMDR.bit.DLB = 0; //数字回送模式被禁用 I2caRegs.I2CMDR.bit.IRS = 1; //启用 I2C 模块 I2caRegs.I2CMDR.bit.STB = 0; // I2C 模块不处于起始字节模式 I2caRegs.I2CMDR.bit.FDF = 0; //禁用自由数据格式模式 I2caRegs.I2CMDR.bit.BC = 0; //每个数据字节8位 I2caRegs.I2CCNT = 1; //只读取一个字节数据 if (I2caRegs.I2CSTR.bit.nack = 1) { I2caRegs.I2CSTR.All = I2C_CLR_Nack_bit;// 0x0002 } I2caRegs.I2CMDR.bit.STP= 1; // CNT=0时停止位 while (!I2cRegs.I2CSTR.bit.SCD); //是否检测到停止位? DATA[0]= I2caRegs.I2CDRR.ALL; //读取一个字节数据
那么、如果可能的话、是否有办法可以只写入8位、然后成为不发送地址的主接收器?
谢谢
Sagar