385 lines
11 KiB
C
Raw Permalink Normal View History

2025-04-26 16:03:23 +08:00
/** ##########################################################################
** 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);
}