forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

jinlicong
2024-05-16 5ac1d0febb8de5e91ce2463baea68ddac3f66091
HARDWARE/UART/uart.c
@@ -4,8 +4,8 @@
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};
u16 USART_RX_STA = 0; //½ÓÊÕ״̬±ê¼Ç
//void Usmart_RecvDataProcess(UC_RECV_PARA_T *usmart_recv_para_p)
//{
@@ -62,171 +62,91 @@
   }   
}
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¶Ë¿ÚÔݲ»ÐèÒª  Ö±½Ó×¢Êͼ´¿É
   if((RS485_READ_DATA_UARTX==UART0)||(RS485_READ_DATA_UARTX==UART1))
   UART_para.ClockSrc = CMU_OPCCR1_UART0CKS_APBCLK;      //UART0¹¤×÷ʱÖÓÑ¡Ôñ   
   UART_para.BaudRate = 115200;
   UART_para.BaudRate = BaudRate;
   UART_para.ParityBit = ParityBit;         //ÆæÅ¼Ð£Ñé
   if(ParityBit==NONE)
   UART_para.DataBit = Eight8Bit;   //Êý¾ÝλÊý
   UART_para.ParityBit = NONE;         //ÆæÅ¼Ð£Ñé
   UART_para.StopBit = OneBit;         //ֹͣλ
   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)£»//·¢ËÍ»º´æ¿ÕÇÒ·¢ËÍÒÆÎ»¼Ä´æÆ÷¿ÕÖжÏʹÄÜ ÐèҪʹÓ÷¢ËÍÖжϴò¿ª´Ë´¦ÉèÖÃ
   
   /*NVICÖжÏÓÅÏȼ¶ÒÔ¼°ÊÇ·ñ´ò¿ªÖжÏÅäÖÃ*/
   NVIC_DisableIRQ(UART0_IRQn);
   NVIC_DisableIRQ(RS485_READ_DATA_UARTX_IRQn);
//   NVIC_SetPriority(UART0_IRQn,2);//ÖжÏÓÅÏȼ¶ÅäÖÃ
//   NVIC_EnableIRQ(UART0_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)
{
   UART_SInitTypeDef UART_para;//UART³õʼ»¯½á¹¹Ìå
  CMU_ClocksType CMU_Clocks;//ϵͳ¸÷ʱÖÓÆµÂʽṹÌå  ÔÚ´ËÓë¼ÆËã²¨ÌØÂÊÓйØ
   DMA_InitTypeDef DMA_InitStructure;//DMA³õʼ»¯²ÎÊý½á¹¹Ìå
   
   /*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);
   CMU_PERCLK_SetableEx(DMACLK, ENABLE);//DMAʱÖÓʹÄÜ
   DMA_GCR_DMAEN_Setable(ENABLE);//DMA×ÜʹÄÜ
   
   //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;         //ֹͣλ
   DMA_InitStructure.CHx = DMA_CH3;//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;//ͨµÀ´«Êä´ø¿í
   
   CMU_GetClocksFreq(&CMU_Clocks);  //»ñȡϵͳ¸÷ʱÖÓÆµÂÊ
   UART_SInit(UART3, &UART_para,&CMU_Clocks);   //³õʼ»¯uart
   DMA_InitStructure.CHxFTIE = DISABLE;   //ͨµÀ´«ÊäÍê³ÉÖжÏʹÄÜ
   DMA_InitStructure.CHxHTIE = DISABLE;   //ͨµÀ´«Êä°ë³ÌÖÕ¶ËʹÄÜ
   
//   UARTx_IER_RXBF_IE_Setable(MODBUS_UART, ENABLE);//½ÓÊÕ»º´æÂúÖжÏʹÄÜ ÐèҪʹÓýÓÊÕÖжϴò¿ª´Ë´¦ÉèÖÃ
//   UARTx_IER_TXSE_IE_Setable(MODBUS_UART, ENABLE)£»//·¢ËÍ»º´æ¿ÕÇÒ·¢ËÍÒÆÎ»¼Ä´æÆ÷¿ÕÖжÏʹÄÜ ÐèҪʹÓ÷¢ËÍÖжϴò¿ª´Ë´¦ÉèÖÃ
   DMA_InitStructure.CHxEN   = ENABLE;    //ͨµÀʹÄÜ
   
   /*NVICÖжÏÓÅÏȼ¶ÒÔ¼°ÊÇ·ñ´ò¿ªÖжÏÅäÖÃ*/
   NVIC_DisableIRQ(UART3_IRQn);
//   NVIC_SetPriority(UART3_IRQn,2);//ÖжÏÓÅÏȼ¶ÅäÖÃ
//   NVIC_EnableIRQ(UART3);      //ÖжϷþÎñº¯Êý¿ª
   NVIC_DisableIRQ(DMA_IRQn);
//   NVIC_SetPriority(DMA_IRQn,3);//ÖжÏÓÅÏȼ¶ÅäÖÃ
//   NVIC_EnableIRQ(DMA_IRQn);
   
   UARTx_CSR_RXEN_Setable(UART3, ENABLE);  //´ò¿ª½ÓÊÕʹÄÜ
   UARTx_CSR_TXEN_Setable(UART3, ENABLE);  //´ò¿ª·¢ËÍʹÄÜ
//   DMA_CHxCR_CHxFTIE_Setable(MODBUS_DMA_RX_CHANNEL,ENABLE);//ͨµÀ´«ÊäÍê³ÉÖжÏʹÄÜ
   
   UARTx_ISR_RXBF_Clr(UART3);
   DMA_ISR_DMACHFT_Clr(DMA_CH3);
   DMA_Init(&DMA_InitStructure);//DMAÅäÖòÎÊýдÈë
}
void Uart5_Init(void)
void RS485_read_data_RX_DMA_CH3_reload(void)
{
   UART_SInitTypeDef UART_para;//UART³õʼ»¯½á¹¹Ìå
  CMU_ClocksType CMU_Clocks;//ϵͳ¸÷ʱÖÓÆµÂʽṹÌå  ÔÚ´ËÓë¼ÆËã²¨ÌØÂÊÓйØ
   DMA_ISR_DMACHFT_Clr(DMA_CH3);
   DMA_CHxCR_ChxEN_Setable(DMA_CH3, DISABLE);    //ͨµÀʧÄÜ
   
   /*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);
   memset(RS485_read_data_recv_buff,0,sizeof(RS485_read_data_recv_buff));
   
   //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;         //ֹͣλ
   DMA_CHxMAR_Write(DMA_CH3, (uint32)RS485_read_data_recv_buff);
   
   CMU_GetClocksFreq(&CMU_Clocks);  //»ñȡϵͳ¸÷ʱÖÓÆµÂÊ
   UART_SInit(UART5, &UART_para,&CMU_Clocks);   //³õʼ»¯uart
//   UARTx_IER_RXBF_IE_Setable(MODBUS_UART, ENABLE);//½ÓÊÕ»º´æÂúÖжÏʹÄÜ ÐèҪʹÓýÓÊÕÖжϴò¿ª´Ë´¦ÉèÖÃ
//   UARTx_IER_TXSE_IE_Setable(MODBUS_UART, ENABLE)£»//·¢ËÍ»º´æ¿ÕÇÒ·¢ËÍÒÆÎ»¼Ä´æÆ÷¿ÕÖжÏʹÄÜ ÐèҪʹÓ÷¢ËÍÖжϴò¿ª´Ë´¦ÉèÖÃ
   /*NVICÖжÏÓÅÏȼ¶ÒÔ¼°ÊÇ·ñ´ò¿ªÖжÏÅäÖÃ*/
   NVIC_DisableIRQ(UART5_IRQn);
//   NVIC_SetPriority(UART5_IRQn,2);//ÖжÏÓÅÏȼ¶ÅäÖÃ
//   NVIC_EnableIRQ(UART5_IRQn);      //ÖжϷþÎñº¯Êý¿ª
   UARTx_CSR_RXEN_Setable(UART5, ENABLE);  //´ò¿ª½ÓÊÕʹÄÜ
   UARTx_CSR_TXEN_Setable(UART5, ENABLE);  //´ò¿ª·¢ËÍʹÄÜ
   UARTx_ISR_RXBF_Clr(UART5);
   DMA_CHxCR_ChxEN_Setable(DMA_CH3, ENABLE);    //ͨµÀʹÄÜ
}
void Uart0_RX_DMA_CH7_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_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_Init(&DMA_InitStructure);//DMAÅäÖòÎÊýдÈë
}
void Uart3_RX_DMA_CH1_Init(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ÅäÖòÎÊýдÈë
}
void Uart5_RX_DMA_CH5_Init(void)
{