forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

jinlicong
2024-05-28 6b0d1f644233b2984d2a87553de598879cf05caf
HARDWARE/UART/uart.c
@@ -4,8 +4,10 @@
unsigned char UART1_temp[UART0_RECV_BUFF_LEN_MAX] = {0}; // USART1½ÓÊÕÊý¾Ý»º´æ
uint8_t USART1_RX_BUF[UART0_RECV_BUFF_LEN_MAX] = {0};
uint8_t RS485_read_data_recv_buff[RS485_READ_DATA_RECV_BUFF_LEN_MAX] = {0};
uint8_t up_comm_recv_buff[UP_COMM_RECV_BUFF_LEN_MAX] = {0};
uint8_t WRC_recv_buff[WRC_RECV_BUFF_LEN_MAX] = {0};
u16 USART_RX_STA = 0; //½ÓÊÕ״̬±ê¼Ç
//void Usmart_RecvDataProcess(UC_RECV_PARA_T *usmart_recv_para_p)
//{
@@ -62,204 +64,264 @@
   }   
}
void Uart0_Init(void)
void RS485_read_data_uart_Init(uint32_t   BaudRate,UART_ParityBitTypeDef   ParityBit,UART_StopBitTypeDef      StopBit)
{
   UART_SInitTypeDef UART_para;//UART³õʼ»¯½á¹¹Ìå
  CMU_ClocksType CMU_Clocks;//ϵͳ¸÷ʱÖÓÆµÂʽṹÌå  ÔÚ´ËÓë¼ÆËã²¨ÌØÂÊÓйØ
   
   /*UART0 IO ÅäÖÃ*/
   CMU_PERCLK_SetableEx(PADCLK, ENABLE);  //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý
   AltFunIO(IR_RX_PORT, IR_RX_PIN, ALTFUN_NORMAL);      //PF3 UART0 RX
   AltFunIO(IR_TX_PORT, IR_TX_PIN, ALTFUN_NORMAL);      //PF4 UART0 TX
   AltFunIO(RS485_READ_DATA_TX_PORT, RS485_READ_DATA_TX_PIN, ALTFUN_NORMAL);
   AltFunIO(RS485_READ_DATA_RX_PORT, RS485_READ_DATA_RX_PIN, ALTFUN_NORMAL);
   
   //UART¹¤×÷ʱÖÓÔ´Ñ¡Ôñ   Ö»ÓÐUART0¡¢1ÐèҪѡÔñ  ÆäËûUART¶Ë¿ÚÔݲ»ÐèÒª  Ö±½Ó×¢Êͼ´¿É
   UART_para.ClockSrc = CMU_OPCCR1_UART0CKS_APBCLK;      //UART0¹¤×÷ʱÖÓÑ¡Ôñ
   UART_para.BaudRate = 115200;
   UART_para.DataBit = Eight8Bit;   //Êý¾ÝλÊý
   UART_para.ParityBit = NONE;         //ÆæÅ¼Ð£Ñé
   UART_para.StopBit = OneBit;         //ֹͣλ
   if((RS485_READ_DATA_UARTX==UART0)||(RS485_READ_DATA_UARTX==UART1))
      UART_para.ClockSrc = CMU_OPCCR1_UART0CKS_APBCLK;      //UART0¹¤×÷ʱÖÓÑ¡Ôñ
   UART_para.BaudRate = BaudRate;
   UART_para.ParityBit = ParityBit;         //ÆæÅ¼Ð£Ñé
   if(ParityBit==NONE)
      UART_para.DataBit = Eight8Bit;   //Êý¾ÝλÊý
   else
      UART_para.DataBit = Nine9Bit;   //Êý¾ÝλÊý
   UART_para.StopBit = StopBit;         //ֹͣλ
   
   CMU_GetClocksFreq(&CMU_Clocks);  //»ñȡϵͳ¸÷ʱÖÓÆµÂÊ  
   UART_SInit(UART0, &UART_para,&CMU_Clocks);   //³õʼ»¯uart
   UART_SInit(RS485_READ_DATA_UARTX, &UART_para,&CMU_Clocks);   //³õʼ»¯uart
   
//   UARTx_IER_RXBF_IE_Setable(MODBUS_UART, ENABLE);//½ÓÊÕ»º´æÂúÖжÏʹÄÜ ÐèҪʹÓýÓÊÕÖжϴò¿ª´Ë´¦ÉèÖÃ
//   UARTx_IER_TXSE_IE_Setable(MODBUS_UART, ENABLE)£»//·¢ËÍ»º´æ¿ÕÇÒ·¢ËÍÒÆÎ»¼Ä´æÆ÷¿ÕÖжÏʹÄÜ ÐèҪʹÓ÷¢ËÍÖжϴò¿ª´Ë´¦ÉèÖÃ
//   UARTx_IER_RXBF_IE_Setable(RS485_READ_DATA_UARTX, ENABLE);//½ÓÊÕ»º´æÂúÖжÏʹÄÜ ÐèҪʹÓýÓÊÕÖжϴò¿ª´Ë´¦ÉèÖÃ
//   UARTx_IER_TXSE_IE_Setable(RS485_READ_DATA_UARTX, ENABLE)£»//·¢ËÍ»º´æ¿ÕÇÒ·¢ËÍÒÆÎ»¼Ä´æÆ÷¿ÕÖжÏʹÄÜ ÐèҪʹÓ÷¢ËÍÖжϴò¿ª´Ë´¦ÉèÖÃ
   
   /*NVICÖжÏÓÅÏȼ¶ÒÔ¼°ÊÇ·ñ´ò¿ªÖжÏÅäÖÃ*/
   NVIC_DisableIRQ(UART0_IRQn);
//   NVIC_SetPriority(UART0_IRQn,2);//ÖжÏÓÅÏȼ¶ÅäÖÃ
//   NVIC_EnableIRQ(UART0_IRQn);      //ÖжϷþÎñº¯Êý¿ª
   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(UART0, ENABLE);  //´ò¿ª½ÓÊÕʹÄÜ
   UARTx_CSR_TXEN_Setable(UART0, ENABLE);  //´ò¿ª·¢ËÍʹÄÜ
   UARTx_CSR_RXEN_Setable(RS485_READ_DATA_UARTX, ENABLE);  //´ò¿ª½ÓÊÕʹÄÜ
   UARTx_CSR_TXEN_Setable(RS485_READ_DATA_UARTX, ENABLE);  //´ò¿ª·¢ËÍʹÄÜ
   
   UARTx_ISR_RXBF_Clr(UART0);
   UARTx_ISR_RXBF_Clr(RS485_READ_DATA_UARTX);
}
void Uart3_Init(void)
void RS485_read_data_RX_DMA_CH3_Init(void)
{
   DMA_InitTypeDef DMA_InitStructure;//DMA³õʼ»¯²ÎÊý½á¹¹Ìå
   CMU_PERCLK_SetableEx(DMACLK, ENABLE);//DMAʱÖÓʹÄÜ
   DMA_GCR_DMAEN_Setable(ENABLE);//DMA×ÜʹÄÜ
   DMA_InitStructure.CHx = RS485_READ_DATA_DMA_CHX;//DMAͨµÀºÅÉèÖÃ
   DMA_InitStructure.CHxPRI = DMA_CHxCR_CHxPRI_HIGH;//ͨµÀÓÅÏȼ¶ÉèÖÃ
   DMA_InitStructure.CHxINC = DMA_CHxCR_CHxINC_INCREASE;//ͨµÀµØÖ·Ôö³¤·½Ïò
   DMA_InitStructure.CHxSSEL = DMA_CHxCR_CH3SSEL_UART1_RX;//ÍâÉèͨµÀÑ¡Ôñ
   DMA_InitStructure.CHxDIR = DMA_CHxCR_DIR_TO_RAM;//Êý¾Ý´«Êä·½ÏòÉèÖÃ
   DMA_InitStructure.CHxTSIZE = RS485_READ_DATA_RECV_BUFF_LEN_MAX - 1;//ͨµÀ´«Ê䳤¶È
   DMA_InitStructure.CHxRAMAD = (uint32)RS485_read_data_recv_buff;//Ä¿±êµØÖ·
   DMA_InitStructure.CHxBDW = DMA_CHxCR_BDW_8BITS;//ͨµÀ´«Êä´ø¿í
   DMA_InitStructure.CHxFTIE = DISABLE;   //ͨµÀ´«ÊäÍê³ÉÖжÏʹÄÜ
   DMA_InitStructure.CHxHTIE = DISABLE;   //ͨµÀ´«Êä°ë³ÌÖÕ¶ËʹÄÜ
   DMA_InitStructure.CHxEN   = ENABLE;    //ͨµÀʹÄÜ
   NVIC_DisableIRQ(DMA_IRQn);
//   NVIC_SetPriority(DMA_IRQn,3);//ÖжÏÓÅÏȼ¶ÅäÖÃ
//   NVIC_EnableIRQ(DMA_IRQn);
//   DMA_CHxCR_CHxFTIE_Setable(MODBUS_DMA_RX_CHANNEL,ENABLE);//ͨµÀ´«ÊäÍê³ÉÖжÏʹÄÜ
   DMA_ISR_DMACHFT_Clr(RS485_READ_DATA_DMA_CHX);
   DMA_Init(&DMA_InitStructure);//DMAÅäÖòÎÊýдÈë
}
void RS485_read_data_RX_DMA_CH3_reload(void)
{
   DMA_ISR_DMACHFT_Clr(RS485_READ_DATA_DMA_CHX);
   DMA_CHxCR_ChxEN_Setable(RS485_READ_DATA_DMA_CHX, DISABLE);    //ͨµÀʧÄÜ
   memset(RS485_read_data_recv_buff,0,sizeof(RS485_read_data_recv_buff));
   DMA_CHxMAR_Write(RS485_READ_DATA_DMA_CHX, (uint32)RS485_read_data_recv_buff);
   DMA_CHxCR_ChxEN_Setable(RS485_READ_DATA_DMA_CHX, ENABLE);    //ͨµÀʹÄÜ
}
//ÉÏλ»ú½Ó¿Ú
void up_comm_uart_Init(uint32_t   BaudRate,UART_ParityBitTypeDef   ParityBit,UART_StopBitTypeDef      StopBit)
{
   UART_SInitTypeDef UART_para;//UART³õʼ»¯½á¹¹Ìå
  CMU_ClocksType CMU_Clocks;//ϵͳ¸÷ʱÖÓÆµÂʽṹÌå  ÔÚ´ËÓë¼ÆËã²¨ÌØÂÊÓйØ
   
   /*UART0 IO ÅäÖÃ*/
   CMU_PERCLK_SetableEx(PADCLK, ENABLE);  //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý
   AltFunIO(MAIN_TX_PORT, MAIN_TX_PIN, ALTFUN_NORMAL);
   AltFunIO(MAIN_RX_PORT, MAIN_RX_PIN, ALTFUN_NORMAL);
   AltFunIO(UP_COMM_TX_PORT, UP_COMM_TX_PIN, ALTFUN_NORMAL);
   AltFunIO(UP_COMM_RX_PORT, UP_COMM_RX_PIN, ALTFUN_NORMAL);
   OutputIO(UP_COMM_RE_PORT,UP_COMM_RE_PIN,OUT_PUSHPULL);
   UP_COMM_RE_RECV_EN;
   
   //UART¹¤×÷ʱÖÓÔ´Ñ¡Ôñ   Ö»ÓÐUART0¡¢1ÐèҪѡÔñ  ÆäËûUART¶Ë¿ÚÔݲ»ÐèÒª  Ö±½Ó×¢Êͼ´¿É
//   UART_para.ClockSrc = CMU_OPCCR1_UART0CKS_APBCLK;      //UART0¹¤×÷ʱÖÓÑ¡Ôñ
   UART_para.BaudRate = 115200;
   UART_para.DataBit = Eight8Bit;   //Êý¾ÝλÊý
   UART_para.ParityBit = NONE;         //ÆæÅ¼Ð£Ñé
   UART_para.StopBit = OneBit;         //ֹͣλ
   if((UP_COMM_UARTX==UART0)||(UP_COMM_UARTX==UART1))
      UART_para.ClockSrc = CMU_OPCCR1_UART0CKS_APBCLK;      //UART0¹¤×÷ʱÖÓÑ¡Ôñ
   UART_para.BaudRate = BaudRate;
   UART_para.ParityBit = ParityBit;         //ÆæÅ¼Ð£Ñé
   if(ParityBit==NONE)
      UART_para.DataBit = Eight8Bit;   //Êý¾ÝλÊý
   else
      UART_para.DataBit = Nine9Bit;   //Êý¾ÝλÊý
   UART_para.StopBit = StopBit;         //ֹͣλ
   
   CMU_GetClocksFreq(&CMU_Clocks);  //»ñȡϵͳ¸÷ʱÖÓÆµÂÊ  
   UART_SInit(UART3, &UART_para,&CMU_Clocks);   //³õʼ»¯uart
   UART_SInit(UP_COMM_UARTX, &UART_para,&CMU_Clocks);   //³õʼ»¯uart
   
//   UARTx_IER_RXBF_IE_Setable(MODBUS_UART, ENABLE);//½ÓÊÕ»º´æÂúÖжÏʹÄÜ ÐèҪʹÓýÓÊÕÖжϴò¿ª´Ë´¦ÉèÖÃ
//   UARTx_IER_TXSE_IE_Setable(MODBUS_UART, ENABLE)£»//·¢ËÍ»º´æ¿ÕÇÒ·¢ËÍÒÆÎ»¼Ä´æÆ÷¿ÕÖжÏʹÄÜ ÐèҪʹÓ÷¢ËÍÖжϴò¿ª´Ë´¦ÉèÖÃ
//   UARTx_IER_RXBF_IE_Setable(UP_COMM_UARTX, ENABLE);//½ÓÊÕ»º´æÂúÖжÏʹÄÜ ÐèҪʹÓýÓÊÕÖжϴò¿ª´Ë´¦ÉèÖÃ
//   UARTx_IER_TXSE_IE_Setable(UP_COMM_UARTX, ENABLE)£»//·¢ËÍ»º´æ¿ÕÇÒ·¢ËÍÒÆÎ»¼Ä´æÆ÷¿ÕÖжÏʹÄÜ ÐèҪʹÓ÷¢ËÍÖжϴò¿ª´Ë´¦ÉèÖÃ
   
   /*NVICÖжÏÓÅÏȼ¶ÒÔ¼°ÊÇ·ñ´ò¿ªÖжÏÅäÖÃ*/
   NVIC_DisableIRQ(UART3_IRQn);
//   NVIC_SetPriority(UART3_IRQn,2);//ÖжÏÓÅÏȼ¶ÅäÖÃ
//   NVIC_EnableIRQ(UART3);      //ÖжϷþÎñº¯Êý¿ª
   NVIC_DisableIRQ(UP_COMM_UARTX_IRQn);
//   NVIC_SetPriority(UP_COMM_UARTX_IRQn,2);//ÖжÏÓÅÏȼ¶ÅäÖÃ
//   NVIC_EnableIRQ(UP_COMM_UARTX_IRQn);      //ÖжϷþÎñº¯Êý¿ª
   
   UARTx_CSR_RXEN_Setable(UART3, ENABLE);  //´ò¿ª½ÓÊÕʹÄÜ
   UARTx_CSR_TXEN_Setable(UART3, ENABLE);  //´ò¿ª·¢ËÍʹÄÜ
   UARTx_CSR_RXEN_Setable(UP_COMM_UARTX, ENABLE);  //´ò¿ª½ÓÊÕʹÄÜ
   UARTx_CSR_TXEN_Setable(UP_COMM_UARTX, ENABLE);  //´ò¿ª·¢ËÍʹÄÜ
   
   UARTx_ISR_RXBF_Clr(UART3);
   UARTx_ISR_RXBF_Clr(UP_COMM_UARTX);
}
void Uart5_Init(void)
void up_comm_RX_DMA_CH2_Init(void)
{
   DMA_InitTypeDef DMA_InitStructure;//DMA³õʼ»¯²ÎÊý½á¹¹Ìå
   CMU_PERCLK_SetableEx(DMACLK, ENABLE);//DMAʱÖÓʹÄÜ
   DMA_GCR_DMAEN_Setable(ENABLE);//DMA×ÜʹÄÜ
   DMA_InitStructure.CHx = UP_COMM_DMA_CHX;//DMAͨµÀºÅÉèÖÃ
   DMA_InitStructure.CHxPRI = DMA_CHxCR_CHxPRI_HIGH;//ͨµÀÓÅÏȼ¶ÉèÖÃ
   DMA_InitStructure.CHxINC = DMA_CHxCR_CHxINC_INCREASE;//ͨµÀµØÖ·Ôö³¤·½Ïò
   DMA_InitStructure.CHxSSEL = DMA_CHxCR_CH2SSEL_UART5_RX;//ÍâÉèͨµÀÑ¡Ôñ
   DMA_InitStructure.CHxDIR = DMA_CHxCR_DIR_TO_RAM;//Êý¾Ý´«Êä·½ÏòÉèÖÃ
   DMA_InitStructure.CHxTSIZE = UP_COMM_RECV_BUFF_LEN_MAX - 1;//ͨµÀ´«Ê䳤¶È
   DMA_InitStructure.CHxRAMAD = (uint32)up_comm_recv_buff;//Ä¿±êµØÖ·
   DMA_InitStructure.CHxBDW = DMA_CHxCR_BDW_8BITS;//ͨµÀ´«Êä´ø¿í
   DMA_InitStructure.CHxFTIE = DISABLE;   //ͨµÀ´«ÊäÍê³ÉÖжÏʹÄÜ
   DMA_InitStructure.CHxHTIE = DISABLE;   //ͨµÀ´«Êä°ë³ÌÖÕ¶ËʹÄÜ
   DMA_InitStructure.CHxEN   = ENABLE;    //ͨµÀʹÄÜ
   NVIC_DisableIRQ(DMA_IRQn);
//   NVIC_SetPriority(DMA_IRQn,3);//ÖжÏÓÅÏȼ¶ÅäÖÃ
//   NVIC_EnableIRQ(DMA_IRQn);
//   DMA_CHxCR_CHxFTIE_Setable(MODBUS_DMA_RX_CHANNEL,ENABLE);//ͨµÀ´«ÊäÍê³ÉÖжÏʹÄÜ
   DMA_ISR_DMACHFT_Clr(UP_COMM_DMA_CHX);
   DMA_Init(&DMA_InitStructure);//DMAÅäÖòÎÊýдÈë
}
void up_comm_RX_DMA_CH2_reload(void)
{
   DMA_ISR_DMACHFT_Clr(UP_COMM_DMA_CHX);
   DMA_CHxCR_ChxEN_Setable(UP_COMM_DMA_CHX, DISABLE);    //ͨµÀʧÄÜ
   memset(up_comm_recv_buff,0,sizeof(up_comm_recv_buff));
   DMA_CHxMAR_Write(UP_COMM_DMA_CHX, (uint32)up_comm_recv_buff);
   DMA_CHxCR_ChxEN_Setable(UP_COMM_DMA_CHX, ENABLE);    //ͨµÀʹÄÜ
}
void WRC_uart_Init(uint32_t   BaudRate,UART_ParityBitTypeDef   ParityBit,UART_StopBitTypeDef      StopBit)
{
   UART_SInitTypeDef UART_para;//UART³õʼ»¯½á¹¹Ìå
  CMU_ClocksType CMU_Clocks;//ϵͳ¸÷ʱÖÓÆµÂʽṹÌå  ÔÚ´ËÓë¼ÆËã²¨ÌØÂÊÓйØ
   
   /*UART0 IO ÅäÖÃ*/
   CMU_PERCLK_SetableEx(PADCLK, ENABLE);  //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý
   AltFunIO(GPRS_TX_PORT, GPRS_TX_PIN, ALTFUN_NORMAL);
   AltFunIO(GPRS_RX_PORT, GPRS_RX_PIN, ALTFUN_NORMAL);
   AltFunIO(WRC_TX_PORT, WRC_TX_PIN, ALTFUN_NORMAL);
   AltFunIO(WRC_RX_PORT, WRC_RX_PIN, ALTFUN_NORMAL);
   
   //UART¹¤×÷ʱÖÓÔ´Ñ¡Ôñ   Ö»ÓÐUART0¡¢1ÐèҪѡÔñ  ÆäËûUART¶Ë¿ÚÔݲ»ÐèÒª  Ö±½Ó×¢Êͼ´¿É
//   UART_para.ClockSrc = CMU_OPCCR1_UART0CKS_APBCLK;      //UART0¹¤×÷ʱÖÓÑ¡Ôñ
   UART_para.BaudRate = 115200;
   UART_para.DataBit = Eight8Bit;   //Êý¾ÝλÊý
   UART_para.ParityBit = NONE;         //ÆæÅ¼Ð£Ñé
   UART_para.StopBit = OneBit;         //ֹͣλ
   if((WRC_UARTX==UART0)||(WRC_UARTX==UART1))
      UART_para.ClockSrc = CMU_OPCCR1_UART0CKS_APBCLK;      //UART0¹¤×÷ʱÖÓÑ¡Ôñ
   UART_para.BaudRate = BaudRate;
   UART_para.ParityBit = ParityBit;         //ÆæÅ¼Ð£Ñé
   if(ParityBit==NONE)
      UART_para.DataBit = Eight8Bit;   //Êý¾ÝλÊý
   else
      UART_para.DataBit = Nine9Bit;   //Êý¾ÝλÊý
   UART_para.StopBit = StopBit;         //ֹͣλ
   
   CMU_GetClocksFreq(&CMU_Clocks);  //»ñȡϵͳ¸÷ʱÖÓÆµÂÊ  
   UART_SInit(UART5, &UART_para,&CMU_Clocks);   //³õʼ»¯uart
   UART_SInit(WRC_UARTX, &UART_para,&CMU_Clocks);   //³õʼ»¯uart
   
//   UARTx_IER_RXBF_IE_Setable(MODBUS_UART, ENABLE);//½ÓÊÕ»º´æÂúÖжÏʹÄÜ ÐèҪʹÓýÓÊÕÖжϴò¿ª´Ë´¦ÉèÖÃ
//   UARTx_IER_TXSE_IE_Setable(MODBUS_UART, ENABLE)£»//·¢ËÍ»º´æ¿ÕÇÒ·¢ËÍÒÆÎ»¼Ä´æÆ÷¿ÕÖжÏʹÄÜ ÐèҪʹÓ÷¢ËÍÖжϴò¿ª´Ë´¦ÉèÖÃ
//   UARTx_IER_RXBF_IE_Setable(WRC_UARTX, ENABLE);//½ÓÊÕ»º´æÂúÖжÏʹÄÜ ÐèҪʹÓýÓÊÕÖжϴò¿ª´Ë´¦ÉèÖÃ
//   UARTx_IER_TXSE_IE_Setable(WRC_UARTX, ENABLE)£»//·¢ËÍ»º´æ¿ÕÇÒ·¢ËÍÒÆÎ»¼Ä´æÆ÷¿ÕÖжÏʹÄÜ ÐèҪʹÓ÷¢ËÍÖжϴò¿ª´Ë´¦ÉèÖÃ
   
   /*NVICÖжÏÓÅÏȼ¶ÒÔ¼°ÊÇ·ñ´ò¿ªÖжÏÅäÖÃ*/
   NVIC_DisableIRQ(UART5_IRQn);
//   NVIC_SetPriority(UART5_IRQn,2);//ÖжÏÓÅÏȼ¶ÅäÖÃ
//   NVIC_EnableIRQ(UART5_IRQn);      //ÖжϷþÎñº¯Êý¿ª
   NVIC_DisableIRQ(WRC_UARTX_IRQn);
//   NVIC_SetPriority(WRC_UARTX_IRQn,2);//ÖжÏÓÅÏȼ¶ÅäÖÃ
//   NVIC_EnableIRQ(WRC_UARTX_IRQn);      //ÖжϷþÎñº¯Êý¿ª
   
   UARTx_CSR_RXEN_Setable(UART5, ENABLE);  //´ò¿ª½ÓÊÕʹÄÜ
   UARTx_CSR_TXEN_Setable(UART5, ENABLE);  //´ò¿ª·¢ËÍʹÄÜ
   UARTx_CSR_RXEN_Setable(WRC_UARTX, ENABLE);  //´ò¿ª½ÓÊÕʹÄÜ
   UARTx_CSR_TXEN_Setable(WRC_UARTX, ENABLE);  //´ò¿ª·¢ËÍʹÄÜ
   
   UARTx_ISR_RXBF_Clr(UART5);
   UARTx_ISR_RXBF_Clr(WRC_UARTX);
}
void Uart0_RX_DMA_CH7_Init(void)
void WRC_RX_DMA_CH0_Init(void)
{
//   DMA_InitTypeDef DMA_InitStructure;//DMA³õʼ»¯²ÎÊý½á¹¹Ìå
//
//   CMU_PERCLK_SetableEx(DMACLK, ENABLE);//DMAʱÖÓʹÄÜ
//   DMA_GCR_DMAEN_Setable(ENABLE);//DMA×ÜʹÄÜ
//
//   DMA_InitStructure.CHx = DMA_CH7;//DMAͨµÀºÅÉèÖÃ
//   DMA_InitStructure.CHxPRI = DMA_CHxCR_CHxPRI_HIGH;//ͨµÀÓÅÏȼ¶ÉèÖÃ
//   DMA_InitStructure.CHxINC = DMA_CHxCR_CHxINC_INCREASE;//ͨµÀµØÖ·Ôö³¤·½Ïò
//   DMA_InitStructure.CHxSSEL = DMA_CHxCR_CH7SSEL_UART0_RX;//ÍâÉèͨµÀÑ¡Ôñ
//   DMA_InitStructure.CHxDIR = DMA_CHxCR_DIR_TO_RAM;//Êý¾Ý´«Êä·½ÏòÉèÖÃ
//   DMA_InitStructure.CHxTSIZE = UC_RECV_LEN_MAX - 1;//ͨµÀ´«Ê䳤¶È
//   DMA_InitStructure.CHxRAMAD = (uint32)uc_recv_para_g.uc_recv_buf_union.uc_recv_buf;//Ä¿±êµØÖ·
//   DMA_InitStructure.CHxBDW = DMA_CHxCR_BDW_8BITS;//ͨµÀ´«Êä´ø¿í
//
//   DMA_InitStructure.CHxFTIE = DISABLE;   //ͨµÀ´«ÊäÍê³ÉÖжÏʹÄÜ
//   DMA_InitStructure.CHxHTIE = DISABLE;   //ͨµÀ´«Êä°ë³ÌÖÕ¶ËʹÄÜ
   DMA_InitTypeDef DMA_InitStructure;//DMA³õʼ»¯²ÎÊý½á¹¹Ìå
   CMU_PERCLK_SetableEx(DMACLK, ENABLE);//DMAʱÖÓʹÄÜ
   DMA_GCR_DMAEN_Setable(ENABLE);//DMA×ÜʹÄÜ
   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.CHxDIR = DMA_CHxCR_DIR_TO_RAM;//Êý¾Ý´«Êä·½ÏòÉèÖÃ
   DMA_InitStructure.CHxTSIZE = WRC_RECV_BUFF_LEN_MAX - 1;//ͨµÀ´«Ê䳤¶È
   DMA_InitStructure.CHxRAMAD = (uint32)WRC_recv_buff;//Ä¿±êµØÖ·
   DMA_InitStructure.CHxBDW = DMA_CHxCR_BDW_8BITS;//ͨµÀ´«Êä´ø¿í
   DMA_InitStructure.CHxFTIE = DISABLE;   //ͨµÀ´«ÊäÍê³ÉÖжÏʹÄÜ
   DMA_InitStructure.CHxHTIE = DISABLE;   //ͨµÀ´«Êä°ë³ÌÖÕ¶ËʹÄÜ
//   DMA_InitStructure.CHxEN   = ENABLE;    //ͨµÀʹÄÜ
//
//   NVIC_DisableIRQ(DMA_IRQn);
////   NVIC_SetPriority(DMA_IRQn,3);//ÖжÏÓÅÏȼ¶ÅäÖÃ
////   NVIC_EnableIRQ(DMA_IRQn);
//
////   DMA_CHxCR_CHxFTIE_Setable(MODBUS_DMA_RX_CHANNEL,ENABLE);//ͨµÀ´«ÊäÍê³ÉÖжÏʹÄÜ
   DMA_InitStructure.CHxEN   = ENABLE;    //ͨµÀʹÄÜ
   NVIC_DisableIRQ(DMA_IRQn);
//   NVIC_SetPriority(DMA_IRQn,3);//ÖжÏÓÅÏȼ¶ÅäÖÃ
//   NVIC_EnableIRQ(DMA_IRQn);
//   DMA_CHxCR_CHxFTIE_Setable(MODBUS_DMA_RX_CHANNEL,ENABLE);//ͨµÀ´«ÊäÍê³ÉÖжÏʹÄÜ
//   DMA_ISR_DMACHFT_Clr(DMA_CH7);
   DMA_ISR_DMACHFT_Clr(WRC_DMA_CHX);
//   DMA_Init(&DMA_InitStructure);//DMAÅäÖòÎÊýдÈë
   DMA_Init(&DMA_InitStructure);//DMAÅäÖòÎÊýдÈë
}
void Uart3_RX_DMA_CH1_Init(void)
void WRC_RX_DMA_CH0_reload(void)
{
//   DMA_InitTypeDef DMA_InitStructure;//DMA³õʼ»¯²ÎÊý½á¹¹Ìå
//
//   CMU_PERCLK_SetableEx(DMACLK, ENABLE);//DMAʱÖÓʹÄÜ
//   DMA_GCR_DMAEN_Setable(ENABLE);//DMA×ÜʹÄÜ
//
//   DMA_InitStructure.CHx = DMA_CH1;//DMAͨµÀºÅÉèÖÃ
//   DMA_InitStructure.CHxPRI = DMA_CHxCR_CHxPRI_HIGH;//ͨµÀÓÅÏȼ¶ÉèÖÃ
//   DMA_InitStructure.CHxINC = DMA_CHxCR_CHxINC_INCREASE;//ͨµÀµØÖ·Ôö³¤·½Ïò
//   DMA_InitStructure.CHxSSEL = DMA_CHxCR_CH1SSEL_UART3_RX;//ÍâÉèͨµÀÑ¡Ôñ
//   DMA_InitStructure.CHxDIR = DMA_CHxCR_DIR_TO_RAM;//Êý¾Ý´«Êä·½ÏòÉèÖÃ
//   DMA_InitStructure.CHxTSIZE = INTER_RECV_LEN_MAX - 1;//ͨµÀ´«Ê䳤¶È
//   DMA_InitStructure.CHxRAMAD = (uint32)inter_recv_para_g.inter_recv_union.inter_recv_buf;//Ä¿±êµØÖ·
//   DMA_InitStructure.CHxBDW = DMA_CHxCR_BDW_8BITS;//ͨµÀ´«Êä´ø¿í
//
//   DMA_InitStructure.CHxFTIE = DISABLE;   //ͨµÀ´«ÊäÍê³ÉÖжÏʹÄÜ
//   DMA_InitStructure.CHxHTIE = DISABLE;   //ͨµÀ´«Êä°ë³ÌÖÕ¶ËʹÄÜ
//   DMA_InitStructure.CHxEN   = ENABLE;    //ͨµÀʹÄÜ
//
//   NVIC_DisableIRQ(DMA_IRQn);
////   NVIC_SetPriority(DMA_IRQn,3);//ÖжÏÓÅÏȼ¶ÅäÖÃ
////   NVIC_EnableIRQ(DMA_IRQn);
//
////   DMA_CHxCR_CHxFTIE_Setable(MODBUS_DMA_RX_CHANNEL,ENABLE);//ͨµÀ´«ÊäÍê³ÉÖжÏʹÄÜ
//   DMA_ISR_DMACHFT_Clr(DMA_CH1);
//   DMA_Init(&DMA_InitStructure);//DMAÅäÖòÎÊýдÈë
   DMA_ISR_DMACHFT_Clr(WRC_DMA_CHX);
   DMA_CHxCR_ChxEN_Setable(WRC_DMA_CHX, DISABLE);    //ͨµÀʧÄÜ
   memset(WRC_recv_buff,0,sizeof(WRC_recv_buff));
   DMA_CHxMAR_Write(WRC_DMA_CHX, (uint32)WRC_recv_buff);
   DMA_CHxCR_ChxEN_Setable(WRC_DMA_CHX, ENABLE);    //ͨµÀʹÄÜ
}
void Uart5_RX_DMA_CH5_Init(void)
{
//   DMA_InitTypeDef DMA_InitStructure;//DMA³õʼ»¯²ÎÊý½á¹¹Ìå
//
//   CMU_PERCLK_SetableEx(DMACLK, ENABLE);//DMAʱÖÓʹÄÜ
//   DMA_GCR_DMAEN_Setable(ENABLE);//DMA×ÜʹÄÜ
//
//   DMA_InitStructure.CHx = DMA_CH5;//DMAͨµÀºÅÉèÖÃ
//   DMA_InitStructure.CHxPRI = DMA_CHxCR_CHxPRI_HIGH;//ͨµÀÓÅÏȼ¶ÉèÖÃ
//   DMA_InitStructure.CHxINC = DMA_CHxCR_CHxINC_INCREASE;//ͨµÀµØÖ·Ôö³¤·½Ïò
//   DMA_InitStructure.CHxSSEL = DMA_CHxCR_CH5SSEL_UART5_RX;//ÍâÉèͨµÀÑ¡Ôñ
//   DMA_InitStructure.CHxDIR = DMA_CHxCR_DIR_TO_RAM;//Êý¾Ý´«Êä·½ÏòÉèÖÃ
//   DMA_InitStructure.CHxTSIZE = GPRS_RECV_LEN_MAX - 1;//ͨµÀ´«Ê䳤¶È
//   DMA_InitStructure.CHxRAMAD = (uint32)gprs_module_para_g.gprs_recv_buf;//Ä¿±êµØÖ·
//   DMA_InitStructure.CHxBDW = DMA_CHxCR_BDW_8BITS;//ͨµÀ´«Êä´ø¿í
//
//   DMA_InitStructure.CHxFTIE = DISABLE;   //ͨµÀ´«ÊäÍê³ÉÖжÏʹÄÜ
//   DMA_InitStructure.CHxHTIE = DISABLE;   //ͨµÀ´«Êä°ë³ÌÖÕ¶ËʹÄÜ
//   DMA_InitStructure.CHxEN   = ENABLE;    //ͨµÀʹÄÜ
//
//   NVIC_DisableIRQ(DMA_IRQn);
////   NVIC_SetPriority(DMA_IRQn,3);//ÖжÏÓÅÏȼ¶ÅäÖÃ
////   NVIC_EnableIRQ(DMA_IRQn);
//
////   DMA_CHxCR_CHxFTIE_Setable(MODBUS_DMA_RX_CHANNEL,ENABLE);//ͨµÀ´«ÊäÍê³ÉÖжÏʹÄÜ
//   DMA_ISR_DMACHFT_Clr(DMA_CH5);
//   DMA_Init(&DMA_InitStructure);//DMAÅäÖòÎÊýдÈë
}