본문 바로가기

AVR 8BIT/통신(USART)

ATMEGA USART 이론

USART(Universal Synchronous and Asynchoronous serial Receiver and Transmitter)

 기기간의 통신이나 컴퓨터와 기기와의 통신에서 시리얼 방식을 이용하면 적은 수의 선으로 장거리의 통신을 가능하게 한다.
 시리얼 통신 방식은 크게 동기식 통신과 비동기식 통신으로 나누어지며, 고속의 테이터 전송을 위해서 동기식 통신을 이용하지만 송/수신 기기간의 동기를 맞춰야 하기 때문에 비동기식에 비해 제어가 어렵다.

ATmega128은 동기 및 비동기 전송모드에서 전이중 통신이 가능한 USART를 2개 내장



 

PE0/PE1 그리고 PD2/PD3 이렇게 2개의 USART가 존재 한다.

또한 다음과 같은 특징을 갖는다.
1) 전이중 통신방식
2) 높은 정밀도의 보레이트 발생기내장
3) 5~9비트의 데이터 비트와 1~2 비트의 스톱 비트 설정
4) 노이즈 필터링
5) 짝수 또는 홀수 패리티 설정
6) 프레임 오류검출
7) 3개의 인터럽트 소스 : 송신 완료, 송신 데이터 레지스터 빔, 수신 완료


- USART Register -

UDRn - USART I/O Data Register

데이터 송/수신 시 데이터를 쓰거나 읽는 레지스터.

 

USART 송신 데이터 버퍼 레지스터와 수신 데이터 버퍼 레지스터는 UDRn이라고 하는 같은 이름의 USART 
데이터 레지스터를 공유한다. UDRn 레지스터는 동일한 I/O 번지를 갖지만, 내부적으로는 서로 분리

UDRn 레지스터에 데이터를 쓰면 송신 데이터 버퍼 TXBn에 값이 써진다.
UDRn 레지스터에 데이터를 읽으면 데이터 버퍼 RXBn에 들어 있는 내용이 읽혀진다.

5~7비트 통신모드의 경우 사용하지 않는 상위 비트에 대해 송신부에서는 무시 수신부에는 0으로 채워 처리

UCSRA 레지스터의 UDRE 플래그 비트가 1일때 값을 쓸 수 있다. (0일 때 데이터 쓰면 무시)

수신버퍼는 FIFO로 구성되어 있으며, 수신 버퍼가 읽혀질 때마다 상태가 변하기 때문에 수신버퍼에 대한 
명령어 (SBI, CBI, SBIC, SBIS) 사용하지 말아야 한다.


UCSRnA - USART0 or 1 Control and Status Register A




Bit7(RXCn : USARTn Receive Complete) : 수신 버퍼에 읽혀지지 않은 수신 문자가 들어 있으면 1, 수신 버퍼가 비어 있다면 0으로 Set되는 상태 플랙.

Bit6(TXCn : USARTn Transmit Complete) : 송신 시프트 레지스터에 있는 데이터가 모두 송신되고, 새 데이터가 입력되지 않으면 1로 Set되는 상태 플랙.

<1로 Set 될 경우 송신 완료 인터럽트 요청, 인터럽트가 처리되기 시작하면 이 비트는 자동으로 0으로 클리어 되고, 이 비트를 강제로 클리어 하려면 이 비트에 1을 라이트 한다>

Bit5(UDREn : USARTn Data Overrun Error) : UDRn의 수신 동작에서 오버런 에러가 발생함을 나타내는 상태 플랙

Bit4(FEn : USARTn Frame Error) : UDRn의 수신 버퍼에 저장되어 있는 데이터를 수신 하는 동안 프레임 에러가 발생하였음을 나타내는 상태플랙.

<수신 문자의 첫번째 스톱비트가 0으로 검출 되면 발생. UDRn을 읽을때 까지 유효하며, UCSRnA레지스터를 라이트하면 이 비트는 무조건 0으로 클리어>

Bit3(DORn : USARTn Data Overrun Error) : UDRn의 수신 동작에서 오버런 에러 발생을 나타내는 상태 플랙

Bit2(UPEn : USARTn Parity Error) : UDRN의 수신 버퍼에 현재 저장되어 있는 데이터를 수신하는 동안 패리티 에러가 발생하였음을 나타내는 상태플랙

Bit1(U2Xn) : 비동기 모드에서 클럭 분주비를 16에서 8로 낮추어 전송속도를 2배 높이는 기능.

Bit0(MPCMn : USARTn Multi-Processor Communication Mode) : USARTn을 멀티 프로세서 통신 모드로 설정.

*1개의 마스터 프로세서가 여러개의 슬레이브 프로세서에게 특정한 어드레스를 전송함으로써 1개의 슬레이브 만을 지정하여 데이터를 전송하는 동작 모드.

 

UCSRnB - USART0 or 1 Control and Status Register B


USART 포트의 송수신 동작을 제어하거나, 전송 데이터를 9비트로 설장한 경우 전송 데이터의 9번째 값을 저장하는 기능을 수행.

Bit7(RXCIEn : USARTn RX Complete Interrupt Enable) : 수신완료 인터럽트 개별 허용

Bit6(TXCIEN : USARTn TX Complete Interrupt Enable) : 송신완료 인터럽트를 개별적으로 허용

Bit5(UDRIEn : USARTn Data Register Empty Interrupt) : 송신 데이터 레지스터 준비완료 인터럽트를 개별적으로 허용

Bit4(RXENn : USARTn Receiver Enable) : USARTn 포트의 수신부가 동작하도록 허용

Bit3(TXENn : USARTn Transmitter Enable) : USARTn 포트의 송신부가 동작하도록 허용

Bit2(UCSZn2 : USARTn Character Size) : UCSRnC레지스터의 UCSZn1~0 비트와 함께 전송 문자의 데이터 비트수를 설정하는데 사용

Bit1(USARTn Character Size) : 전송 문자가 9비트로 설정된 경우 수신된 문자의 9번째 비트(MSB)를 저장한다. UDRn보다 반드시 먼저 읽혀야 한다.

Bit0(USARTn Transmit Data Bit8) : 전송 문자가 9비트로 설정된 경우 송신할 문자의 9번째 비트(MSB)를 저장한다. UDRn보다 반드시 먼저 읽혀야 한다.

UCSRnB - USART0 or 1 Control and Status Register C



USARTn 송수신 동작을 제어하는 기능 수행

Bit6(UMSELn) : 1이면 USART 포트를 동기 전송 모드로 설정하고, 0이면 비동기 전송모드로 설정한다.

Bit5~4(UPMn1~0) : USARTn 포트의 패리티 모드를 설정한다.

<패리티 모드>

Bit3(USBSn : USARTn Stop Bit Select) : 0이면 USARTn 포트에서 데이터 포맷을 구성하는 스톱비트를 1개로 설정, 1이면 스톱 비트 2개 설정.

Bit2~1(UCSZn1~0 : USARTn Character Size) : UCSRnB 레지스터의 UCSZn2비트와 함께 USARTn 포트에서 전송 문자의 데이터 비트수를 설정한다.

Bit0(UCPOLn : USARTn Clock Polarity) : 동기 전송 모드에서 0으로 설정하면 TxDn 단자의 송신 데이터는 XCKn 클럭의 상승 에지에서 새로운 값 출력, RxDn 단자의 수신 데이터는 XCKn 클록 하강 에지에서 검출, 1로 설정하면 이와 반대로 설정 된다.

 

UBRRnH/L(USART Baudrate Register)



16비트 중에서 12비트만 유효, 각각 USART0과 USART1 포트의 송수신 속도를 설정. 16비트 레지스터를 라이트 하는 경우에는 항상 상위 바이트인 UBRRnH를 먼저 라이트하고 하위 바이트인 UBRRnL을 나중에 로드해야 한다.

<Baudrate 설정 공식>

크리스탈 16Mhz 일떄 설정