[t:/]$ 지식_

UART polling. timeout receive.

2009/03/14

타이머로 인터럽트 하나 잡아서 jiff 값을 1ms 정도에 한 번씩 증가시킨 후 정한 시간 내에 수신이 발생하지 않으면 탈출하도록 한다.

펌웨어상에서 프로그래밍할 때는 흔하게 고려해야 하는 부분.

unsigned char getb(int *timeout_err)
{
        int start;
                
        start = jiff;
        *timeout_err = uart_time_out;
                
        while (!(rUS1_SR & USART_RXRDY)) {
                
                if ((jiff - start) >= *timeout_err) {                
                        *timeout_err = -1;      // 타임아웃은 -1 이다.
                        return 0;                        // 의미없는 리턴 
                }
                continue;
        }         *timeout_err = 0;                        // 타임아웃이 아니다.
        return (unsigned char)rUS1_RHR;
}








[t:/] is not "technology - root". dawnsea, rss