新增:串口通讯避障功能
1、Launcher中的串口只使用串口0(调试串口)、串口2(主动RS485端口);串口1与串口3不使用,且不初始化。将串口通讯缓冲区修改为1100Byte。 目的:CH564由于将Launcher代码搬运到RAM中运行,因此可使用的变量大小只有32Kbyte。不使用的串口将不初始化,同时使用的通讯缓冲区将节约出来,否则RAM空间不够使用。 2、串口2 - 增加RS485使能,同时通讯增加避障功能。
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user