2009. 4. 28. 11:50

[ATmega128] RS232 시리얼 통신 관련 레지스터 정리

USARTn I/O Data Register - UDRn

 RXBn[7:0]
 TXBn[7:0]

n은 ATmega128에는 두개의 레지스터가 있으므로, 0과 1로 두개를 구별한다.(ex. UDR0, UDR1)
데이터를 쓸 때는 TXBn에, 읽을 때는 RXBn에서 읽는다.


USART Control and Status Register A - UCSRnA

 RXCn TXCn
UDREn
FEn
DORn
UPEn
U2Xn
MPCMn

7bit - 2bit : Status      1bit - 0bit : Control
RXCn : USART Receive Complete
 - 이 레지스터는 수신버퍼(UDRn)에 읽지 않은 데이터가 있으면 1, 수신버퍼가 비어있으면 0이 된다.
TXCn : USART Transmit Complete
 - 송신 시프트 레지스터에 있는 송신 데이터가 모두 송신되고 UDRn의 송신 버퍼에 아직 새로운 데이터가 Write되지 않은 상태이면 1이 된다. 즉, 시프트 레지스터와 송신 버퍼 둘다 비었을 때. 송신 완료 인터럽트를 발생시킬 때 사용.
UDREn : USART Data Register Empty
 - 송신버퍼에 새로운 데이터를 받을 준비가 되어 있으면 1로 set. 즉. 송신 버퍼가 비었을 때.
FEn : Frame Error
 - 수신 버퍼에서 데이터를 수신하는 동안 프레임 에러가 발생하면 1로 set.
DORn : Data OverRun
 - 수신 동작에서 오버런 에러가 발생하였음을 나타내는 상태 플래그.
 오버런 에러 : 수신 버퍼에 현재 읽지 않은 수신 문자가 들어와있는 상태에서 수신 시프트 레지스터에 새로운 데이터 문자가 수신 완료되고 다시 그 다음 수신 데이터인 3번째 문자의 스타트 비트가 검출되면 발생.(즉, 시프트 레지스터에서 데이터가 완전히 전송되지 않았는데 새로운 데이터가 덮어버릴 때)
UPEn : Parity Error
 - 수신 버퍼로 부터 데이터를 수신하는 동안 패리티 에러가 발생하였음을 알리는 플래그.
U2Xn : Double the USART Transmission Speed
 - 비동기 모드에서만 사용 가능하며, 클럭의 n분주비를 16에서 8로 1/2만큼 낮추어 전송속도를 2배 높이는 기능을 한다.
MPCMn : Multi-Processor Communication Mode
 - USARTn을 멀티 프로세서 통신모드로 설정하고, 멀티 프로세서 통신 어드레스 정보를 포함하지 않는 모든 수신 데이터는 수신부에 의해 무시된다.


USARTn Control and Status Register B - UCSRnB

 RXCIEn TXCIE
UDRIEn
RXENn
TXENn
UCSZn2
RXB8n
TXB8n

RXCIEn : RX Complete Interrupt Enable
 - 수신 완료 인터럽트를 발생시키는 플래그
TXCIE : TX Complete Interrupt Enable
 - 송신 완료 인터럽트를 발생시키는 플래그
UDRIEn : USART Data Register Empty Interrupt Enable
 - USARTn 데이터 레지스터가 비어있다는 인터럽트를 발생시키는 플래그
RXENn : Receiver Enable
 - 수신기를 활성화한다.
TXENn : Transmitter Enable
 - 송신기를 활성화한다.
UCSZn2: Character Size
 - UCSZn1~0 비트와 함께 전송 문자의 데이터 비트수를 설정하는데 쓰인다.
RXB8n : Receive Data Bit 8
 - 수신할 때 9번째 비트를 받을지를 결정하는 플래그
TXB8n : Transmit Data Bit 8
 - 송신할 때 9번째 비트를 보낼지를 결정하는 플래그


USART Control and Status Register C - UCSRnC

-
 UMSELn UPMn1
UPMn0
USBSn
UCSZn1
UCSZn0
UCPOLn

UMSELn : USART Mode Select
 - 0: 비동기 모드
 - 1: 동기 모드
UPMn1, UPMn0 : Parity Mode
 - 00: 패리티모드를 사용하지 않음
 - 01: 사용하지 않는 플래그
 - 10 : 짝수 패리티
 - 11 : 홀수 패리티
USBSn : Stop Bit Select
 - 정지 비트 설정
 - 0 : 1bit,    1: 2bit
UCSZn1, UCSZn0 : Character Size
 - UCSZn2와 함께 전송 문자의 데이터 비트수를 설정
 UCSZn2 UCSZn1
UCSZn0
Chacter Size
0
0
0
5-bit
0 0
1
6-bit
0
1
0
7-bit
0
1
1
8-bit
1
0
0
사용안함
1
0
1
사용안함
1
1
0
사용안함
1
1
1
9-bit
UCPOLn : Clock Polarity
 - 동기모드에서만 사용하는 플래그로 0이면 송신 데이터는 XCKn 클럭의 상승 에지에 새로운 값이 출력되고, 하강 에지에 수신데이터가 검출된다. 1이면 반대로 출력과 검출이 된다.


USART Baud Rate Registers - UBRRnL and UBRRnH

UBRRnH
7 - 4 bit reserved(사용안함)
UBRRn[11:8]
UBRRnL
                                                                    UBRRn[7:0]

 - UBRRn11 - 0 : USART Baud Rate Register
12비트를 이용하여 USARTn의 보울(Baud rate)을 결정하는데, UBRRnH 3비트와 UBRRnL의 8비트가 조합을 하여 사용한다.