From f03cf3ae7a36954e64fc014e6bb7afd20c5a5247 Mon Sep 17 00:00:00 2001
From: jinlicong <493886250@qq.com>
Date: Wed, 12 Jun 2024 17:22:08 +0800
Subject: [PATCH] 增加IAP功能,准备测试上位机升级

---
 HARDWARE/UART/uart.c |   78 ++++++++++++++++++++++++++++++++------
 1 files changed, 65 insertions(+), 13 deletions(-)

diff --git a/HARDWARE/UART/uart.c b/HARDWARE/UART/uart.c
index 783c7e6..7a1c099 100644
--- a/HARDWARE/UART/uart.c
+++ b/HARDWARE/UART/uart.c
@@ -8,6 +8,12 @@
 uint8_t up_comm_recv_buff[UP_COMM_RECV_BUFF_LEN_MAX] = {0};
 uint8_t WRC_recv_buff[WRC_RECV_BUFF_LEN_MAX] = {0};
 
+UART_CTRL_PARA_T	uart_ctrl_para_g = {
+	.WRC_rxto_flag = RESET,
+	.RS485_rxto_flag = RESET,
+	.UP_COMM_rxto_flag = RESET,
+};
+
 u16 USART_RX_STA = 0; //����״̬���
 //void Usmart_RecvDataProcess(UC_RECV_PARA_T *usmart_recv_para_p)
 //{
@@ -64,6 +70,25 @@
 	}	
 }
 
+void UART1_IRQHandler(void)
+{
+	//ֻ��uart0��uart1�н��ճ�ʱ�ж�
+	if(UARTx_ISR_RXTO_Chk(UART1) == SET){
+		UARTx_ISR_RXTO_Clr(UART1);
+		uart_ctrl_para_g.RS485_rxto_flag = SET;
+		uart_ctrl_para_g.WRC_rxto_flag =  SET;
+	}
+}
+
+//void UART5_IRQHandler(void)
+//{
+//	//ֻ��uart0��uart1�н��ճ�ʱ�ж�
+//	if(UARTx_ISR_RXTO_Chk(UART5) == SET){
+//		UARTx_ISR_RXTO_Clr(UART5);
+//		uart_ctrl_para_g.UP_COMM_rxto_flag = SET;
+//	}
+//}
+
 
 void RS485_read_data_uart_Init(uint32_t	BaudRate,UART_ParityBitTypeDef	ParityBit,UART_StopBitTypeDef		StopBit)
 {
@@ -76,8 +101,11 @@
 	AltFunIO(RS485_READ_DATA_RX_PORT, RS485_READ_DATA_RX_PIN, ALTFUN_NORMAL);	
 	
 	//UART����ʱ��Դѡ��   ֻ��UART0��1��Ҫѡ��  ����UART�˿��ݲ���Ҫ  ֱ��ע�ͼ���
-	if((RS485_READ_DATA_UARTX==UART0)||(RS485_READ_DATA_UARTX==UART1))
+	if(RS485_READ_DATA_UARTX==UART0)
 		UART_para.ClockSrc = CMU_OPCCR1_UART0CKS_APBCLK;		//UART0����ʱ��ѡ��	
+	else if(RS485_READ_DATA_UARTX==UART1)
+		UART_para.ClockSrc = CMU_OPCCR1_UART1CKS_APBCLK;		//UART1����ʱ��ѡ��	
+		
 	
 	UART_para.BaudRate = BaudRate;
 	UART_para.ParityBit = ParityBit;			//��żУ��
@@ -93,10 +121,16 @@
 //	UARTx_IER_RXBF_IE_Setable(RS485_READ_DATA_UARTX, ENABLE);//���ջ������ж�ʹ�� ��Ҫʹ�ý����жϴ򿪴˴�����
 //	UARTx_IER_TXSE_IE_Setable(RS485_READ_DATA_UARTX, ENABLE)��//���ͻ�����ҷ�����λ�Ĵ������ж�ʹ�� ��Ҫʹ�÷����жϴ򿪴˴�����
 	
-	/*NVIC�ж����ȼ��Լ��Ƿ���ж�����*/
 	NVIC_DisableIRQ(RS485_READ_DATA_UARTX_IRQn);
-//	NVIC_SetPriority(RS485_READ_DATA_UARTX_IRQn,2);//�ж����ȼ�����
-//	NVIC_EnableIRQ(RS485_READ_DATA_UARTX_IRQn);		//�жϷ�������
+	UARTx_TODR_RXTO_LEN_Set(RS485_READ_DATA_UARTX, 255);//ֻ��uart0��uart1�н��ճ�ʱ�ж�
+	UARTx_ISR_RXTO_Clr(RS485_READ_DATA_UARTX);
+	UARTx_IER_RXTO_IE_Setable(RS485_READ_DATA_UARTX, ENABLE);
+//	NVIC_EnableIRQ(RS485_READ_DATA_UARTX_IRQn);
+	UARTx_CSR_RXTOEN_Setable(RS485_READ_DATA_UARTX, ENABLE);
+	/*NVIC�ж����ȼ��Լ��Ƿ���ж�����*/
+//	NVIC_DisableIRQ(RS485_READ_DATA_UARTX_IRQn);
+	NVIC_SetPriority(RS485_READ_DATA_UARTX_IRQn,2);//�ж����ȼ�����
+	NVIC_EnableIRQ(RS485_READ_DATA_UARTX_IRQn);		//�жϷ�������
 	
 	UARTx_CSR_RXEN_Setable(RS485_READ_DATA_UARTX, ENABLE);  //�򿪽���ʹ��
 	UARTx_CSR_TXEN_Setable(RS485_READ_DATA_UARTX, ENABLE);  //�򿪷���ʹ��
@@ -165,8 +199,10 @@
 	UP_COMM_RE_RECV_EN;
 	
 	//UART����ʱ��Դѡ��   ֻ��UART0��1��Ҫѡ��  ����UART�˿��ݲ���Ҫ  ֱ��ע�ͼ���
-	if((UP_COMM_UARTX==UART0)||(UP_COMM_UARTX==UART1))
+	if(UP_COMM_UARTX==UART0)
 		UART_para.ClockSrc = CMU_OPCCR1_UART0CKS_APBCLK;		//UART0����ʱ��ѡ��	
+	else if(UP_COMM_UARTX==UART1)
+		UART_para.ClockSrc = CMU_OPCCR1_UART1CKS_APBCLK;		//UART1����ʱ��ѡ��	
 	
 	UART_para.BaudRate = BaudRate;
 	UART_para.ParityBit = ParityBit;			//��żУ��
@@ -181,10 +217,17 @@
 	
 //	UARTx_IER_RXBF_IE_Setable(UP_COMM_UARTX, ENABLE);//���ջ������ж�ʹ�� ��Ҫʹ�ý����жϴ򿪴˴�����
 //	UARTx_IER_TXSE_IE_Setable(UP_COMM_UARTX, ENABLE)��//���ͻ�����ҷ�����λ�Ĵ������ж�ʹ�� ��Ҫʹ�÷����жϴ򿪴˴�����
+//	NVIC_DisableIRQ(UP_COMM_UARTX_IRQn);
+//	UARTx_TODR_RXTO_LEN_Set(UP_COMM_UARTX, 255);//ֻ��uart0��uart1�н��ճ�ʱ�ж�
+//	UARTx_ISR_RXTO_Clr(UP_COMM_UARTX);
+//	UARTx_IER_RXTO_IE_Setable(UP_COMM_UARTX, ENABLE);
+////	NVIC_EnableIRQ(UP_COMM_UARTX_IRQn);
+//	UARTx_CSR_RXTOEN_Setable(UP_COMM_UARTX, ENABLE);
+	
 	
 	/*NVIC�ж����ȼ��Լ��Ƿ���ж�����*/
 	NVIC_DisableIRQ(UP_COMM_UARTX_IRQn);
-//	NVIC_SetPriority(UP_COMM_UARTX_IRQn,2);//�ж����ȼ�����
+//	NVIC_SetPriority(UP_COMM_UARTX_IRQn,4);//�ж����ȼ�����
 //	NVIC_EnableIRQ(UP_COMM_UARTX_IRQn);		//�жϷ�������
 	
 	UARTx_CSR_RXEN_Setable(UP_COMM_UARTX, ENABLE);  //�򿪽���ʹ��
@@ -250,8 +293,10 @@
 	AltFunIO(WRC_RX_PORT, WRC_RX_PIN, ALTFUN_NORMAL);	
 	
 	//UART����ʱ��Դѡ��   ֻ��UART0��1��Ҫѡ��  ����UART�˿��ݲ���Ҫ  ֱ��ע�ͼ���
-	if((WRC_UARTX==UART0)||(WRC_UARTX==UART1))
+	if(WRC_UARTX==UART0)
 		UART_para.ClockSrc = CMU_OPCCR1_UART0CKS_APBCLK;		//UART0����ʱ��ѡ��	
+	else if(WRC_UARTX==UART1)
+		UART_para.ClockSrc = CMU_OPCCR1_UART1CKS_APBCLK;		//UART1����ʱ��ѡ��	
 	
 	UART_para.BaudRate = BaudRate;
 	UART_para.ParityBit = ParityBit;			//��żУ��
@@ -267,10 +312,17 @@
 //	UARTx_IER_RXBF_IE_Setable(WRC_UARTX, ENABLE);//���ջ������ж�ʹ�� ��Ҫʹ�ý����жϴ򿪴˴�����
 //	UARTx_IER_TXSE_IE_Setable(WRC_UARTX, ENABLE)��//���ͻ�����ҷ�����λ�Ĵ������ж�ʹ�� ��Ҫʹ�÷����жϴ򿪴˴�����
 	
-	/*NVIC�ж����ȼ��Լ��Ƿ���ж�����*/
 	NVIC_DisableIRQ(WRC_UARTX_IRQn);
-//	NVIC_SetPriority(WRC_UARTX_IRQn,2);//�ж����ȼ�����
-//	NVIC_EnableIRQ(WRC_UARTX_IRQn);		//�жϷ�������
+	UARTx_TODR_RXTO_LEN_Set(WRC_UARTX, 255);//ֻ��uart0��uart1�н��ճ�ʱ�ж�
+	UARTx_ISR_RXTO_Clr(WRC_UARTX);
+	UARTx_IER_RXTO_IE_Setable(WRC_UARTX, ENABLE);
+//	NVIC_EnableIRQ(WRC_UARTX_IRQn);
+	UARTx_CSR_RXTOEN_Setable(WRC_UARTX, ENABLE);
+	
+	/*NVIC�ж����ȼ��Լ��Ƿ���ж�����*/
+//	NVIC_DisableIRQ(WRC_UARTX_IRQn);
+	NVIC_SetPriority(WRC_UARTX_IRQn,2);//�ж����ȼ�����
+	NVIC_EnableIRQ(WRC_UARTX_IRQn);		//�жϷ�������
 	
 	UARTx_CSR_RXEN_Setable(WRC_UARTX, ENABLE);  //�򿪽���ʹ��
 	UARTx_CSR_TXEN_Setable(WRC_UARTX, ENABLE);  //�򿪷���ʹ��
@@ -279,7 +331,7 @@
 }
 
 
-void WRC_RX_DMA_CH0_Init(void)
+void WRC_RX_DMA_CH3_Init(void)
 {
 	DMA_InitTypeDef DMA_InitStructure;//DMA��ʼ�������ṹ��
 	
@@ -289,7 +341,7 @@
 	DMA_InitStructure.CHx = WRC_DMA_CHX;//DMAͨ��������
 	DMA_InitStructure.CHxPRI = DMA_CHxCR_CHxPRI_HIGH;//ͨ�����ȼ�����
 	DMA_InitStructure.CHxINC = DMA_CHxCR_CHxINC_INCREASE;//ͨ����ַ��������
-	DMA_InitStructure.CHxSSEL = DMA_CHxCR_CH0SSEL_UART2_RX;//����ͨ��ѡ��
+	DMA_InitStructure.CHxSSEL = DMA_CHxCR_CH3SSEL_UART1_RX;//����ͨ��ѡ��
 	DMA_InitStructure.CHxDIR = DMA_CHxCR_DIR_TO_RAM;//���ݴ��䷽������
 	DMA_InitStructure.CHxTSIZE = WRC_RECV_BUFF_LEN_MAX - 1;//ͨ�����䳤��
 	DMA_InitStructure.CHxRAMAD = (uint32)WRC_recv_buff;//Ŀ���ַ
@@ -311,7 +363,7 @@
 	DMA_Init(&DMA_InitStructure);//DMA���ò���д��
 }
 
-void WRC_RX_DMA_CH0_reload(void)
+void WRC_RX_DMA_CH3_reload(void)
 {
 	DMA_ISR_DMACHFT_Clr(WRC_DMA_CHX);
 	DMA_CHxCR_ChxEN_Setable(WRC_DMA_CHX, DISABLE);	 //ͨ��ʧ��

--
Gitblit v1.9.3