初级会员

- 积分
- 135
- 金钱
- 135
- 注册时间
- 2016-4-6
- 在线时间
- 53 小时
|
5金钱
void USART3_IRQHandler(void)
{
if(USART_GetITStatus(USART3,USART_IT_RXNE) != RESET)
{
UART3RxCompJudg = VALID_FLAG; UART3RxCompTime = 0;
Uart3OverTime = 0;
if( UART3_RxFullFlag == 0)
{
UART3_RxBuf[UART3_RxEnd++] = USART_ReceiveData(USART3); /* 保存接收到的数据 */
if(UART3_RxEnd >= UART3_RXBUF_SIZE)
UART3_RxEnd = 0;
if(UART3_RxEnd == UART3_RxHead)
UART3_RxFullFlag = 1;
UART3_RxEmptyFlag = 0;
}
}
USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
}
uint16 Uart3ReadBytes(uint8 *pBuf)
{
uint16 nEnd = 0;
uint16 Size = 0;
if(UART3_RxEmptyFlag == 0) //串口0接收数据缓冲区不为空
{
nEnd = UART3_RxEnd; //中断可能改变此值
UART3_RxFullFlag = 0;
if(UART3_RxHead < nEnd) //end > head
{
Size = nEnd - UART3_RxHead;
memcpy(pBuf,(uint8 *)&UART3_RxBuf[0] + UART3_RxHead, Size);
UART3_RxHead = nEnd;
}
else //head > end {
Size = UART3_RXBUF_SIZE + nEnd - UART3_RxHead;
memcpy(pBuf,(uint8 *)&UART3_RxBuf[0] + UART3_RxHead,UART3_RXBUF_SIZE - UART3_RxHead);
if(nEnd > 0)
memcpy(pBuf + UART3_RXBUF_SIZE - UART3_RxHead,(uint8 *)&UART3_RxBuf[0],nEnd);
UART3_RxHead = nEnd;
}
if(UART3_RxHead == UART3_RxEnd)
UART3_RxEmptyFlag = 1; //接收数据缓冲区空
}
else
Size = 0;
memset((uint8*)&UART3_RxBuf[0],0x00,512);
return Size;
}
最近看到这段代码,有点不理解,个人初学,多了UART3_RxEnd,UART3_RxHead几个寄存量以及相互比较关系,想请问是什么设计思路,谢谢。
|
|