最后调通的中断部分代码如下:
void I2C1_EV_IRQHandler(void)
{
i2cEvent = I2C_GetLastEvent(I2C1);
i2cEventGroup[i2cEventCounter++] = i2cEvent;
switch (i2cEvent)
{
case I2C_EVENT_MASTER_MODE_SELECT: /* EV5 */
if(Direction == Transmitter)
{
I2C_Send7bitAddress(I2C1, destAddr, I2C_Direction_Transmitter);
}
else
{
I2C_Send7bitAddress(I2C1, destAddr, I2C_Direction_Receiver);
}
break;
case I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED:
I2C_SendData(I2C1, i2cSendBuf[i2cSendCount++]);
if(i2cSendLen == 1)
I2C_ITConfig(I2C1, I2C_IT_BUF, DISABLE);
break;
case I2C_EVENT_MASTER_BYTE_TRANSMITTING: /* Without BTF, EV8 */
if(i2cSendCount < i2cSendLen - 1)
{
I2C_SendData(I2C1, i2cSendBuf[i2cSendCount++]);
}
else
{
I2C_SendData(I2C1, i2cSendBuf[i2cSendCount++]);
I2C_ITConfig(I2C1, I2C_IT_BUF, DISABLE);
}
break;
case I2C_EVENT_MASTER_BYTE_TRANSMITTED: /* With BTF EV8-2 */
if(bSubMenu_Rd == 0)
{
I2C_GenerateSTOP(I2C1, ENABLE);
while(I2C_GetLastEvent(I2C1) == I2C_EVENT_MASTER_BYTE_TRANSMITTED)
;
wrTaskState = 3;
}
else
{
Direction = Receiver;
I2C_GenerateSTART(I2C1, ENABLE);
while(I2C_GetLastEvent(I2C1) == I2C_EVENT_MASTER_BYTE_TRANSMITTED)
;
}
I2C_ITConfig(I2C1, I2C_IT_BUF, ENABLE);
break;
/* Master Receiver -------------------------------------------------------*/
case I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED:
if(i2cRevLen == 1)
{
I2C_AcknowledgeConfig(I2C1, DISABLE);
I2C_GenerateSTOP(I2C1, ENABLE);
}
break;
case I2C_EVENT_MASTER_BYTE_RECEIVED:
i2cRevBuf[i2cRevCount++] = I2C_ReceiveData (I2C1);
if(i2cRevCount == (i2cRevLen - 1))
{
I2C_AcknowledgeConfig(I2C1, DISABLE);
I2C_GenerateSTOP(I2C1, ENABLE);
}
else if(i2cRevCount == i2cRevLen)
{
rdTaskState = 3;
}
else
;
break;
default:
break;
}
}
大家帮看看为什么不阻止产生多个I2C_EVENT_MASTER_BYTE_TRANSMITTED中断,
会有影响?