2014-04-10 2 views
0

그래서 나는 새로운 마이크로 컨트롤러를 업데이트하기로되어있는 오래된 코드를보고있다. 이전 코드에는 USART가 시작될 때 쓰레기가있는 경우이를 비우는 기능이 있습니다. 코드는 울부 짖는 소리입니다 :이 플러시 USART c 코드는 어떻게 작동합니까?

내가 아니라 우리가하지 않기 때문에이 더미에 저장되는 이유 레지스터 UDR1에서 USART에서 읽을 수있는 무언가가있는 한 계속됩니다 while 루프를 이해하는 것과 이제
#define RXC 7 

#define RX_COMPLETE (1<<RXC)  

void UART1_FLUSH(void){ 
    unsigned char dummy; 
    while (UCSR1A & RX_COMPLETE) dummy = UDR1; 
} 

필요해. 이제 나에게 설명하는 데 도움이 필요한 것은 왜 while 루프가 어떻게 작동하는지입니다.

답변

0

http://upcommons.upc.edu/pfc/bitstream/2099.1/10997/4/Annex3.pdf에서 UCSRnA를 찾고있는 코드는 USCR1A의 비트 7 ("RXCn : USART Receive Complete")이 꺼질 때까지 기다립니다.

그 문서는 비트 7 이 플래그 비트가 수신 버퍼의 읽지 않은 데이터가있을 때 설정하고이 버퍼가 비어받을 때 클리어에 대해 말한다.

(1<<RXC)가 0에 UCSR1A 결과로부터 판독 된 값의 수치 비트 7. 비트의 값 (&)이고 (비트가 오프 인 경우) 또는 (1<<RXC) (비트가에있는 경우). (1 < < 7)이 128이고 0이 아니므로 비트가 설정되면 루프가 입력됩니다.

관련 문제