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, I2C1_SLAVE_ADDRESS7, I2C_Direction_Transmitter);
}
else
{
I2C_Send7bitAddress(I2C1, I2C1_SLAVE_ADDRESS7, 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_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 = 1;
}
else
{
Direction = Receiver;
// I2C_ITConfig(I2C1, I2C_IT_BUF, ENABLE);
I2C_GenerateSTART(I2C1, ENABLE);
}
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);
// I2C_ITConfig(I2C1, I2C_IT_BUF, DISABLE);
}
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 = 1;
}
else
;
break;
default:
break;
}
}
/**
void Write24C01(void)
{
u8 i;
i2cSendLen = 4;//·???4×???????
i2cSendCount = 0;
bSubMenu_Rd = 0;
Direction = Transmitter;
i2cSendBuf[0] = I2C_ADDRESS7;
for(i = 1;i < 5;i++)
i2cSendBuf = i;
while((I2C1 -> SR2 & 0x02))//????
;
I2C_GenerateSTART(I2C1, ENABLE);
}
void Read24C01(void)
{
i2cSendLen = 1;//???·
i2cSendCount = 0;
i2cRevLen = 4;
i2cRevCount = 0;
Direction = Transmitter; //??·??????·
i2cSendBuf[0] = I2C_ADDRESS7;
bSubMenu_Rd = 1;
while((I2C1 -> SR2 & 0x02))
;
I2C_GenerateSTART(I2C1, ENABLE);
}
|