385 lines
11 KiB
C
385 lines
11 KiB
C
|
/** ##########################################################################
|
||
|
** 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);
|
||
|
}
|
||
|
|