TI中文支持网
TI专业的中文技术问题搜集分享网站

TIVA TM4C123GXL的硬件IIC问题

调试硬件IIC一直出不来,做IIC读写的时候用示波器看SCL脚没有时钟波形(同样的脚,使用软件IIC时是有波形的),代码如下,还望帮我看下问题所在:

void hw_iic_Init(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C0);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
GPIOPinConfigure(GPIO_PB2_I2C0SCL);
GPIOPinConfigure(GPIO_PB3_I2C0SDA);
GPIOPinTypeI2C(GPIO_PORTB_BASE, GPIO_PIN_2 | GPIO_PIN_3);
GPIOPadConfigSet(GPIO_PORTB_BASE,GPIO_PIN_2,GPIO_STRENGTH_8MA,GPIO_PIN_TYPE_STD_WPU);
GPIOPadConfigSet(GPIO_PORTB_BASE,GPIO_PIN_3,GPIO_STRENGTH_8MA,GPIO_PIN_TYPE_OD); I2CMasterInitExpClk(I2C0_BASE, SysCtlClockGet(), false); //false:100kbps true:400kbps
I2CMasterEnable(I2C0_BASE);
}

void i2c_writebyte(uint8_t slave_addr,uint8_t reg_addr,uint8_t data)
{
I2CMasterSlaveAddrSet(I2C0_BASE, slave_addr, false); 
I2CMasterDataPut(I2C0_BASE, reg_addr);
I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_SINGLE_SEND);
while(I2CMasterBusy(I2C0_BASE));
I2CMasterDataPut(I2C0_BASE, data);
I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_SINGLE_SEND);
while(I2CMasterBusy(I2C0_BASE));
}

uint8_t i2c_readbyte(uint8_t slave_addr,uint8_t reg_addr)
{
uint8_t data;
I2CMasterSlaveAddrSet(I2C0_BASE, slave_addr, false);
I2CMasterDataPut(I2C0_BASE, reg_addr);
I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_START);
while(I2CMasterBusy(I2C0_BASE));
I2CMasterSlaveAddrSet(I2C0_BASE, slave_addr, true);
I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_SINGLE_RECEIVE);
while(I2CMasterBusy(I2C0_BASE));
data = I2CMasterDataGet(I2C0_BASE);
return data;
}

Jin Zhang2:

把函数i2c_readbyte里面的  I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_START); 换成

I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_SINGLE_SEND);之后示波器能够看到时钟波形,但是读取到的数值一直是0xff

Jin Zhang2:

回复 Jin Zhang2:

向寄存器写入一个字节的函数也错误了,不能用I2C_MASTER_CMD_SINGLE_SEND,要用I2C_MASTER_CMD_BURST_SEND_START,否则发送的数据格式是错的

Disc George:

回复 Jin Zhang2:

学习了,多谢楼主~~

user5316406:

回复 Jin Zhang2:

你好 请问tm4的硬件IIC你那解决了吗  我现在用的硬件IIC读取20c02 数据 读出来一直0xff   写地址给0xa0,寄存器地址0x30  ,写入0x3c  读地址 0xa1  寄存器 0x30  读出一直是0xff  

user5978058:

回复 Jin Zhang2:

请问为什么地址需要右移,是针对这个代码的配置才需要右移吗?

user5978058:

回复 Jin Zhang2:

burst是执行重复写入嘛,但写数据是不是应该用finished

赞(0)
未经允许不得转载:TI中文支持网 » TIVA TM4C123GXL的硬件IIC问题
分享到: 更多 (0)