동일한 기능을 수행하는 2개의 USART(Universal Synchronous and Asynchronous Receiver and Transmitter) 직력통신 포트 USART0, USART1 을 가지고 있는데 이것들은 동기 및 비동기 전송 모드에서 모두 전이중 통신이 가능하고 멀티 프로세서 통신 모드로 동작하는 것도 가능하며, 높은 정밀도의 보레이트 발생기(Baud Rate Generator)를 내장하고 있다.
◆ USART 직렬통신 인터럽트 벡터
Vector NO. | Program Address | Source | Interrupt Definition |
19 | 0x0024 | #pragma vector = USART0_RXC_vect | USART0 RX Complete |
20 | 0x0026 | #pragma vector = USART0_UDRE_vect | USART0 Data Register Empty |
21 | 0x0028 | #pragma vector = USART0_TXC_vect | USART0 TX Complete |
31 | 0x003C | #pragma vector = USART1_RXC_vect | USART1 RX Complete |
32 | 0x003E | #pragma vector = USART1_UDRE_vect | USART1 Data Register Empty |
33 | 0x0040 | #pragma vector = USART1_TXC_vect | USART1 TX Complete |
◆ USART 직렬통신 레지스터
UDRn(USART I/O Data Register) : USART I/O 데이터 레지스터
이 레지스터는 USART0, USART1 포트의 송수신 테이터 버퍼의 기능을 수행한다.
각 포트의 송신 및 수신 버퍼는 동일한 번지에 위치하지만 내부적으로는 서로 다른 별개의 레지스터로서,
송신 할 데이터를 UDRn에 라이트하면 이는 송신 데이터 버퍼 TXBn에 저장되고
수신 된 데이터를 UDRn으로 읽으면 이는 수신 데이터 버퍼 RXBn에 수신되어 있는 값이 읽혀진다.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
RXBn | |||||||
TXBn | |||||||
R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
UCSRnA(USART Control and Starus Register A) : USART 제어 및 상태 레지스터 A
이 레지스터는 USART0, USART1 포트의 송수신 동작을 제어하거나 송수신 상태를 저장하는 기능을 수행한다.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
RXCn | TXCn | UDREn | FEn | DORn | UPEn | U2Xn | MPCMn |
R | R/W | R | R | R | R | R/W | R/W |
- RXCn(USART Receive Complete)
UDRn의 수신 버퍼에 읽지 않은 데이타가 있으면 1로 셋트되고 데이터 수신상태 플래그이다.
이 비트가 1로 되면 수신완료 인터럽트가 요청된다.
- TXCn(USART Transmit Complete)
송수신 시프트 레지스터에 있는 송신 데이터가 모두 송신되고 UDRn의 송신 버퍼에 아직 새로운 송신 데이터가 라이트되지 않은 상태이면 1로 셋트되는 상태 플래그 이다.
이 비트는 송신완료 인터럽트를 요청하는데 이 인터럽트의 처리가 시작되면 자동으로 0으로 클리어 된다.
- UDREn(USART Data Register Empty)
UDRn의 송신 버퍼가 비어 있어면 1로 셋트되고 데이터 송신상태 플래그이다.
이 비트가 1이면 송신 데이터 레지스터 준비완료 인터럽트를 요청한다.
- FEn(Frame Error)
UDRn의 수신 버퍼에 현재 저장되어 있는 데이터를 수신하는 동안에 프레임 에러가 발생하였음을 나타내는 상태 플래그이다.
프레임 에러는 수신 문자의 첫번째 스톱 비트가 0으로 검출되면 발생한다.
이 플래그는 수신 버퍼 UDRn을 읽을 때까지 유효하며 UCSRna 레지스터를 라이트하면 이 비트는 무조건 0으로 클리어 된다.
- DORn(Data OverRun)
수신 동작에서 오버런 에러가 발생하였음을 나타내는 플래그이다.
오버런 에러는 UDRn의 수신 버퍼에 현재 읽지 않은 수신 문자가 들어 있는 상태에서 수신 시프트 레지스터에 새로운 데이터 문자가 수신 완료되고 다시 그 다음 수신 데이터인 3번째 문자의 스타트 비트가 검출되면 발생한다.
이 플래그는 수신 버퍼 UDRn을 읽을 때까지 유효하면 UCSRnA 레지스터를 라이트하면 이 비트는 무조건 0으로 클리어 된다.
- UPEn(USART Parity Error)
UDRn의 수신 버퍼에 현재 저장되어 있는 데이터를 수신하는 동안에 패리티 에러가 발생 하였음을 나타내는 상태 플래그이다.
패리티 에러는 UCSRnC 레지스터에서 UPMn1 = 1로 하여 패리티 비트를 사용하도록 설정한 경우에만 발생 할 수 있다.
이 플래그는 수신 버퍼 UDRn을 읽을 때까지 유효하며 UCSRnA 레지스터를 라이트하면 이 비트는 무조건 0으로 클리어 된다.
- U2Xn(Double the USART Transmission Speed)
비동기 모드에서만 유효한 것으로서 클럭의 분주비를 16에서 8로 절반만큼 낮추어 전송속도를 2배 높이는 기능을 수행한다.
- MPCMn(Muiti-processor Communication Mode)
USARTn을 멀티 프로세서 통신 모드로 설정한다.
멀티 프로세서 통신 모드에서는 어드레스 정보를 포함하지 않는 모든 수신 데이터는 수신부에 의하여 무시된다.
송신부는 이 비트에 의하여 영향을 받지 않는다.
UCSRnB(USART Control and Status Register B) : USART 제어 및 상태 레지스터 B
이 레지스터는 USART0, USART1 포트의 송수신 동작을 제어하거나 전송 데이터를 9비트로 설정한 경우에 전송 데이터의 9번째 비트값을 저장하는 기능을 수행한다.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
RXCIEn | TXCIEn | UDRIEn | RXENn | TXENn | UCSZn2 | RXB8n | TXB8n |
R/W | R/W | R/W | R/W | R/W | R/W | R | R/W |
- RXCIEn(RX Complete Interrupt Enable)
수신완료 인터럽트를 개별적으로 허용하는 비트이다.
이를 1로 설정하고 SREG 레지스터의 I비트가 1이라면 1문자가 수신되어 UCSRnA 레지스터의 RXCn 비트가 1로 되는 경우 수신완료 인터럽트가 발생한다.
- TXCIEn(TX Complete Interrupt Enable)
송신완료 인터럽트를 개별적으로 허용하는 비트이다.
이를 1로 설정하고 SREG 레지스터의 I비트가 1이라면 송신 시프트 레지스터가 비어 UCSRnA 레지스터의 TXCn 비트가 1로 되는 경우 송신완료 인터럽트가 발생한다.
- UDRIEn(USART Data Register Empty Interrupt Enable)
송신 데이터 레지스터 준비완료 인터럽트를 개별적으로 허용하는 비트이다.
이를 1로 설정하고 SREG 레지스터의 I비트가 1이라면 송신 버퍼가 비어 UCSRnA 레지스터의 UDREn 비트가 1로 되는 경우 송신 데이터 레지스터 준비완료 인터럽트가 발생한다.
- RXENn(Receiver Enable)
USARTn 포트의 수신부가 동작하도록 허용한다.
이는 RXDn 핀이 병렬 I/O 포트가 아니라 직렬 데이터 수신 단자로 동작하도록 설정하며 에러 플래그 비트 FEn, DORn, UPEn 의 동작을 유효하도록 한다.
- TXENn(Transmitter Enable)
USARTn 포트의 송신부가 동작하도록 허용한다.
이는 TXDn 핀이 병렬 I/O 포트가 아니라 직렬 데이터 송신 단자로 동작하도록 설정하며 이 비트를 0으로 설정하더라도 이는 송신 시프트 레지스터에 데이터가 남아 있을 경우에는 이것이 전송 완료될 때까지 유효하지 않다.
- UCSZn2(Character Size)
UCSRnC 레지스터의 UCSZn1 ~ 0 비트와 함께 전송 문자의 데이터 비트 수를 설정하는데 사용된다.
- RXB8n(Receive Data Bit 8)
전송 문자가 9비트로 설정된 경우 수신된 문자의 9번째 비트(MSB)를 저장한다.
이는 반드시 UDRn 레지스터 보다 먼저 읽혀야 한다.
- TXB8n(Transmit Data Bit 8)
전송 문자가 9비트로 설정된 경우 송신할 문자의 9번째 비트(MSB)를 저장한다.
이는 반드시 UDRn 레지스터 보다 먼저 라이트 되어야 한다.
UCSRnC(USART Control and Status Register C) : USART 제어 및 상태 레지스터 C
이 레지스터는 USART0, USART1 포트의 송수신 동작을 제어 하는 기능을 수행한다.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
- | UMSELn | UPMn1 | UPMn0 | USBSn | UCSZn1 | UCSZn0 | UCPOLn |
R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
- UMSELn(USART Mode Select)
USARTn 포트의 전송 모드를 설정한다.
UMSELn | Mode |
0 | 비동기 전송 모드(Asynchronous Operation) |
1 | 동기 전송 모드(Synchronous Operation) |
- UPMn1:0(Parity Mode)
USARTn 포트의 패리티 모드를 설정한다.
UPMn1 | UPMn0 | Parity Mode |
0 | 0 | 패리티 체크 기능을 사용하지 않음 |
0 | 1 | (reserved) |
1 | 0 | 짝수 패리티 방식을 사용(Enabled, Even Parity) |
1 | 1 | 홀수 패리티 방식을 사용(Enabled, Odd Parity) |
- USBSn(Stop Bit Select)
USARTn 포트의 데이터 포멧을 구성하는 스톱 비트를 설정한다.
USBSn | Stop Bit(s) |
0 | 1 Bit |
1 | 2 Bit |
- UCSZn1:0(Character Size)
UCSRnB 레지스터의 UCSZn2 비트와 함께 전송 문자의 데이터 비트수를 설정한다.
UCSZn2 | UCSZn1 | UCSZn0 | Character Size |
0 | 0 | 0 | 5 Bit |
0 | 0 | 1 | 6 Bit |
0 | 1 | 0 | 7 Bit |
0 | 1 | 1 | 8 Bit |
1 | 0 | 0 | Reserved |
1 | 0 | 1 | Reserved |
1 | 1 | 0 | Reserved |
1 | 1 | 1 | 9 Bit |
- UCPOLn(Clock Polarity)
동기 전송 모드에서만 유효한 것으로 새로운 값을 검출, 출력한다.
UCPOLn | Transmitted Data Changed (Output of TXD Pin) |
Received Data Changed (Input of RXD Pin) |
0 | Rising XCK Edge | Fising XCK Edge |
1 | Fising XCK Edge | Rising XCK Edge |
UBRRnL : UBRRnH(USART Baud Rate Registers) : USART 보레이트 레지스터
이 레지스터는 16비트 중에서 12비트만 유효한 것으로서 각각 USART0, USART1 포트의 송수신 속도를 설정하는 기능을 수행한다.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
- | - | - | - | UBRRnH | |||
UBRRnL | |||||||
R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
이 레지스터 값은 클럭의 분주비로 작용하여 직렬포트의 전송속도인 보레이트를 결정한다.
16비트 레지스터를 라이트하는 경우에는 항상 상위 바이트인 UBRRnH를 먼저 라이트하고 하위 바이트인 UBRRnL을 나중에 라이트해야 한다.
동작 모드 | 보레이트를 결정하는 공식 | UBRR 레지스터값을 결졍하는 공식 |
비동기 일반 모드 (U2Xn = 0) |
BAUD = Fosc/16(UBRRn+1) | UBRRn = Xtal/16/BAUD-1 |
비동기 2배속 모드 (U2Xn = 1) |
BAUD = Fosc/8(UBRRn+1) | UBRRn = Xtal/8xBAUD-1 |
동기 마스터 모드 | BAUD = Fosc/2(UBRRn+1) | UBRRn = Xtal/2xBAUD-1 |
◆ USART 직렬통신 전송 데이터 포멧
전송 데이터 포멧
USART 에서 직렬 전송 데이터의 구성 포멧(format)
1 Bit 스타트 비트(start bit) | 5~9 Bit 데이타 비트(data bit) | 1 Bit 패리티 비트(parity bit) | 1~2 Bit 스톱 비트(stop bit) |
'소프트웨어 > AVR' 카테고리의 다른 글
아날로그 비교기 (0) | 2011.09.29 |
---|---|
내부 EEPROM 읽기/쓰기 (0) | 2011.09.28 |
인터럽트[Interrupt] (0) | 2011.09.26 |
타이머/카운터 (0) | 2011.09.23 |
LCD 제어 (0) | 2011.09.21 |