본문 바로가기

개발자/AVR Atmega

USART 통신을 이용한 디버깅 할때 통신 설정 코드와 UBRR, BaudRate 계산


UBRR

통신 속도를 조절하는 레지스터로 다음과 같은 공식으로 계산한다.

BAUD = fck / 16 ( UBRR + 1)

여기서 BAUD = Baud Rate (BPS)

fck = CPU Clock frequency

UBRRL = UBRR의 내용으로 0 ~ 255 사이의 값을 갖는다.

UBRRH = UBRR의 내용으로 256~1023 사이의 값을 갖는다.



// ATmega2560 clock [Hz] 
#define FCLK 4000000

// Baud rate
#define BAUD 19200
// Calculate the UBRR setting
#define UBRR ((long) FCLK/(16*BAUD)-1)

// Bit definitions from the USART control registers
#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7

#define FRAMING_ERROR (1<


// Define the new putchar function
void putchar(char c)
{
	while ((UCSR0A & DATA_REGISTER_EMPTY)==0);
				UDR0=c;

}

void Init_Uart0()
{
	// USART0 initialization
	// Communication Parameters: 8 Data, 1 Stop, No Parity
	// USART0 Receiver: Off
	// USART0 Transmitter: On
	// USART0 Mode: Asynchronous
	// USART0 Baud rate: 
	UCSR0A=0x00;
	UCSR0B=0x08;
	UCSR0C=0x06;
	UBRR0H=UBRR >> 8;
	UBRR0L=UBRR & 0xFF;	
}


아래 그림이 많이 도움이 됩니다.