使用driverlib,我编写了一些与从属传感器通信的代码。 从属设备的地址是0xC0,通过写入命令字节并启动读取操作来读取指定的寄存器来交互。 下面是我写的内容:
#include "driverlib.h"
#define I2C_Pins GPIO端口P3,GPIO _PIN6 + GPIO _PIN7
#define USI_MODULE EUSCI_B2_BASE
#define slaver_address 0xC0
/* I2C主配置参数*/
const eUSI_I2C_MasterConfig i2cConfig =
{
EUSCI_B_I2C_CLOCKSOURCE_SMCLK,// SMCLK时钟源
300万,// SMCLK = 3MHz
EUSCI_B_I2C_SET_DATA_RATE_100KBPS,//所需的I2C时钟为100kHz
0,//无字节计数器阈值
EUSCI_B_I2C_NO_AUTO_STOP //无自动停止
};
内部主(无效)
{
WDT_A_HoldTimer();
/*为I2C选择端口1 -将引脚6,7设置为输入主模块功能,
*(UCB0SIMO/UCB0SDA,UCB0SOMI/UCB.S.)。
*/
GPIO_setAsPeripheralModuleFunctionInputPin (I2C_PINS,GPIO主要模块功能);
/*在100kHz的频率下将I2C主设备初始化到SMCLK,没有自动停止*/
I2C_initMaster(USCI_MODULE,&i2cConfig);
/*指定从属地址*/
I2C_setSlaveAddress (USI_MODULE,SLAVE_ADDRESS);
/*将主中继器设置为传输模式*/
I2C_setMode (USI_MODULE,EUSCI_B_I2C_Transmit_MODE);
/*启用I2C模块以启动操作*/
I2C_enableModule (USI_MODULE);
while (I2C_isBusBusy (USI_MODULE)== EUSCI_B_I2C_BUS_BUS_BUSY);
I2C_masterSendSingleByte (USI_MODULE,0x08);
I2C_masterReceiveSingle (USI_MODULE);
}
结果是发送0x80,代码无限期挂起,等待应答,但该地址没有从属设备,因此永远不会出现。 如果有人能帮助我理解为什么传输错误的从属地址,我将不胜感激。
谢谢!
基督教
