新增:串口通讯避障功能

​ 1、Launcher中的串口只使用串口0(调试串口)、串口2(主动RS485端口);串口1与串口3不使用,且不初始化。将串口通讯缓冲区修改为1100Byte。

​  目的:CH564由于将Launcher代码搬运到RAM中运行,因此可使用的变量大小只有32Kbyte。不使用的串口将不初始化,同时使用的通讯缓冲区将节约出来,否则RAM空间不够使用。

​ 2、串口2 - 增加RS485使能,同时通讯增加避障功能。
This commit is contained in:
caocong
2026-01-19 16:39:22 +08:00
parent 094fd76a72
commit 5e9338cee4
37 changed files with 37088 additions and 289 deletions

View File

@@ -17,7 +17,14 @@
#include <string.h>
UART_t g_uart[UART_MAX];
/* Bootload <20>й滮<D0B9><E6BBAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* 1<><31><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD> - <20><><EFBFBD><EFBFBD>0
* 2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD> - <20><><EFBFBD><EFBFBD>2
* - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD>
*/
UART_t g_uart_0;
UART_t g_uart_2;
void UART0_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
void UART1_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
@@ -58,11 +65,11 @@ void UARTx_Init(UART_IDX uart_id, uint32_t buad) {
UART0_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_THR_EMPTY);
NVIC_EnableIRQ(UART0_IRQn);
memset(&g_uart[UART_0],0,sizeof(UART_t));
Set_Uart_recvTimeout(&g_uart[UART_0],buad);
memset(&g_uart_0,0,sizeof(UART_t));
Set_Uart_recvTimeout(&g_uart_0,buad);
g_uart[UART_0].send_data_cf = UART0_SendString;
g_uart[UART_0].set_baud_cf = UART0_ChangeBaud;
g_uart_0.send_data_cf = MCU485_SendString_0;
g_uart_0.set_baud_cf = UART0_ChangeBaud;
break;
case UART_1:
UART1_Reset();
@@ -80,11 +87,6 @@ void UARTx_Init(UART_IDX uart_id, uint32_t buad) {
UART1_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_THR_EMPTY);
NVIC_EnableIRQ(UART1_IRQn);
memset(&g_uart[UART_1],0,sizeof(UART_t));
Set_Uart_recvTimeout(&g_uart[UART_1],buad);
g_uart[UART_1].send_data_cf = UART1_SendString;
g_uart[UART_1].set_baud_cf = UART1_ChangeBaud;
break;
case UART_2:
//RS485ͨѶ<CDA8><D1B6><EFBFBD><EFBFBD>
@@ -106,11 +108,11 @@ void UARTx_Init(UART_IDX uart_id, uint32_t buad) {
UART2_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_THR_EMPTY);
NVIC_EnableIRQ(UART2_IRQn);
memset(&g_uart[UART_2],0,sizeof(UART_t));
Set_Uart_recvTimeout(&g_uart[UART_2],buad);
memset(&g_uart_2,0,sizeof(UART_t));
Set_Uart_recvTimeout(&g_uart_2,buad);
g_uart[UART_2].send_data_cf = UART2_SendString;
g_uart[UART_2].set_baud_cf = UART2_ChangeBaud;
g_uart_2.send_data_cf = MCU485_SendString_2;
g_uart_2.set_baud_cf = UART2_ChangeBaud;
break;
case UART_3:
UART3_Reset();
@@ -128,11 +130,6 @@ void UARTx_Init(UART_IDX uart_id, uint32_t buad) {
UART3_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_THR_EMPTY);
NVIC_EnableIRQ(UART3_IRQn);
memset(&g_uart[UART_3],0,sizeof(UART_t));
Set_Uart_recvTimeout(&g_uart[UART_3],buad);
g_uart[UART_3].send_data_cf = UART3_SendString;
g_uart[UART_3].set_baud_cf = UART3_ChangeBaud;
break;
}
}
@@ -173,14 +170,14 @@ void UART0_IRQHandler(void)
break;
case UART_II_RECV_RDY:
case UART_II_RECV_TOUT:
if( (g_uart[UART_0].RecvLen + 1) >= USART_BUFFER_SIZE ) g_uart[UART_0].RecvLen = 0x00;
g_uart[UART_0].RecvBuffer[g_uart[UART_0].RecvLen] = UART0_RecvByte();
g_uart[UART_0].RecvLen += 1;
g_uart[UART_0].Receiving = 0x01;
g_uart[UART_0].RecvIdleTiming = SysTick_1ms;
if( (g_uart_0.RecvLen + 1) >= USART_BUFFER_SIZE ) g_uart_0.RecvLen = 0x00;
g_uart_0.RecvBuffer[g_uart_0.RecvLen] = UART0_RecvByte();
g_uart_0.RecvLen += 1;
g_uart_0.Receiving = 0x01;
g_uart_0.RecvIdleTiming = SysTick_1ms;
//<2F><>ǰ<EFBFBD><C7B0><EFBFBD>ڷ<EFBFBD>æ״̬
g_uart[UART_0].CommBusy |= UART_COMMBUSY_RECV_Flag;
g_uart_0.CommBusy |= UART_COMMBUSY_RECV_Flag;
break;
}
@@ -202,11 +199,11 @@ void UART1_IRQHandler(void)
break;
case UART_II_RECV_RDY:
case UART_II_RECV_TOUT:
if( (g_uart[UART_1].RecvLen + 1) >= USART_BUFFER_SIZE ) g_uart[UART_1].RecvLen = 0x00;
g_uart[UART_1].RecvBuffer[g_uart[UART_1].RecvLen] = UART1_RecvByte();
g_uart[UART_1].RecvLen += 1;
g_uart[UART_1].Receiving = 0x01;
g_uart[UART_1].RecvIdleTiming = SysTick_1ms;
// if( (g_uart[UART_1].RecvLen + 1) >= USART_BUFFER_SIZE ) g_uart[UART_1].RecvLen = 0x00;
// g_uart[UART_1].RecvBuffer[g_uart[UART_1].RecvLen] = UART1_RecvByte();
// g_uart[UART_1].RecvLen += 1;
// g_uart[UART_1].Receiving = 0x01;
// g_uart[UART_1].RecvIdleTiming = SysTick_1ms;
break;
}
}
@@ -227,11 +224,11 @@ void UART2_IRQHandler(void)
break;
case UART_II_RECV_RDY:
case UART_II_RECV_TOUT:
if( (g_uart[UART_2].RecvLen + 1) >= USART_BUFFER_SIZE ) g_uart[UART_2].RecvLen = 0x00;
g_uart[UART_2].RecvBuffer[g_uart[UART_2].RecvLen] = UART2_RecvByte();
g_uart[UART_2].RecvLen += 1;
g_uart[UART_2].Receiving = 0x01;
g_uart[UART_2].RecvIdleTiming = SysTick_1ms;
if( (g_uart_2.RecvLen + 1) >= USART_BUFFER_SIZE ) g_uart_2.RecvLen = 0x00;
g_uart_2.RecvBuffer[g_uart_2.RecvLen] = UART2_RecvByte();
g_uart_2.RecvLen += 1;
g_uart_2.Receiving = 0x01;
g_uart_2.RecvIdleTiming = SysTick_1ms;
break;
}
}
@@ -252,11 +249,11 @@ void UART3_IRQHandler(void)
break;
case UART_II_RECV_RDY:
case UART_II_RECV_TOUT:
if( (g_uart[UART_3].RecvLen + 1) >= USART_BUFFER_SIZE ) g_uart[UART_3].RecvLen = 0x00;
g_uart[UART_3].RecvBuffer[g_uart[UART_3].RecvLen] = UART3_RecvByte();
g_uart[UART_3].RecvLen += 1;
g_uart[UART_3].Receiving = 0x01;
g_uart[UART_3].RecvIdleTiming = SysTick_1ms;
// if( (g_uart[UART_3].RecvLen + 1) >= USART_BUFFER_SIZE ) g_uart[UART_3].RecvLen = 0x00;
// g_uart[UART_3].RecvBuffer[g_uart[UART_3].RecvLen] = UART3_RecvByte();
// g_uart[UART_3].RecvLen += 1;
// g_uart[UART_3].Receiving = 0x01;
// g_uart[UART_3].RecvIdleTiming = SysTick_1ms;
break;
}
}
@@ -270,17 +267,17 @@ void UART3_IRQHandler(void)
*/
void UART0_RECEIVE(void)
{
if(g_uart[UART_0].Receiving == 0x01)
if(g_uart_0.Receiving == 0x01)
{
if(SysTick_1ms - g_uart[UART_0].RecvIdleTiming >= g_uart[UART_0].RecvTimeout)
if(SysTick_1ms - g_uart_0.RecvIdleTiming >= g_uart_0.RecvTimeout)
{
g_uart[UART_0].RecvIdleTiming = SysTick_1ms;
g_uart_0.RecvIdleTiming = SysTick_1ms;
DBG_SYS_Printf("--UART0_RECEIVE--\r\n");
Launcher_Uart_Upgrade_Process(&g_uart[UART_0]);
DBG_SYS_Printf("UART0_RECEIVE");
Launcher_Uart_Upgrade_Process(&g_uart_0);
g_uart[UART_0].RecvLen = 0;
g_uart[UART_0].Receiving = 0;
g_uart_0.RecvLen = 0;
g_uart_0.Receiving = 0;
}
}
}
@@ -294,19 +291,7 @@ void UART0_RECEIVE(void)
*/
void UART1_RECEIVE(void)
{
if(g_uart[UART_1].Receiving == 0x01)
{
if(SysTick_1ms - g_uart[UART_1].RecvIdleTiming >= g_uart[UART_1].RecvTimeout)
{
g_uart[UART_1].RecvIdleTiming = SysTick_1ms;
DBG_SYS_Printf("--UART1_RECEIVE--\r\n");
Launcher_Uart_Upgrade_Process(&g_uart[UART_1]);
g_uart[UART_1].RecvLen = 0;
g_uart[UART_1].Receiving = 0;
}
}
}
@@ -320,17 +305,17 @@ void UART1_RECEIVE(void)
*/
void UART2_RECEIVE(void)
{
if(g_uart[UART_2].Receiving == 1)
if(g_uart_2.Receiving == 1)
{
if(SysTick_1ms - g_uart[UART_2].RecvIdleTiming > g_uart[UART_2].RecvTimeout)
if(SysTick_1ms - g_uart_2.RecvIdleTiming > g_uart_2.RecvTimeout)
{
g_uart[UART_2].RecvIdleTiming = SysTick_1ms;
g_uart_2.RecvIdleTiming = SysTick_1ms;
DBG_SYS_Printf("--UART2_RECEIVE--\r\n");
Launcher_Uart_Upgrade_Process(&g_uart[UART_2]);
DBG_SYS_Printf("UART2_RECEIVE");
Launcher_Uart_Upgrade_Process(&g_uart_2);
g_uart[UART_2].RecvLen = 0;
g_uart[UART_2].Receiving = 0;
g_uart_2.RecvLen = 0;
g_uart_2.Receiving = 0;
}
}
}
@@ -346,19 +331,7 @@ void UART2_RECEIVE(void)
*/
void UART3_RECEIVE(void)
{
if(g_uart[UART_3].Receiving == 1)
{
if(SysTick_1ms - g_uart[UART_3].RecvIdleTiming > g_uart[UART_3].RecvTimeout)
{
g_uart[UART_3].RecvIdleTiming = SysTick_1ms;
DBG_SYS_Printf("--UART3_RECEIVE--\r\n");
Launcher_Uart_Upgrade_Process(&g_uart[UART_3]);
g_uart[UART_3].RecvLen = 0;
g_uart[UART_3].Receiving = 0;
}
}
}
/*********************************************************************
@@ -397,7 +370,7 @@ uint8_t UART0_ChangeBaud(uint32_t baudrate)
UART0_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_THR_EMPTY);
NVIC_EnableIRQ(UART0_IRQn);
Set_Uart_recvTimeout(&g_uart[UART_0],baudrate);
Set_Uart_recvTimeout(&g_uart_0,baudrate);
__enable_irq();
@@ -425,7 +398,7 @@ uint8_t UART1_ChangeBaud(uint32_t baudrate)
while(1)
{
if( UART0_GetLinSTA() & RB_LSR_TX_ALL_EMP )
if( UART1_GetLinSTA() & RB_LSR_TX_ALL_EMP )
{
/*<2A><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>*/
__disable_irq();
@@ -445,7 +418,7 @@ uint8_t UART1_ChangeBaud(uint32_t baudrate)
UART1_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_THR_EMPTY);
NVIC_EnableIRQ(UART1_IRQn);
Set_Uart_recvTimeout(&g_uart[UART_1],baudrate);
//Set_Uart_recvTimeout(&g_uart[UART_1],baudrate);
__enable_irq();
@@ -473,7 +446,7 @@ uint8_t UART2_ChangeBaud(uint32_t baudrate)
while(1)
{
if( UART0_GetLinSTA() & RB_LSR_TX_ALL_EMP )
if( UART2_GetLinSTA() & RB_LSR_TX_ALL_EMP )
{
/*<2A><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>*/
__disable_irq();
@@ -493,7 +466,7 @@ uint8_t UART2_ChangeBaud(uint32_t baudrate)
UART2_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_THR_EMPTY);
NVIC_EnableIRQ(UART2_IRQn);
Set_Uart_recvTimeout(&g_uart[UART_2],baudrate);
Set_Uart_recvTimeout(&g_uart_2,baudrate);
__enable_irq();
@@ -521,7 +494,7 @@ uint8_t UART3_ChangeBaud(uint32_t baudrate)
while(1)
{
if( UART0_GetLinSTA() & RB_LSR_TX_ALL_EMP )
if( UART3_GetLinSTA() & RB_LSR_TX_ALL_EMP )
{
/*<2A><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>*/
__disable_irq();
@@ -541,7 +514,7 @@ uint8_t UART3_ChangeBaud(uint32_t baudrate)
UART3_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_THR_EMPTY);
NVIC_EnableIRQ(UART3_IRQn);
Set_Uart_recvTimeout(&g_uart[UART_3],baudrate);
//Set_Uart_recvTimeout(&g_uart[UART_3],baudrate);
__enable_irq();
@@ -571,10 +544,9 @@ uint8_t UART3_ChangeBaud(uint32_t baudrate)
*
* */
uint8_t MCU485_SendString_1(uint8_t *buff, uint16_t len)
uint8_t MCU485_SendString_0(uint8_t *buff, uint16_t len)
{
uint32_t delay_num = 0;
MCU485_EN1_H;
UART0_SendString(buff,len);
@@ -587,7 +559,6 @@ uint8_t MCU485_SendString_1(uint8_t *buff, uint16_t len)
if(delay_num > 50000) break;
}
MCU485_EN1_L;
return 0x00;
}
@@ -615,25 +586,33 @@ uint8_t MCU485_SendString_2(uint8_t *buff, uint16_t len)
* Function Name : Uart0_Add_Data_To_SendBuff
* Description : Uart0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>
* Input :
* uart_info<66><6F><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
buff<66><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
len<65><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
sendCount <20><><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>
ValidDuration <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Чʱ<D0A7><EFBFBD><E4A3AC>λ<EFBFBD><CEBB>ms
sendInterval <20><><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ʱ<EFBFBD><EFBFBD><E4A3AC>λ<EFBFBD><CEBB>ms
*******************************************************************************/
uint8_t Uart0_Add_Data_To_SendBuff(uint8_t *buff,uint16_t len,uint8_t sendCount,uint32_t ValidDuration,uint32_t sendInterval)
uint8_t Uartx_Add_Data_To_SendBuff(
UART_t *uart_info,
uint8_t *buff,
uint16_t len,
uint8_t sendCount,
uint32_t ValidDuration,
uint32_t sendInterval)
{
if( buff == NULL) return 0x01;
if( uart_info == NULL ) return 0x01;
if( buff == NULL ) return 0x01;
if( len > USART_BUFFER_SIZE ) return 0x02;
memset(g_uart[UART_0].SendBuffer,0,USART_BUFFER_SIZE);
memcpy(g_uart[UART_0].SendBuffer,buff,len);
g_uart[UART_0].SendLen = len;
g_uart[UART_0].SendCount = sendCount;
g_uart[UART_0].SendCnt = 0;
g_uart[UART_0].SendValidDuration = ValidDuration;
g_uart[UART_0].SendInterval = sendInterval;
g_uart[UART_0].SendValidTick = SysTick_1ms;
memset(uart_info->SendBuffer,0,USART_BUFFER_SIZE);
memcpy(uart_info->SendBuffer,buff,len);
uart_info->SendLen = len;
uart_info->SendCount = sendCount;
uart_info->SendCnt = 0;
uart_info->SendValidDuration = ValidDuration;
uart_info->SendInterval = sendInterval;
uart_info->SendValidTick = SysTick_1ms;
return 0x00;
}
@@ -642,10 +621,12 @@ uint8_t Uart0_Add_Data_To_SendBuff(uint8_t *buff,uint16_t len,uint8_t sendCount,
* Function Name : Uart0_Clear_SendBuff
* Description : Uart0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬʱȡ<CAB1><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
uint8_t Uart0_Clear_SendBuff(void)
uint8_t Uartx_Clear_SendBuff(UART_t *uart_info)
{
memset(g_uart[UART_0].SendBuffer,0,USART_BUFFER_SIZE);
g_uart[UART_0].SendLen = 0x00;
if( uart_info == NULL ) return 0x01;
memset(uart_info->SendBuffer,0,USART_BUFFER_SIZE);
uart_info->SendLen = 0x00;
return 0x00;
}
@@ -654,40 +635,45 @@ uint8_t Uart0_Clear_SendBuff(void)
* Function Name : Uart0_Avoid_Conflict_Send_Task
* Description : Uart0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
uint8_t Uart0_Avoid_Conflict_Send_Task(void)
uint8_t Uartx_Avoid_Conflict_Send_Task(UART_t *uart_info)
{
if( (g_uart[UART_0].SendLen == 0x00) || (g_uart[UART_0].SendLen > USART_BUFFER_SIZE) ) return 0x01;
if( uart_info == NULL ) return 0x01;
if( g_uart[UART_0].SendCnt >= g_uart[UART_0].SendCount ) {
if( (uart_info->SendLen == 0x00) || (uart_info->SendLen > USART_BUFFER_SIZE) ) return 0x01;
if( uart_info->SendCnt >= uart_info->SendCount ) {
//<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFB5BD><EFBFBD>ޣ<EFBFBD><DEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>
g_uart[UART_0].SendLen = 0x00;
uart_info->SendLen = 0x00;
return 0x02;
}
if( SysTick_1ms - g_uart[UART_0].SendValidTick >= g_uart[UART_0].SendInterval ){
if( SysTick_1ms - uart_info->SendValidTick >= uart_info->SendInterval ){
//<2F><><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>Ч<EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>
g_uart[UART_0].SendLen = 0x00;
uart_info->SendLen = 0x00;
return 0x03;
}
if( g_uart[UART_0].CommBusy != UART_COMMBUSY_IDLE_Flag ) return 0x04; //ͨѶ<CDA8><D1B6><EFBFBD>ڷ<EFBFBD>æ״̬
if( uart_info->CommBusy != UART_COMMBUSY_IDLE_Flag ) return 0x04; //ͨѶ<CDA8><D1B6><EFBFBD>ڷ<EFBFBD>æ״̬
//<2F><><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>
if( ( g_uart[UART_0].SendCnt == 0x00 ) || ( SysTick_1ms - g_uart[UART_0].SendTick >= g_uart[UART_0].SendInterval ) )
if( ( uart_info->SendCnt == 0x00 ) || ( SysTick_1ms - uart_info->SendTick >= uart_info->SendInterval ) )
{
__disable_irq(); //<2F>ر<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD>ж<EFBFBD>
g_uart[UART_0].CommBusy |= UART_COMMBUSY_SEND_Flag;
g_uart[UART_0].SendIdleTick = SysTick_1ms;
uart_info->CommBusy |= UART_COMMBUSY_SEND_Flag;
uart_info->SendIdleTick = SysTick_1ms;
__enable_irq(); //<2F><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD>ж<EFBFBD>
UART0_SendString(g_uart[UART_0].SendBuffer, g_uart[UART_0].SendLen);
g_uart[UART_0].SendTick = SysTick_1ms;
g_uart[UART_0].SendCnt++;
if( uart_info->send_data_cf != NULL ){
uart_info->send_data_cf(uart_info->SendBuffer, uart_info->SendLen);
}
if( g_uart[UART_0].SendCnt >= g_uart[UART_0].SendCount )
uart_info->SendTick = SysTick_1ms;
uart_info->SendCnt++;
if( uart_info->SendCnt >= uart_info->SendCount )
{
memset(g_uart[UART_0].SendBuffer,0,USART_BUFFER_SIZE);
g_uart[UART_0].SendLen = 0x00;
memset(uart_info->SendBuffer,0,USART_BUFFER_SIZE);
uart_info->SendLen = 0x00;
return 0x05; //ͨѶ<CDA8><D1B6><EFBFBD><EFBFBD>
}
@@ -696,37 +682,52 @@ uint8_t Uart0_Avoid_Conflict_Send_Task(void)
return 0x00;
}
void Uart0_Task(void)
/*******************************************************************************
* Function Name : Uartx_IDLE_State_Determination
* Description : Uartx <20><><EFBFBD><EFBFBD>״̬<D7B4>ж<EFBFBD>
*******************************************************************************/
void Uartx_IDLE_State_Determination(UART_t *uart_info)
{
UART0_RECEIVE();
Uart0_Avoid_Conflict_Send_Task();
if( g_uart[UART_0].CommBusy == UART_COMMBUSY_IDLE_Flag )
if( uart_info->CommBusy == UART_COMMBUSY_IDLE_Flag )
{
/*<2A><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD><DFBF><EFBFBD>״̬ - <20><><EFBFBD>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʲ<EFBFBD><CAB2><EFBFBD>*/
if( g_uart[UART_0].ChangeBaudFlag == 0x01 )
if( uart_info->ChangeBaudFlag == 0x01 )
{
g_uart[UART_0].set_baud_cf(g_uart[UART_0].CommBaud);
g_uart[UART_0].ChangeBaudFlag = 0x00;
uart_info->set_baud_cf(uart_info->CommBaud);
uart_info->ChangeBaudFlag = 0x00;
}
}else {
/*<2A><>ǰ<EFBFBD><C7B0><EFBFBD>ڷ<EFBFBD><DAB7>ͷ<EFBFBD>æ״̬<D7B4><CCAC><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>߿<EFBFBD><DFBF><EFBFBD>״̬ - <20>ж<EFBFBD>ʹ<EFBFBD>ó<EFBFBD>ʱʱ<CAB1><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD>ʱʱ<CAB1><CAB1>һ<EFBFBD><D2BB>*/
if( ((g_uart[UART_0].CommBusy & UART_COMMBUSY_SEND_Flag) != 0x00 ) && ( SysTick_1ms - g_uart[UART_0].SendIdleTick >= g_uart[UART_0].RecvTimeout ) )
if( ((uart_info->CommBusy & UART_COMMBUSY_SEND_Flag) != 0x00 ) && ( SysTick_1ms - uart_info->SendIdleTick >= uart_info->RecvTimeout ) )
{
g_uart[UART_0].SendIdleTick = SysTick_1ms;
uart_info->SendIdleTick = SysTick_1ms;
__disable_irq(); //<2F>ر<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD>ж<EFBFBD>
g_uart[UART_0].CommBusy &= ~(UART_COMMBUSY_SEND_Flag);
g_uart[UART_0].SendIdleTick = SysTick_1ms;
uart_info->CommBusy &= ~(UART_COMMBUSY_SEND_Flag);
uart_info->SendIdleTick = SysTick_1ms;
__enable_irq(); //<2F><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD>ж<EFBFBD>
}
}
}
void Uart0_Task(void)
{
UART0_RECEIVE();
Uartx_Avoid_Conflict_Send_Task(&g_uart_0);
Uartx_IDLE_State_Determination(&g_uart_0);
}
void Uart2_Task(void)
{
UART2_RECEIVE();
Uartx_Avoid_Conflict_Send_Task(&g_uart_2);
Uartx_IDLE_State_Determination(&g_uart_2);
}