티스토리 뷰

입문

UART - 수신

Just4Fun 2016. 4. 3. 13:35

UART - 원리와 연결과 UART - 송신을 통해서 AVR의 UART 설정을 어떻게 하고 컴퓨터와의 통신은 어떻게 이루어 지는지 이미 설명하였다.  이번 글에서는 앞의 글에서 설정한 값들을 그대로 이용하여 AVR의 UART 수신에 대해서 설명하도록 하겠다.

이미 UART 송신을 위해서 UART설정은 해 둔 상태이므로 수신 코드만 구현하면 된다.  수신코드는 송신 코드와 유사하다.

UCSRA레지스터의 RXC 비트 값이 1이 되면 UDR레지스터에 데이터가 수신되었음을 알려주므로 RXC 비트가 1이 될때까지 UCSRA레지스터를 polling하고 있다가 RXC 비트값이 1이 되면 UDR레지스터 값을 읽으면 된다.

수신 기능을 확인하기 위하여 다음과 같은 코드를 만들어서 실행 시켜 본다.

위와 같이 하면 수신된 데이터를 바로 송신시켜 줌으로써 컴퓨터의 UART 터미널에서는 송신 데이터가 echo되는것처럼 보일것이다. 즉, 키보드로 어떤 글자를 치면 그 값이 터미널에 나타나게 되는것이다.

위의 그림은 키보드로 "hello avr UART"를 입력한것이 그대로 UART 터미널에 나타난것을 보여주고 있다.

이로써 AVR의 UART 송수신 기능이 모두 성공적으로 동작되는것을 확인하였다.

UART 수신기능이 너무 간단히 끝났음으로 한가지 기능을 더 설명해 보도록 하겠다.

앞의 글 UART - 송신은 한 글자만 내 보내는 코드만 있었는데, 문자열을 보내는 코드를 추가해 보도록 하겠다.

문자열을 UART로 내보내기 위해서 위의 코드에 나와있는 uart_puts()함수를 사용하면 된다.

위와 같이 코드를 수정하고 실행시켜보자.

위의 그림처럼 한 문장이 제대로 출력되는 것을 볼 수 있다.

여기에서 한번 생각해 봐야 할 부분이 있다.  위의 예제에서 보여지는 uart_puts()에 들어가는 글자수는 모두 25글자이다.  Baud rate를 4800으로 설정하였을 때 25글자를 전송하는데 걸리는 시간을 계산해 보자.

4800bps는 1초에 4800 비트를 전송한다는 뜻이므로 1비트를 전송하는데에는 1/4800초가 걸린다.   약 208usec이다.  UART에 설정된 데이터 크기가 8비트이고 start bit와 stop bit가 각각 1비트이므로 글자 하나를 보내기 위해서는 결국 10비트 크기의 데이터를 내 보내야하는 것이다.  25글자를 보내려면 250 비트를 송신하여야 한다.  시간으로 계산하면 250 * 208 = 52000usec = 52msec가 소요된다는 뜻이다.  52msec라는 시간이 짧게 보일수도 있겠지만 CPU 입장에서 보면 엄청나게 긴 시간이다.

AVR CPU는 1클럭에 하나의 명령어를 실행할 수 있다.  지금은 1MHz로 동작되므로 52msec동안 52000개의 명령어를 수행할 수 있다는 뜻이 된다.  만약 16MHz로 동작된다면 25개의 글자를 UART를 통해서 내 보내는 시간동안 832000개의 명령을 수행할 수 있다는 계산이 나온다.

이번 프로젝트에서 만든 프로그램을 컴파일 했을때 약 100개 정도의 명령어로 된 결과물이 나왔다.  그렇다는 얘기는 25글자를 내 보내는 시간동안 이 프로그램과 동일한 규모의 실행파일을 약 8000번 이상 반복해서 실행할 정도의 시간이라는 것이다.

그러므로 결론은, 가능하면 UART의 baud rate을 최대한 높여서 통신하는 것이 효율적이라는 것이고, 사정에 의해서 통신 속도를 높일 수 없다면 polling 구조로 송신 프로그램을 구현하기 보다는 인터럽트를 사용하는 구조의 프로그램으로 구현하는 것이 좋다는 것이다.



main.c


입문 과정 목차

'입문' 카테고리의 다른 글

UART - stdio  (1) 2016.04.03
UART - sprintf, my_printf  (0) 2016.04.03
UART - 송신  (6) 2016.04.01
UART - 원리와 연결  (2) 2016.03.29
_delay_ms  (10) 2016.03.27
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함