AVR-GCC 에 내장된 함수들을 이용하여 시리얼 통신을 하는 프로그램을 작성합니다.
이번 강좌에서는 내장함수 putchar(), puts(), printf() 를 사용하겠습니다.
위의 함수들은 표준 (ANSI) C 에서는 표준출력장치(모니터) 로 문자와 문자열을 출력하는 함수입니다.
AVR-GCC 에서는 이 함수들을 시리얼 통신으로 문자와 문자열을 출력하는 함수로 사용하기 위하여 터미널 출럭 드라이버를 설정하여야 합니다.
아래의 프로그램에서 int uart_putchar(char c) 함수가 이 역할을 합니다.
main() 함수의 fdevopen(uart_putchar, 0, 0) 는 stdio.h 파일에서 다음과 같이 선언되어 있습니다.
extern FILE *fdevopen(int (*__put)(char), int (*__get)(void), int __opts);
fdevopen() 함수는 내장함수(putchar(), puts(), 등등) 와 출력 드라이버 함수 (uart_putchar()) 를 연결시켜 줍니다.
// I/O register definitions for ATmega8515
#include <avr/io.h>
#include <stdio.h>
int uart_putchar(char c)
{
if (c == "\n")
uart_putchar("\r");
loop_until_bit_is_set(UCSRA, UDRE);
UDR = c;
return 0;
}
int main(void)
{
FILE *fp;
fp = fdevopen(uart_putchar, 0, 0);
outp(0x18,UCSRB);
outp(5,UBRRL); // X-Tal=11.0592MHz BAUD=115200
printf("Hello ");
putchar(" ");
puts("World !!!\n\r");
fclose(fp);
while(1);
}