Initial commit: my SECS2 project

This commit is contained in:
2026-06-12 14:19:01 +08:00
commit 2c3e2c4dc2
1138 changed files with 603966 additions and 0 deletions

207
usr/bsp/bsp_Uart.c Normal file
View File

@@ -0,0 +1,207 @@
#include "bsp_Uart.h"
#include "string.h"
#define RX_TEMP_BUFF_NUM (1100)
#define UART1_TX_LEN (32)
#define UART1_RX_LEN (1100)
#define UART2_TX_LEN (32)
#define UART2_RX_LEN (1100)
u8 Rx_Temp_Buff[RX_TEMP_BUFF_NUM];
/*<2A><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>DMA<4D><41><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>*/
u8 Uart1_TX_Buff[UART1_TX_LEN];
u8 Uart1_Rx_Buff[UART1_RX_LEN];
u8 Uart2_TX_Buff[UART1_TX_LEN];
u8 Uart2_Rx_Buff[UART1_RX_LEN];
/*<2A><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>DMA+<2B><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD>+<2B><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>*/
static void bsp_Uart_Init(bsp_Uart_t *p_Uart);
static void bsp_Uart_Send(bsp_Uart_t *p_Uart,u8 *pData, u16 Len);
static void bsp_Uart_Tx_DMA_TCInt(bsp_Uart_t *p_Uart);
static void bsp_Uart_Rx_IdleInt(bsp_Uart_t *p_Uart);
static void bsp_Uart_Rx_TimeIncrement(bsp_Uart_t *p_Uart,u16 Time);
static void bsp_Uart_Rx_TimeStart(bsp_Uart_t *p_Uart);
static void bsp_Uart_Rx_TimeStop(bsp_Uart_t *p_Uart);
static void bsp_Uart_Rx_Task(bsp_Uart_t *p_Uart);
bsp_Uart_t COM_Uart1 =
{
.RxQueue = queue(u8,UART1_RX_LEN),
.Uart =USART1,
.Tx_DMA = DMA1,
.Rx_DMA = DMA1,
.Rx_DMA_CH = LL_DMA_CHANNEL_4,
.Tx_DMA_CH = LL_DMA_CHANNEL_5,
.Tx_DMA_Len = UART1_TX_LEN,
.Rx_DMA_Len = UART1_RX_LEN,
.Tx_Addr = &Uart1_TX_Buff[0],
.Rx_Addr = &Uart1_Rx_Buff[0],
.Tx_DMA_CompleteFlag = 1,
.Rx_TimeOver = 10, /*<2A><><EFBFBD>ճ<EFBFBD>ʱʱ<CAB1><CAB1>10ms <20><><EFBFBD><EFBFBD>Ϊ0ʱΪ<CAB1><CEAA><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD> <20>޳<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>*/
.Init = bsp_Uart_Init,
.Send = bsp_Uart_Send,
.Tx_DMA_TCInt = bsp_Uart_Tx_DMA_TCInt,
.Rx_IdleInt = bsp_Uart_Rx_IdleInt,
.Rx_TimeIncrementInt = bsp_Uart_Rx_TimeIncrement,
.Rx_DataAnalysis = NULL,
.Rx_Task = bsp_Uart_Rx_Task,
};
bsp_Uart_t COM_Uart2 =
{
.RxQueue = queue(u8,UART2_RX_LEN),
.Uart =USART2,
.Tx_DMA = DMA1,
.Rx_DMA = DMA1,
.Rx_DMA_CH = LL_DMA_CHANNEL_1,
.Tx_DMA_CH = LL_DMA_CHANNEL_2,
.Tx_DMA_Len = UART2_TX_LEN,
.Rx_DMA_Len = UART2_RX_LEN,
.Tx_Addr = &Uart2_TX_Buff[0],
.Rx_Addr = &Uart2_Rx_Buff[0],
.Tx_DMA_CompleteFlag = 1,
.Rx_TimeOver = 5, /*<2A><><EFBFBD>ճ<EFBFBD>ʱʱ<CAB1><CAB1>10ms<6D><73><EFBFBD><EFBFBD>Ϊ0ʱΪ<CAB1><CEAA><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD> <20>޳<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>*/
.Init = bsp_Uart_Init,
.Send = bsp_Uart_Send,
.Tx_DMA_TCInt = bsp_Uart_Tx_DMA_TCInt,
.Rx_IdleInt = bsp_Uart_Rx_IdleInt,
.Rx_TimeIncrementInt = bsp_Uart_Rx_TimeIncrement,
.Rx_DataAnalysis = NULL,
.Rx_Task = bsp_Uart_Rx_Task,
};
static void bsp_Uart_Init(bsp_Uart_t *p_Uart)
{
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
p_Uart->Rx_DataAnalysis = NULL;
/*RX*/
if(NULL == p_Uart->Uart)
return;
LL_USART_EnableIT_RXNE(p_Uart->Uart); //ʹ<>ܴ<EFBFBD><DCB4>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD>ж<EFBFBD>
if(NULL != p_Uart->Rx_DMA)
{
}
}
static void bsp_Uart2_DMASend(bsp_Uart_t *p_Uart,u8 *pData, u16 Len)
{
while (!p_Uart->Tx_DMA_CompleteFlag); /*<2A>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־*/
p_Uart->Tx_DMA_CompleteFlag = 0;
if(p_Uart->Tx_DMA_Len < Len)
Len = p_Uart->Tx_DMA_Len;
memcpy(p_Uart->Tx_Addr, pData, Len); /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>*/
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>*/
static void bsp_Uart_Rx_IdleInt(bsp_Uart_t *p_Uart)
{
u8 rx_data;
rx_data = LL_USART_ReceiveData8(p_Uart->Uart);
queue_push_back(p_Uart->RxQueue,(void *)&rx_data);
/*<2A><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>*/
bsp_Uart_Rx_TimeStart(p_Uart);
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
static void bsp_Uart_Send(bsp_Uart_t *p_Uart,u8 *pData, u16 Len)
{
u16 i;
for (i = 0; i < Len; i++)
{
while (!LL_USART_IsActiveFlag_TXE(p_Uart->Uart));
LL_USART_TransmitData8(p_Uart->Uart, pData[i]); // <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽڵ<D6BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
}
}
static void bsp_Uart_Tx_DMA_TCInt(bsp_Uart_t *p_Uart)
{
p_Uart->Tx_DMA_CompleteFlag = 1;
}
/*<2A>жϼ<D0B6><CFBC><EFBFBD>*/
static void bsp_Uart_Rx_TimeIncrement(bsp_Uart_t *p_Uart,u16 Time)
{
/*<2A><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>*/
if(1 == p_Uart->Rx_StartFlag)
{
p_Uart->Rx_TimeCount += Time;
}
}
/*<2A><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>*/
static void bsp_Uart_Rx_TimeStart(bsp_Uart_t *p_Uart)
{
p_Uart->Rx_StartFlag = 1;
p_Uart->Rx_TimeCount = 0;
}
/*ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>*/
static void bsp_Uart_Rx_TimeStop(bsp_Uart_t *p_Uart)
{
p_Uart->Rx_StartFlag = 0;
p_Uart->Rx_TimeCount = 0;
}
static void bsp_Uart_Rx_Task(bsp_Uart_t *p_Uart)
{
/*<2A><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD>յ<EFBFBD>һ֡<D2BB><D6A1><EFBFBD><EFBFBD>*/
if(p_Uart->Rx_TimeOver < p_Uart->Rx_TimeCount)
{
p_Uart->Rx_Len = queue_size(p_Uart->RxQueue);
/*ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>*/
bsp_Uart_Rx_TimeStop(p_Uart);
if(p_Uart->Rx_Len <= p_Uart->Rx_DMA_Len && (0 != p_Uart->Rx_Len))
{
if(RX_TEMP_BUFF_NUM < p_Uart->Rx_Len)
{
queue_clear(p_Uart->RxQueue);
}
else
{
for(u16 i = 0;i < p_Uart->Rx_Len;i++)
{
queue_pop(p_Uart->RxQueue,&Rx_Temp_Buff[i]);
}
if(NULL != p_Uart->Rx_DataAnalysis)
{
p_Uart->Rx_DataAnalysis(Rx_Temp_Buff,p_Uart->Rx_Len,p_Uart); /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
}
//p_Uart->Send(p_Uart,Rx_Buff,p_Uart->Rx_Len);
}
}
}
}