芯片:TM4C129ENCPDT
I2C初始化(应该没问题):
SysCtlClockFreqSet(SYSCTL_XTAL_24MHZ| SYSCTL_USE_PLL | SYSCTL_CFG_VCO_320,20000000);//系统时钟
SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C9); //I2C9时钟
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
GPIOPinTypeI2C(GPIO_PORTA_BASE,GPIO_PIN_1);//CAMERA_SDA
GPIOPinTypeI2CSCL(GPIO_PORTA_BASE,GPIO_PIN_0);//CAMERA_SCL
GPIOPinConfigure(0x00000002);//GPIO_PA0_I2C9SCL
GPIOPinConfigure(0x00000402);//GPIO_PA1_I2C9SDA
I2CMasterInitExpClk(I2C9_BASE,sysclock,false);// 100Khz传输
===========================================================================
I2C传输多位代码(有问题):
I2CMasterSlaveAddrSet(I2C9_BASE, slave_addr, false);//设备写入地址=0xD0,7位地址为0x68,这里填了7位地址
I2CMasterDataPut(I2C9_BASE, reg_addr);//寄存器地址
I2CMasterControl(I2C9_BASE, I2C_MASTER_CMD_BURST_SEND_START);
while(I2CMasterBusy(I2C9_BASE));
SysCtlDelay(1500);//问题
I2CMasterDataPut(I2C9_BASE, data);//数据
I2CMasterControl(I2C9_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH);
while(I2CMasterBusy(I2C9_BASE));
==========================================================================
我的操作是:给I2C设备地址为 0xD0 的0x6B寄存器 写入数据 0x00
0xD0 的0x19寄存器 写入数据 0x07
得出下图,可以看出在0x68和0x00之间有一小段延迟30us,而0x19和0x07之间是220us
问题1:为什么这里两段延迟不一样(可以先看下一个问题)
===================================================================================
第二张图,是我把上面的I2C传输多位数据代码中的 SysCtlDelay(1500); 去掉后得出来的
这次它把寄存器地址全丢了 没发送(原本的顺序是0xD0 0X6B 0X00,0xD0 0X19 0X70)
问题二:为什么会这样子,这代码根据数据手册P1416的程序框图写的(少写了error检查,感觉没关系)



