Other Parts Discussed in Thread: TCAL9539
器件型号: LAUNCHXL-F280049C
主题中讨论的其他器件: TCAL9539
我在 10ms ISR 内有 I2C 代码、在 25 次计数后有 250ms 的循环、在其中读取 ADC 数据。
我在 250ms 的循环中更改了 ADC 读取数据功能中的代码、之后得到了在 10ms 循环中的 I2C FIFO 超时。
以下代码是 I2C 读取数据代码:
uint8_t TCAL9539_ReadRegister (uint32_t base、uint8_t slaveAddress、uint8_t reg、uint8_t *I2Cstatus)
{
if (I2C_Error (base))
{
*I2Cstatus = I2CMCUError;
返回 0;
}
uint8_t data、i;
uint8_t tempI2Cdata[2]={0};
uint8_t 尝试= 0;
/* while (I2CisBusy (base)= 1)
{
Trymouse++;
DEVICE_DELAY_US (100);
IF(尝试>= 5)
{
*I2Cstatus=I2CBusyTimout;
//返回 0;
}
}*/
尝试= 0;
while (I2CgetStopConditionStatus (base)= 1)
{
Trymouse++;
DEVICE_DELAY_US (200);
IF(尝试>= 5)
{
*I2Cstatus=I2CStopTimout;
返回 0;
}
}
I2CentenableFIFO (BASE);
I2CsetConfig (BASE、I2C_CONTROLLER_SEND_MODE);
I2CsetSlaveAddress (base、slaveAddress);
I2CsetDataCount (base、1);
I2CputData (base、reg);
I2CsendStartCondition (BASE);
尝试= 0;
while (I2CgetTxFIFOStatus (base))
{
Trymouse++;
DEVICE_DELAY_US (200);
IF(尝试>= 5)
{
*I2Cstatus=I2CTxFifoTimout;
返回 0;
}
}
I2CsetConfig (BASE、I2C_CONTROLLER_RECEIVE_MODE);
I2CsetDataCount (base、2);
I2CsendStartCondition (BASE);
for (I=0;I<2;I++)
{
tempI2Cdata[i]= I2C_getData (base);
}
尝试= 0;
while (I2CgetRxFIFOStatus (base)!= I2C_FIFO_RX2)
{
Trymouse++;
DEVICE_DELAY_US (200);
IF(尝试>= 5)
{
*I2Cstatus = I2CRxFifoTimout;
返回 0;
}
}
I2CsendStopCondition(base);
尝试= 0;
while (I2CgetStopConditionStatus (base)= 0)
{
Trymouse++;
DEVICE_DELAY_US (200);
IF(尝试>= 5)
{
*I2Cstatus = I2CStopTimout;
返回 0;
}
}
DATA =(tempI2Cdata[0]& 0xFF)+((tempI2Cdata[1]& 0xFF)<< 8);
*I2Cstatus = I2CSuccess;
返回数据;//发送停止条件以结束写入阶段
}
以下代码为 ADC 读取数据函数:
更改前:
浮点 GetNT1000TempValue (float32_t SensorVoltage);
ChargerData.AMB = GetNT1000TempValueAMB (AMB、10000.0f、10000.0f);
更改后:
Float GetNT1000TempValue (float32_t SensorVoltage、Float RPULL、Float R01、Float Gain、float pullupvolt);
ChargerData.AMB = GetNT1000TempValue (AMB、10000.0f、10000.0f、1.0f、3300.0f);
上面的代码是唯一一项更改、我添加了 4 个浮点变量、并在 I2C 状态中导致了 I2CRxFifoTimout 、在更改之前、我们在 10ms 循环中获得了 I2C 状态为 I2CSucess。
我们的栈大小为 0x400、我们只使用了 0x200、从映射文件中我们需要知道这一点。
我们需要知道为什么会发生这种情况以及原因。 谢谢你。

