forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

jinlicong
2024-06-19 6e3f1f560d618b37ee1a47fa2b0f682b70c3ef1c
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);    //ͨµÀʧÄÜ