请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:TM4C123GH6PM “线程”中讨论的其它部件:TMP117
你(们)好
我想在我的微控制器上阅读 TI 温度传感器 TMP117的寄存器。 下图显示了所需的行为:
这是我的 init()函数。 当我看到 I2C 线路上的一些行为时,我猜它是有效的。
void I2C_init(void)
{
// Enable the I2C0 peripheral
MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C1);
I2CMasterEnable(I2C1_BASE);
SysCtlPeripheralReset(SYSCTL_PERIPH_I2C1);
SysCtlPeripheralReset(SYSCTL_PERIPH_I2C1);
// Wait for the I2C0 module to be ready.
while(!SysCtlPeripheralReady(SYSCTL_PERIPH_I2C1))
{
}
MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
// Configure the GPIO Pin Mux for PA6 for I2C1SCL
MAP_GPIOPinConfigure(GPIO_PA6_I2C1SCL);
MAP_GPIOPinTypeI2CSCL(GPIO_PORTA_BASE, GPIO_PIN_6);
// Configure the GPIO Pin Mux for PA7 for I2C1SDA
MAP_GPIOPinConfigure(GPIO_PA7_I2C1SDA);
MAP_GPIOPinTypeI2C(GPIO_PORTA_BASE, GPIO_PIN_7);
// Initialize Master and Slave
I2CMasterInitExpClk(I2C1_BASE, SysCtlClockGet(), false);
while(I2CMasterBusBusy(I2C1_BASE))
{
}
}
我希望使用以下代码:
- 发送从属地址
- 发送寄存器指针
- 读取两个字节
uint32_t I2C_readThisRegister()
{
uint8_t slaveAddress = 0b10010010;
uint32_t registerToRead = 0x00001111;
//------WRITE-Section----------------------------------------
I2CMasterSlaveAddrSet(I2C1_BASE, slaveAddress, false);
I2CMasterDataPut(I2C1_BASE, registerToRead);
I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_START);
while(I2CMasterBusBusy(I2C1_BASE))
{
}
//------READ-Section----------------------------------------
I2CMasterSlaveAddrSet(I2C1_BASE, slaveAddress, true); // set slave address
//read first Byte
I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_RECEIVE_CONT);
while(I2CMasterBusBusy(I2C1_BASE))
{
}
uint32_t msb=I2CMasterDataGet(I2C1_BASE);
//read second Byte
I2CMasterControl( I2C1_BASE, I2C_MASTER_CMD_BURST_RECEIVE_FINISH);
while(I2CMasterBusBusy(I2C1_BASE))
{
}
uint32_t lsb=I2CMasterDataGet(I2C1_BASE);
return ((msb << 8)| lsb);
}
示波器显示仅执行写入零件。 时钟在读取部分不工作。 看起来读取部分被忽略。
我已经尝试过不同的变量,但我无法读取这些值。
PS:示例中的地址不是特别有用。 一旦 I2C 接口工作正常,我会添加代码,以便它能正确驱动传感器。
感谢你的帮助! 非常感谢!
此致
爱国者