Você está na página 1de 10

임베디드 마이크로프로세서

프로그래밍 실전

제작 : 네 로 테 크
강의 : 김 종 형
Embedded AVR Programming

ATMEGA128 USART 직렬통신

1. USART의 개요
2. USART의 레지스터
3. USART 실습

2006-
2006-04-
04-05 -2-
Embedded AVR Programming

1-1 USART의 개요

⊙ 2개의 USART(Universal Synchronous and Asynchronous Receive and Transmitter) 구성


- 외부 디바이스와 직렬로 인터페이스를 통해 데이터를 송수신할 수 있게 해 줌
(외부 디바이스는 다른 마이컴 혹은 PC)

⊙ USART0, USART1

⊙ 전이중 통신 및 멀티 프로세서 통신가능

⊙ 동기식 전송 모드
- 마스터 동작의 경우 전송속도는 내부 클럭사용
- 슬레이브 동작의 경우 XCKn 단자로 입력되는 외부 클럭신호에 의해 동작한다.

⊙ 비동기식 전송 모드에서는 항상 내부의 시스템 클럭에 의하여 보레이트가 결정된다.

⊙ 송신 완료(TX Complete), 송신 데이터 레지스터 준비완료(TX Data Register Empty), 수신


완료(RX Complete) 등 3가지의 인터럽트 사용 가능

2006-
2006-04-
04-05 -3-
Embedded AVR Programming

1-2 USART의 레지스터

⊙ USART I/0 데이터 레지스터 (UDR0, UDR1)


: USART0 또는 USART1 포트의 송수신 데이터 버퍼의 기능
BIT 7 6 5 4 3 2 1 0
UDR0 (READ) RXB0[7..0]
UDR0 (Write) TXB0[7..0]
Init Value 0 0 0 0 0 0 0 0

BIT 7 6 5 4 3 2 1 0
UDR1 (READ) RXB1[7..0]
UDR1 (Write) TXB1[7..0]
Init Value 0 0 0 0 0 0 0 0

2006-
2006-04-
04-05 -4-
Embedded AVR Programming

1-2 USART의 레지스터

⊙ USART 제어 및 상태 레지스터 A (UCSR0A, UCSR1A)


: USART0, USART1 포트의 송수신 동작제어 ,송수신 상태 저장 기능
BIT 7 6 5 4 3 2 1 0
UCSRnA RXCn TXCn UDREn FEn DORn UPEn U2Xn MPCMn
Init Value 0 0 0 0 0 0 0 0

- RXCn (USARTn Receiver Complete): 수신버퍼의 상태 플래그


- TXCn (USARTn Transmit Complete): 송신버퍼의 상태 플래그
- UDREn (USARTn Data Register Empty) : 새로운 송신 데이터를 받기 위한 상태 플래그
- FEn (Frame Error) : 수신 프레임 에러 상태 플래그
- DORn (Data Overrun Error) : 수신동작 오버런 에러 상태 플래그
- UPEn (USARTn Parity Error)
- U2Xn (Double the USARTn Transmission Speed) : 비동기 모드에서만 유효하며, 클럭의
분주비를 16에서 8로 낮추어 전송속도를 2배 높이는 기능
- MPCMn (USARTn Multi-Processor Communication Mode)

2006-
2006-04-
04-05 -5-
Embedded AVR Programming

1-2 USART의 레지스터

⊙ USART 제어 및 상태 레지스터 B (UCSR0B, UCSR1B)


: USART0, USART1 포트의 송수신 동작제어, 전송데이터를 9비트로 설정한 경우에 전송
데이터의 9번째 비트값을 저장하는 기능을 수행
BIT 7 6 5 4 3 2 1 0
UCSRnB RXCIEn TXCIEn UDRIEn RXENn TXENn UCSZn2 RXB8n TXB8n
Init Value 0 0 0 0 0 0 0 0

- RXCIEn (USARTn RX Complete Interrupt Enable): 수신완료 인터럽트


- TXCIEn (USARTn TX Complete Interrupt Enable): 송신완료 인터럽트
- UDRIEn (USARTn Data Register Empty Interrupt Enable) : 송신 데이터 레지스터 준비완료 인터럽트
- RXENn (USARTN Receiver Enable) : 수신부 동작허용, 직렬 데이터 수신단자로 동작하도록 설정하며,
FEn , DORn, UPEn 의 동작을 유효하게 함
- TXENn (USARTn Transmitter Enable) : 송신부 동작허용
- UCSZn2 (USARTn Character Size) : UCSRnC 레지스터의 UCSZn1~0 비트와 함께 전송 문자의 비트수를
설정
- RXB8n (USARTn Receiver Data 8Bit) : 전송문자가 9비트로 설정된 경우 수신된 문자의 9번째 비트
(MSB)를 저장. 반드시 UDRn 레지스터 보다 먼저 읽어야 함
- TXB8n (USARTn Transmit Data 8Bit) : 전송문자가 9비트로 설정된 경우 송신할 문자의 9번째 비트
(MSB)를 저장. 반드시 UDRn 레지스터 보다 먼저 라이트되어야 함

2006-
2006-04-
04-05 -6-
Embedded AVR Programming

1-2 USART의 레지스터

⊙ USART 제어 및 상태 레지스터 C (UCSR0C, UCSR1C)


: 송수신 동작 제어
BIT 7 6 5 4 3 2 1 0
UCSRnC - UMSELn UPMn1 UPMn0 USBSn UCSZn1 UCSZn0 UCPOLn
Init Value 0 0 0 0 0 0 0 0

- UMSELn (USARTn Mode Select) : 동기전송모드 시 1, 비동기 전송모드 시 0


- UPMn1~0 (USARTn Parity Mode) : 패리티 모드 설정
UPMn1 UPMn0 PARITY MODE
0 0 NO PARITY MODE
0 1 RESERVED
1 0 EVEN PARITY MODE
1 1 ODD PARITY MODE

- USBSn (USARTn Stop Bit Select)


USBSn = 0 , Stop Bit 1 USBSn = 1, Stop Bit

2006-
2006-04-
04-05 -7-
Embedded AVR Programming

1-2 USART의 레지스터

⊙ USART 제어 및 상태 레지스터 C (UCSR0C, UCSR1C)


- UCSZn1~0 (USARTn Character Size) : UCSRnB 레지스터의 UCSZn2 비트와 함께 전송 문자의 데이터
비트수를 설정
UCSZn2 UCSZn1 UCSZn0 Character Size
0 0 0 5bit
0 0 1 6bit
0 1 0 7bit
0 1 1 8bit
1 0 0 Reserve
1 0 1 Reserve
1 1 0 Reserve
1 1 1 9bit

- UCPOLn (USARTn Clock Polarity) : 동기 전송모드의 슬레이브 동작에서만 유효


UCPOLn = 0, 송신데이터는 XCKn 클럭의 상승 에지에서는 새로운 값이 출력되고, 수신 데이터는 XCKn
클럭의 하강 에지에서 검출
UCPOLn = 1 이면 송신 데이터는 XCKn 클럭의 하강 에지에서 새로운 값이 출력되고 수신 데이터는 XCKn
클럭의 상승 에지에서 검출

2006-
2006-04-
04-05 -8-
Embedded AVR Programming

1-2 USART의 레지스터

⊙ USART BAUD RATE REGISTER (UBRR0H/L , UBRR1H/L)


: 16비트 중 12비트 만 유효, 송수신 속도를 설정, 클럭의 분주비로 작용하여 직렬포트의 전송속도인
보레이트를 결정
BIT 7 6 5 4 3 2 1 0
UBRRnH - - - - UBRRn[11:8]
UBRRnL UBRRn[7:0]
Init Value 0 0 0 0 0 0 0 0

비동기 일반모드 비동기 2배속 모드


Baud Rate (U2Xn=0) (U2Xn=1)
(bps) / 16MHz
UBRRn Error UBRRn Error
2400 416 -0.08% 832 +0.04%
4800 207 +0.16% 416 -0.08%
9600 103 +0.16% 207 +0.16%
14,400 68 +0.64% 138 -0.08%
19,200 51 +0.16% 103 +0.16%
28,800 34 -0.79% 68 +0.64%
38,400 25 +0.16% 51 +0.16%
57,600 16 +2.12% 34 -0.79%

2006-
2006-04-
04-05 -9-
Embedded AVR Programming

1-3 USART0 실습 1
☞ 송신은 폴링 방식, 수신은 인터럽트 방식으로 PC와 연결하여 USART0로 데이터를 받으면
그 받은 데이터를 전송하는 프로그램
#include <mega128.h> void main(void)
#include <delay.h> {

#define UDRE0 5 // USART0 initialization


// Communication Parameters: 8 Data, 1 Stop, No
void TxData(char data) Parity
{ // USART0 Receiver: On
while(!(UCSR0A & (1<<UDRE0)));// UDRE0 CHECK // USART0 Transmitter: On
//while((UCSR0A & 0x20) == 0X00); // USART0 Mode: Asynchronous
UDR0 = data; // USART0 Baud rate: 9600
} UCSR0A=0x00;
UCSR0B=0x98;
interrupt [USART0_RXC] void usart0_rx_isr(void) UCSR0C=0x06;
{ UBRR0H=0x00;
char status,data; UBRR0L=0x67; //16MHz일 때
//UBRR0L=0x33; //8MHz일 때
status=UCSR0A;
data=UDR0; #asm("sei")

TxData(data); while (1)


} ; // do nothing
}

2006-
2006-04-
04-05 -10-
10-

Você também pode gostar