工具/软件:TI-RTOS
我已经在地址0xD0处设置了一个传感器 LTC4151、该地址连接到 Tiva 的 I2C1接口作为主器件。 我要附加一个简单的代码、在该代码中、我将希望从 LTC4151读取的寄存器的地址发送到从 LTC4151器件
我看到我使用的代码已经被其他人尝试过、但我无法读取数据
#define SLAVE_ADDRESS 0xD0 //地址从位7:1 D0移位1向右移动1位置为68
#define NUM_OF_I2CBYTES 2.
//
//
//主程序以配置和使用 I2C 主器件 I2C1
//
//
内部
main (空)
{
//设置120MHz 的系统时钟
//
ui32SysClock = SysCtlClockFreqSet ((SYSCTL_OSC_main | SYSCTL_USE_PLL | SYSCTL_XTAL_25MHz |
SYSCTL_CFG_VCO_480)、120000000);
//启用 GPIO 以配置 I2C 接口引脚
//
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOG);
//等待外设为编程做好准备
//
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOG));
//
//为 I2C1主接口配置引脚
//
GPIOPinConfigure (GPIO_PG0_I2C1SCL);
GPIOPinConfigure (GPIO_PG1_I2C1SDA);
GPIOPinTypeI2CSCL (GPIO_PORTG_BASE、GPIO_PIN_1);
GPIOPinTypeI2C (GPIO_PORTG_base、GPIO_PIN_0);
//
//停止时钟、复位和启用 I2C 模块
//在主函数中
//
SysCtlPeripheralDisable (SYSCTL_Periph_I2C1);
SysCtlPeripheralReset (SYSCTL_Periph_I2C1);
SysCtlPeripheralEnable (SYSCTL_Periph_I2C1);
//
//等待外设为编程做好准备
//
while (!SysCtlPeripheralReady (SYSCTL_Periph_I2C1));
//初始化和配置主模块
//
I2CMasterInitExpClk (I2C1_base、ui32SysClock、true);
//-------------------- 在读取前写入-------
I2CMasterSlaveAddrSet (I2C1_base、SLAVE_ADDRESS、false);//设置从器件地址并通过写操作启动
I2CMasterControl (I2C1_base、I2C_MASTER_CMD_SINGLE_SEND);//发送停止位
I2CMasterDataPut (I2C1_base、0x00);//put 0x00 -发送要从从从器件读取的寄存器地址
while (!(I2CMasterBusy (I2C1_base)));//等待事务结束
// while ((I2CMasterBusy (I2C1_base)));//等待事务结束
I2CMasterSlaveAddrSet (I2C1_base、SLAVE_ADDRESS、TRUE);//设置从器件地址并通过读取进行初始化
I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_Receive_start);//读取第一个字节
pui32DataRx[0]= I2CMasterDataGet (I2C1_base);
while (!(I2CMasterBusy (I2C1_base)));//等待事务结束
// while ((I2CMasterBusy (I2C1_base)));//等待事务结束
I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_Receive_finish);//读取第二个字节
pui32DataRx[1]= I2CMasterDataGet (I2C1_base);
while (!(I2CMasterBusy (I2C1_base)));//等待事务结束
// while ((I2CMasterBusy (I2C1_base)));//等待事务结束
while (1)
{
}
}//结束 main