ATmega88 EVM - Atmel START UART 테스트 예제
Atemel Studio로 새로운 Atmel START 프로젝트를 생성해서
"Add software component" 메뉴로 UART 드라이버를 추가 한다.
UART_0 가 생성되고 설정을 클릭해 보면 핀맵 및 보레이트 등의 UART 관련 설정들을 설정할 수 있다.
그리고 printf 지원 여부도 선택 할 수 있다.
이후에 프로젝트 생성하면 기본 코드가 자동으로 생성된다.
자동 생성된 코드는 usart_basic.c 파일로 저장되어 있고 주요 함수를 보면 아래와 같다.
AVR UART 초기화 코드
int8_t USART_0_init()
{
// Module is in UART mode
/* Enable USART0 */
PRR &= ~(1 << PRUSART0);
#define BAUD 115200
#include <utils/setbaud.h>
UBRR0H = UBRRH_VALUE;
UBRR0L = UBRRL_VALUE;
UCSR0A = USE_2X << U2X0 /* */
| 0 << MPCM0; /* Multi-processor Communication Mode: disabled */
UCSR0B = 1 << RXCIE0 /* RX Complete Interrupt Enable: enabled */
| 0 << UDRIE0 /* USART Data Register Empty Interupt Enable: disabled */
| 1 << RXEN0 /* Receiver Enable: enabled */
| 1 << TXEN0 /* Transmitter Enable: enabled */
| 0 << UCSZ02; /* */
// UCSR0C = (0 << UMSEL01) | (0 << UMSEL00) /* */
// | (0 << UPM01) | (0 << UPM00) /* Disabled */
// | 0 << USBS0 /* USART Stop Bit Select: disabled */
// | (1 << UCSZ01) | (1 << UCSZ00); /* 8-bit */
#if defined(__GNUC__)
stdout = &USART_0_stream;
#endif
return 0;
}
AVR UART 송수신 코드
void USART_0_write(const uint8_t data)
{
while (!(UCSR0A & (1 << UDRE0)))
;
UDR0 = data;
}
uint8_t USART_0_read()
{
while (!(UCSR0A & (1 << RXC0)))
;
return UDR0;
}