如何解决Tiva C TM4C1294 launchpad i2c with thermo 3 click register read value 0
您好,我们尝试通过 I2C 实现 Tiva 启动板和 Termo 3 click 之间的连接。 Termo 3 click 位于微型点击助推器包上,然后连接到 Tiva 启动板。这为我们提供了以下 i2c 引脚。
I2C7SDA / PD1
I2C7SCL / PD0
所以我们首先在 TivaWare™ Peripheral Driver Library [https://www.ti.com/lit/ug/spmu298e/spmu298e.pdf?] 上配置管脚
SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C7);
SysCtlPeripheralReset(SYSCTL_PERIPH_I2C7);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
GPIOPinConfigure(GPIO_PD0_I2C7SCL);
GPIOPinConfigure(GPIO_PD1_I2C7SDA);
GPIOPinTypeI2CSCL(GPIO_PORTD_BASE,GPIO_PIN_0);
GPIOPinTypeI2C(GPIO_PORTD_BASE,GPIO_PIN_1);
Thermo 3 CLick 基于 TMP102 温度传感器。 数据表:https://www.ti.com/lit/ds/symlink/tmp102.pdf Qoute 7.5 编程“默认情况下,TMP102 设备会在上电时读取温度。”
uint32_t sysClock_test_value = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ |
SYSCTL_OSC_MAIN |
SYSCTL_USE_PLL |
SYSCTL_CFG_VCO_480),16000000); // 16 MHZ
//Enable Master I2C 7
I2CMasterEnable(I2C7_BASE);
//set i2c clock on fast mode 400 kbps
I2CMasterInitExpClk(I2C7_BASE,sysClock_test_value,true);
//read line state,sda is bit 1,SCL is bit 0
uint32_t lineState = I2CMasterLineStateGet(I2C7_BASE); // returns 11 (binary)
//read slave adderess #define slave_address 0x4A (Hex)
// (1001010 in binary) address can be found in tmp102 datasheet table 4
I2CMasterSlaveAddrSet(I2C7_BASE,(uint8_t)slave_address,true);
lineState = I2CMasterLineStateGet(I2C7_BASE); // returns 11
//specify register to read from,register 0 because tmp102 table 6 and 7 write that register to Temperature (Read Only) is p1 = 0; p2 = 0 rest 0
//Qoute: "During a write command,P2 through P7 must always be '0'. Table 7 describes the pointer address of the registers available in the TMP102 device."
I2CMasterDataPut(I2C7_BASE,(uint8_t)0x0);
//start receiving from slave_address on the set register?
I2CMasterControl(I2C7_BASE,I2C_MASTER_CMD_BURST_RECEIVE_START);
while(I2CMasterBusy(I2C7_BASE));
//read register value
uint32_t lineState = I2CMasterLineStateGet(I2C7_BASE);// returns 11
uint32_t pulled_data = I2CMasterDataGet(I2C7_BASE); //returns 0
总是得到返回值0,谁能确认slave_address是否正确? 是否有必要设置一个寄存器地址,我们希望从中读取值? TMP102 发送 2 个字节,从最重要的字节开始,然后是最不重要的字节,我们应该使用 dataGet 更频繁吗?因为读取的寄存器值在循环中,并且值不会随时间变化。
大师 Tiva C TM4C1294 午餐垫。 奴隶 热 3 点击
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。