TIva C系列I2C接口问题

时间:2014-05-01 08:41:21

标签: c i2c

我正在尝试将我的Tiva C系列与Sparkfun分线板,IMU数字组合板 - 6自由度ITG3200 / ADXL345连接,我遇到了I2C接口问题。

目前这是我的代码:

#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "driverlib/i2c.h"

uint8_t SLAVE_ADDRESS = 0x68;

uint32_t first_byte, second_byte, temperature, result;

void i2c_setup(void) {


//Enable the I2C Module
SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C2);

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);

//Wait at least 5 clock cycles
SysCtlDelay(2);

//Configure SDA and SCL
GPIOPinConfigure(GPIO_PE4_I2C2SCL);

GPIOPinConfigure(GPIO_PE5_I2C2SDA);

//Wait at least 5 clock cycles
SysCtlDelay(2);

//Set PE4 as SCL
GPIOPinTypeI2CSCL(GPIO_PORTE_BASE, GPIO_PIN_4);

//Set PE5 as SDA
GPIOPinTypeI2C(GPIO_PORTE_BASE, GPIO_PIN_5);

//Configure Master,
I2CMasterInitExpClk(I2C2_BASE, SysCtlClockGet(), false);

}

uint32_t i2c_read() {

I2CMasterSlaveAddrSet(I2C2_BASE, SLAVE_ADDRESS, false);

I2CMasterDataPut(I2C2_BASE, 0x1A);

I2CMasterControl(I2C2_BASE, I2C_MASTER_CMD_SINGLE_SEND);

while(I2CMasterBusBusy(I2C2_BASE)); //Loop until the bus is no longer busy

I2CMasterSlaveAddrSet(I2C2_BASE, SLAVE_ADDRESS, true );

I2CMasterControl(I2C2_BASE, I2C_MASTER_CMD_SINGLE_RECEIVE);

while(I2CMasterBusBusy(I2C2_BASE)); //Loop until the bus is no longer busy

first_byte = I2CMasterDataGet(I2C2_BASE);

return first_byte;

}

void setup()
{
Serial.begin(9600);
i2c_setup();
}

void loop()
{

int test = i2c_read();
Serial.println(test);
delay(1000);
}

我正在使用Energia测试我的程序,当我尝试从指定的寄存器读取时,我得到相同的结果,无论我选择哪个寄存器,结果总是十进制229(这是加速度计的设备地址)。

有人可以指出我正确的方向,我一直在看我的代码很长一段时间但仍然不知道什么是错的......

谢谢!

1 个答案:

答案 0 :(得分:1)

我浏览了你的代码,一切似乎都好。显然,如果你得到回应,有些事情是正确的。但就像马丁所说的那样,在不存在问题的情况下解决问题有点困难。您可以尝试使用其他I2C命令之一来代替写入0x1A吗?另外如果跳线连接到VDD,你的地址应该是0x69(十进制105)你确定它是0x68吗?

我查看了sparkfuns网站上的文档,他们提供了以下列表 命令。

 char WHO_AM_I = 0x00;
 char SMPLRT_DIV= 0x15;
 char DLPF_FS = 0x16;
 char GYRO_XOUT_H = 0x1D;
 char GYRO_XOUT_L = 0x1E;
 char GYRO_YOUT_H = 0x1F;
 char GYRO_YOUT_L = 0x20;
 char GYRO_ZOUT_H = 0x21;
 char GYRO_ZOUT_L = 0x22;

GL希望一切顺利。有意义买我自己玩的所以请留意我!