#include "irqhandler.h"
#include "lib_iic.h"

uint8_t rxcnt;
uint8_t txcnt;

void NMI_IRQHandler(void)
{

}

void HardFault_IRQHandler(void)
{
    while (1)
    {
    }
}

void SVC_IRQHandler(void)
{

}

void PendSV_IRQHandler(void)
{

}

void SysTick_IRQHandler(void)
{
}

/***************************************************************
 函数名: void T16N3_IRQHandler(void)
 描  述：T16N3定时中断函数
 输入值：无
 输出值：无
 返回值：无
***************************************************************/
void T16N3_IRQHandler(void)
{

}

/***************************************************************
 函数名: void I2C0_IRQHandler(void)
 描  述：IIC中断函数
         用户需要高速传输时，尽量使用操作寄存器的方法
 输入值：无
 输出值：无
 返回值：无
***************************************************************/
void I2C0_IRQHandler(void)
{
    /* 收到起始位+地址匹配+发送应答位 */
    if (I2C_GetITStatus(I2C_IT_SR) == SET)
    {
        I2C_ClearITPendingBit(I2C_Clr_SR);

        if (I2C_GetRWMode() == I2C_Mode_Read)
        {
            txcnt = 0x0U;

            I2C_ClearITPendingBit(I2C_Clr_NA);
            I2C_ClearITPendingBit(I2C_Clr_TIDLE);
            I2C_ITConfig(I2C_IT_RB, DISABLE);
            I2C_ITConfig(I2C_IT_TB, ENABLE);
        }
        else if (I2C_GetRWMode() == I2C_Mode_Write)
        {
            rxcnt = 0x0U;

            I2C_ClearITPendingBit(I2C_Clr_NA);
            I2C_ClearITPendingBit(I2C_Clr_TIDLE);
            I2C_ITConfig(I2C_IT_RB, ENABLE);
            I2C_ITConfig(I2C_IT_TB, DISABLE);
        }
    }

    /* 接收中断 */
    if (I2C_GetITStatus(I2C_IT_RB) == SET)
    {
        g_buf[rxcnt++] = I2C_RecByte();
    }

    /* 发送中断 */
    if (I2C_GetITStatus(I2C_IT_TB) == SET)
    {
        if (I2C_GetFlagStatus(I2C_Flag_NA) != SET)
        {
            I2C_SendByte(g_buf[txcnt++]);
        }
    }

    /* 收到结束位 */
    if (I2C_GetITStatus(I2C_IT_SP) == SET)
    {
        I2C_ClearITPendingBit(I2C_Clr_SP);
        I2C_ClearITPendingBit(I2C_Clr_NA);

        I2C_ITConfig(I2C_IT_RB, DISABLE);
        I2C_ITConfig(I2C_IT_TIDLE, DISABLE);
    }
}
