/** ##########################################################################
**     Filename  : uart_cfg.c
**     Project   :
**     Module    :
**     Processor :
**     Version   : 1.0
**     Compiler  :
**     Date/Time :
**     Abstract  :
**     Contents  :
**     Note      :  uart底层
**
**     (c) Copyright dmdz Co.,Ltd
**  --------------------------------------------------------------------------
**               R E V I S I O N   H I S T O R Y
**  --------------------------------------------------------------------------
**  Date       Ver   Author             Description

**  -20230602-  --V1.0--  --mingyea---  --修改--

** #########################################################################*/

#include "uart.h"

#ifdef USART_0_EN
FL_UART_InitTypeDef g_UART0_InitStruct =
{
    FL_CMU_UART0_CLK_SOURCE_APBCLK,
    19200u,  /* 波特率 */
    FL_UART_DATA_WIDTH_8B, /* 数据位数 */
    FL_UART_STOP_BIT_WIDTH_1B,  /* 停止位 */
    FL_UART_PARITY_NONE,  /* 奇偶校验 */
    FL_UART_DIRECTION_RX, /* 接收-发送使能 */
};
#endif


#ifdef USART_1_EN
FL_UART_InitTypeDef g_UART1_InitStruct =
{
    FL_CMU_UART1_CLK_SOURCE_APBCLK,
    9600u,  /* 波特率 */
    FL_UART_DATA_WIDTH_8B, /* 数据位数 */
    FL_UART_STOP_BIT_WIDTH_1B,  /* 停止位 */
    FL_UART_PARITY_NONE,  /* 奇偶校验 */
    FL_UART_DIRECTION_RX, /* 接收-发送使能 */
};
#endif


#ifdef USART_3_EN
FL_UART_InitTypeDef g_UART3_InitStruct =
{
    0u, //默认 apbclk
    9600u,  /* 波特率 */
    FL_UART_DATA_WIDTH_8B, /* 数据位数 */
    FL_UART_STOP_BIT_WIDTH_1B,  /* 停止位 */
    FL_UART_PARITY_NONE,  /* 奇偶校验 */
    FL_UART_DIRECTION_RX, /* 接收-发送使能 */
};
#endif

#ifdef USART_4_EN
FL_UART_InitTypeDef g_UART4_InitStruct =
{
    0u, //默认 apbclk,
    9600u,  /* 波特率 */
    FL_UART_DATA_WIDTH_8B, /* 数据位数 */
    FL_UART_STOP_BIT_WIDTH_1B,  /* 停止位 */
    FL_UART_PARITY_NONE,  /* 奇偶校验 */
    FL_UART_DIRECTION_RX, /* 接收-发送使能 */
};
#endif

#ifdef USART_5_EN
FL_UART_InitTypeDef g_UART5_InitStruct =
{
    0u, //默认 apbclk,
    19200u,  /* 波特率 */
    FL_UART_DATA_WIDTH_8B, /* 数据位数 */
    FL_UART_STOP_BIT_WIDTH_1B,  /* 停止位 */
    FL_UART_PARITY_NONE,  /* 奇偶校验 */
    FL_UART_DIRECTION_TX_RX, /* 接收-发送使能 */
};
#endif

#ifdef USART_0_EN
void usart_0_gpio_init(void)
{
    FL_GPIO_InitTypeDef GPIO_InitStruct = {0};
    /* PA13:UART0-RX   PA14:UART0-TX */
    GPIO_InitStruct.pin        = FL_GPIO_PIN_13 | FL_GPIO_PIN_14;
    GPIO_InitStruct.mode       = FL_GPIO_MODE_DIGITAL;
    GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStruct.pull       = FL_ENABLE;
    GPIO_InitStruct.remapPin   = FL_DISABLE;
    FL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
#endif

#ifdef USART_1_EN
void usart_1_gpio_init(void)
{
    FL_GPIO_InitTypeDef GPIO_InitStruct = {0};
    /* PC2:UART1-RX   PC3:UART1-TX */
    GPIO_InitStruct.pin        = FL_GPIO_PIN_2 | FL_GPIO_PIN_3;
    GPIO_InitStruct.mode       = FL_GPIO_MODE_DIGITAL;
    GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_OPENDRAIN;
    GPIO_InitStruct.pull       = FL_ENABLE;
    GPIO_InitStruct.remapPin   = FL_DISABLE;
    FL_GPIO_Init(GPIOC, &GPIO_InitStruct);
}
#endif

#ifdef USART_3_EN
void usart_3_gpio_init(void)
{
    FL_GPIO_InitTypeDef GPIO_InitStruct = {0};
    /* PB0:UART3-RX   PB1:UART3-TX */
    GPIO_InitStruct.pin         = FL_GPIO_PIN_0 | FL_GPIO_PIN_1;
    GPIO_InitStruct.mode        = FL_GPIO_MODE_DIGITAL;
    GPIO_InitStruct.outputType  = FL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStruct.pull        = FL_DISABLE;
    GPIO_InitStruct.remapPin    = FL_ENABLE;
    FL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
#endif

#ifdef USART_4_EN
void usart_4_gpio_init(void)
{
    FL_GPIO_InitTypeDef GPIO_InitStruct = {0};
    /* PB2:UART4-RX   PB3:UART4-TX */
    GPIO_InitStruct.pin          = FL_GPIO_PIN_2 | FL_GPIO_PIN_3;
    GPIO_InitStruct.mode         = FL_GPIO_MODE_DIGITAL;
    GPIO_InitStruct.outputType   = FL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStruct.pull         = FL_ENABLE;
    GPIO_InitStruct.remapPin     = FL_DISABLE;
    FL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
#endif

#ifdef USART_5_EN
void usart_5_gpio_init(void)
{
    FL_GPIO_InitTypeDef GPIO_InitStruct = {0};
   /* PD0:UART5-RX   PD1:UART5-TX */
    GPIO_InitStruct.pin            = FL_GPIO_PIN_0 | FL_GPIO_PIN_1;
    GPIO_InitStruct.mode           = FL_GPIO_MODE_DIGITAL;
    GPIO_InitStruct.outputType     = FL_GPIO_OUTPUT_OPENDRAIN;
    GPIO_InitStruct.pull           = FL_ENABLE; 
    GPIO_InitStruct.remapPin       = FL_DISABLE;
    FL_GPIO_Init(GPIOD, &GPIO_InitStruct);
}
#endif

#ifdef USART_0_EN

/**
  * @brief  UART0中断函数
  * @param  void
  * @retval void
  */
void UART0_IRQHandler(void)
{
    uint8_t tmp08;

    /* 接收中断处理 */
    if((FL_ENABLE == FL_UART_IsEnabledIT_RXBuffFull(UART0))
            && (FL_SET == FL_UART_IsActiveFlag_RXBuffFull(UART0)))
    {
        /* 中断转发接收到的数据 */
        tmp08 = FL_UART_ReadRXBuff(UART0); /* 接收中断标志可通过读取rxreg寄存器清除 */
        FL_UART_WriteTXBuff(UART0, tmp08);
    }

    /* 发送中断处理 */
    if((FL_ENABLE == FL_UART_IsEnabledIT_TXShiftBuffEmpty(UART0))
            && (FL_SET == FL_UART_IsActiveFlag_TXShiftBuffEmpty(UART0)))
    {
        /* 发送中断标志可通过写txreg寄存器清除或txif写1清除 */
        /* 发送指定长度的数据 */
        if(UARTxOp.TxOpc < UARTxOp.TxLen)
        {
            FL_UART_WriteTXBuff(UART0, UARTxOp.TxBuf[UARTxOp.TxOpc]); /* 发送一个数据 */
            UARTxOp.TxOpc++;
        }

        FL_UART_ClearFlag_TXShiftBuffEmpty(UART0);    /* 清除发送中断标志 */
    }
}

#endif

#ifdef USART_1_EN

/**
  * @brief  UART1中断函数
  * @param  void
  * @retval void
  */
void UART1_IRQHandler(void)
{
    uint8_t tmp08;

    /* 接收中断处理 */
    if((FL_ENABLE == FL_UART_IsEnabledIT_RXBuffFull(UART1))
            && (FL_SET == FL_UART_IsActiveFlag_RXBuffFull(UART1)))
    {
        /* 中断转发接收到的数据 */
        tmp08 = FL_UART_ReadRXBuff(UART1); /* 接收中断标志可通过读取rxreg寄存器清除 */
        FL_UART_WriteTXBuff(UART1, tmp08);
    }

    /* 发送中断处理 */
    if((FL_ENABLE == FL_UART_IsEnabledIT_TXShiftBuffEmpty(UART1))
            && (FL_SET == FL_UART_IsActiveFlag_TXShiftBuffEmpty(UART1)))
    {
        /* 发送中断标志可通过写txreg寄存器清除或txif写1清除 */
        /* 发送指定长度的数据 */
        if(UARTxOp.TxOpc < UARTxOp.TxLen)
        {
            FL_UART_WriteTXBuff(UART1, UARTxOp.TxBuf[UARTxOp.TxOpc]); /* 发送一个数据 */
            UARTxOp.TxOpc++;
        }

        FL_UART_ClearFlag_TXShiftBuffEmpty(UART1);  /* 清除发送中断标志 */
    }
}

#endif

#ifdef USART_3_EN
/**
  * @brief  UART3中断函数
  * @param  void
  * @retval void
  */
void UART3_IRQHandler(void)
{
    uint8_t tmp08;

    /* 接收中断处理 */
    if((FL_ENABLE == FL_UART_IsEnabledIT_RXBuffFull(UART3))
            && (FL_SET == FL_UART_IsActiveFlag_RXBuffFull(UART3)))
    {
        /* 中断转发接收到的数据 */
        tmp08 = FL_UART_ReadRXBuff(UART3);  /* 接收中断标志可通过读取rxreg寄存器清除 */
        FL_UART_WriteTXBuff(UART3, tmp08);
    }

    /* 发送中断处理 */
    if((FL_ENABLE == FL_UART_IsEnabledIT_TXShiftBuffEmpty(UART3))
            && (FL_SET == FL_UART_IsActiveFlag_TXShiftBuffEmpty(UART3)))
    {
        /* 发送中断标志可通过写txreg寄存器清除或txif写1清除 */
        /* 发送指定长度的数据 */
        if(UARTxOp.TxOpc < UARTxOp.TxLen)
        {
            FL_UART_WriteTXBuff(UART3, UARTxOp.TxBuf[UARTxOp.TxOpc]);  /* 发送一个数据 */
            UARTxOp.TxOpc++;
        }

        FL_UART_ClearFlag_TXShiftBuffEmpty(UART3);  /* 清除发送中断标志 */
    }
}
#endif

#ifdef USART_4_EN

/**
  * @brief  UART4中断函数
  * @param  void
  * @retval void
  */
void UART4_IRQHandler(void)
{
    uint8_t tmp08;

    /* 接收中断处理 */
    if((FL_ENABLE == FL_UART_IsEnabledIT_RXBuffFull(UART4))
            && (FL_SET == FL_UART_IsActiveFlag_RXBuffFull(UART4)))
    {
        /* 中断转发接收到的数据 */
        tmp08 = FL_UART_ReadRXBuff(UART4);  /* 接收中断标志可通过读取rxreg寄存器清除 */
        FL_UART_WriteTXBuff(UART4, tmp08);
    }

    /* 发送中断处理 */
    if((FL_ENABLE == FL_UART_IsEnabledIT_TXShiftBuffEmpty(UART4))
            && (FL_SET == FL_UART_IsActiveFlag_TXShiftBuffEmpty(UART4)))
    {
        /* 发送中断标志可通过写txreg寄存器清除或txif写1清除 */
        /* 发送指定长度的数据 */
        if(UARTxOp.TxOpc < UARTxOp.TxLen)
        {
            FL_UART_WriteTXBuff(UART4, UARTxOp.TxBuf[UARTxOp.TxOpc]);  /* 发送一个数据 */
            UARTxOp.TxOpc++;
        }

        FL_UART_ClearFlag_TXShiftBuffEmpty(UART4);  /* 清除发送中断标志 */
    }
}
#endif

#ifdef USART_5_EN

#if 0 //在lin底层中有
/**
  * @brief  UART5中断函数
  * @param  void
  * @retval void
  */
void UART5_IRQHandler(void)
{
    uint8_t tmp08;

    /* 接收中断处理 */
    if((FL_ENABLE == FL_UART_IsEnabledIT_RXBuffFull(UART5))
            && (FL_SET == FL_UART_IsActiveFlag_RXBuffFull(UART5)))
    {
        #if 0
        /* 中断转发接收到的数据 */
        tmp08 = FL_UART_ReadRXBuff(UART5);  /* 接收中断标志可通过读取rxreg寄存器清除 */
        FL_UART_WriteTXBuff(UART5, tmp08);
        #else
        tmp08 = FL_UART_ReadRXBuff(UART5);  /* 接收中断标志可通过读取rxreg寄存器清除 */
        //FL_UART_ClearFlag_RXBuffFull(UART5);
        uart_rx_isr_task(UART5,tmp08);
        #endif
    }

    /* 发送中断处理 */
    if((FL_ENABLE == FL_UART_IsEnabledIT_TXShiftBuffEmpty(UART5))
            && (FL_SET == FL_UART_IsActiveFlag_TXShiftBuffEmpty(UART5)))
    {
        FL_UART_ClearFlag_TXShiftBuffEmpty(UART5);  /* 清除发送中断标志 */
        #if 0
        /* 发送中断标志可通过写txreg寄存器清除或txif写1清除 */
        /* 发送指定长度的数据 */
        if(UARTxOp.TxOpc < UARTxOp.TxLen)
        {
            FL_UART_WriteTXBuff(UART5, UARTxOp.TxBuf[UARTxOp.TxOpc]);  /* 发送一个数据 */
            UARTxOp.TxOpc++;
        }
        #endif
        uart_tx_isr_task(UART5);
    }
}
#endif

#endif





/*---------------------------------------------------------------------------
|Prototype          : uart_app_test_task
|Called by          :
|Preconditions      :
|Input parameters   :
|Output parameters  :
|Return value       :
|Description        : 周期任务
----------------------------------------------------------------------------*/
void uart_app_test_task(void)
{
    u8 i;
    u8 l_tx_data[5];

    #if 0
    for(i = 0; i < 5; i++)
    {
        /* code */
    }
    #endif
    l_tx_data[0] =0x55u;
    l_tx_data[1] =0xaau;
    l_tx_data[2] =0xa1u;
    l_tx_data[3] =0x29u;
    uart_tx_start(UART5,&l_tx_data[0],4u);
}

