Other Parts Discussed in Thread: C2000WARE
1.文件路径:\ti\c2000\C2000Ware_MotorControl_SDK_5_04_00_00\c2000ware\driverlib\f28p65x\examples\c28x\i2ci2cLib_FIFO_polling.c
line 51
uint16_t I2CBusScan(uint32_t base, uint16_t *pAvailableI2C_targets)
开发板上就一个eeprom,还需要调用这个函数吗?
line 122
while(status & (attemptCount <= I2C_Params->NumOfAttempts))
这里 & 是不是应该用 && ?
line 190
uint16_t I2C_ControllerTransmitter(struct I2CHandle *I2C_Params)
{
uint16_t status, attemptCount;
uint32_t base = I2C_Params->base;
I2C_disableFIFO(base);
I2C_enableFIFO(base);
status = I2C_TransmittargetAddress_ControlBytes(I2C_Params);
if(status)
{
return status;
}
I2C_setDataCount(base, (I2C_Params->NumOfAddrBytes + I2C_Params->NumOfDataBytes));
I2C_setFIFOInterruptLevel(base, I2C_FIFO_TXEMPTY, I2C_FIFO_RXFULL);
I2C_enableInterrupt(base, I2C_INT_TXFF);
uint16_t numofSixteenByte = (I2C_Params->NumOfDataBytes) / I2C_FIFO_LEVEL;
uint16_t remainingBytes = (I2C_Params->NumOfDataBytes) % I2C_FIFO_LEVEL;
uint16_t i,count = 0,buff_pos=0;
while(count < numofSixteenByte)
{
for(i=1;i<=I2C_FIFO_LEVEL;i++)
{
I2C_putData(base, I2C_Params->pTX_MsgBuffer[buff_pos++]);
}
attemptCount = 1;
while(I2C_getTxFIFOStatus(base) && attemptCount <= 9 * (I2C_FIFO_LEVEL + 2U))
{
status = handleNACK(base);
if(status)
{
return status;
}
attemptCount++;
DEVICE_DELAY_US(I2C_Params->Delay_us);
}
count++;
}
for (i=0; i < remainingBytes; i++)
{
I2C_putData(base, I2C_Params->pTX_MsgBuffer[buff_pos++]);
}
attemptCount = 1;
while(I2C_getTxFIFOStatus(base) && attemptCount <= 9 * (remainingBytes + 2U))
{
status = handleNACK(base);
if(status)
{
return status;
}
attemptCount++;
DEVICE_DELAY_US(I2C_Params->Delay_us);
}
I2C_sendStopCondition(base);
attemptCount = 1;
while(I2C_getStopConditionStatus(base) && attemptCount <= 3U)
{
DEVICE_DELAY_US(I2C_Params->Delay_us);
attemptCount++;
}
return SUCCESS;
}
这个连续写入的函数,这个页写逻辑和我之前使用的eeprom都不同如果写入的起始地址不是0或者16的整数倍,那么第一次页写就不能写16个字节, 因为超过一页就要重新启动下一个页写。
demo中不考虑页大小是因为这个eeprom特殊?可以连续页写?