串口环形队列

2019-08-19 17:49发布

#define  UART1_RBUF_Size          4096                                //
u16 UART1_RX_ph;                                             //
u16 UART1_RX_pe;                                            //
u16 UART1_RX_buf_full;                                     //
u8  UART1_RX_BUF[UART1_RBUF_Size] ;              //
//***************************串口1接收环形队列*******************************
void USART1_IRQHandler(void)                                                                               //
{
        u8 Res;             
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)                                //
        {                                           
                USART_ClearITPendingBit(USART1,USART_IT_RXNE);                                 //
                Res = USART_ReceiveData(USART1);
                if(((UART1_RX_ph-UART1_RX_pe)&(UART1_RBUF_Size-1)) == (UART1_RBUF_Size-1))
                {
                        UART1_RX_buf_full = 1;
                        USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);                        //                                                               
                }                         
                else
                {
                        UART1_RX_BUF[UART1_RX_ph] = Res;
                        UART1_RX_ph++;
                        UART1_RX_ph &= (UART1_RBUF_Size-1);
                }
        }                                                                
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。