[Atmega128] 8. UASRT 통신 (Universal Synchronus Receiver Transmit)

2019. 8. 5. 14:24개발 관련 학습정리/AVR(atmega128) Register 분석

반응형

USART (Universal Synchronus Receiver Transmit)에 대하여 알아보자.

 

 

 

 

USART 통신의 데이터 프레임

 

 

스타트 비트 : 1비트로 이루어 졌으며 항상 0레벨이다. 송신시에 자동적으로 생성된다.

데이터 비트 : 5,6,7,8,9비트가 가능하다.

 

패리티 비트 : 패리티를 사용하지 않을 수도 있고 사용하는 경우 홀수 혹은 짝수 패리티 1비트를 사용한다.

 

스탑 비트 : 1,2개의 비트가 가능하며 항상 1레벨이다. 송신시에 자동적으로 생성된다.

이 데이터 프레임으로 통신하며, 완전 이중방식이며 동기 및 비동기 전송이 가능하다.

송신완료, 송신 데이터 레지스터 준비완료, 수신완료등 3가지의 인터럽트를 제공한다.

 

 

 

 

 

 

 

 

그럼 바로 레지스터를 알아보도록 하자

 

1. UDRn (Usart i/o Data Register) 

 

데이터 버퍼 기능을 수행하는 8bit 레지스터이며,

송신할 데이터를 쓰면 송신 데이터 버퍼 TXBn에 저장되고,

수신될 데이터를 쓰면 수신 데이터 버퍼 RXBn에 읽힌다.

 

 

 

 

 

 

 

2. UCSRnA (Usart Control and Status Register A)

 

RXCn (Receive Complete) : 수신 버퍼에 읽히지 않은 수신 문자가 있으면 1, 읽은 경우 0으로 클리어되고,              

1로 세트되는 경우 수신완료 인터럽트를 요청한다.

 

TXCn (Transmit Complete) : 송신 버퍼에 아직 새로운 송신문자가 기록되지 않은 경우 1로 세트되고, 

이 경우 송신완료 인터럽트를 요청한다.

 

UDREn (Usart Data Register Empty) : UDRn의 송신 버퍼가 비어있어 받을 준비가 되어있으면 1로 세트되고,           

이 경우에 준비완료 인터럽트를 요청한다.

 

FEn (Frame Error) : UDR에 있는 문자를 수신하는 동안에 첫번째 스톱 비트가 0으로 검출되는 프레임 에러가 발생함을 

나타내며, 플랙 비트이다.

 

DORn (Data Overrun Error) : 수신동작에서 읽지 않은 문자가 있는데 다음 수신이 이루어지면 알려주는 플랙비트.

 

UPEn (Usart Parity Error) : 수신 버퍼의 패리티에 에러가 있다는 것을 알려주는 플랙비트.

 

U2Xn (Usart 2 transmission speed) : 비동기에서만 유효하며, 1로 세트하면 분주를 반으로 낮춰 2배로 가속한다.

 

MPCMn (Multi-processor Communication Mode) : 1로 세트하면 멀티 프로세서 통신모드로 설정한다.

 

 

 

 

 

 

3. UCSRnB (Usart Control and Status Register B)

드릅게 많다

 

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

 

TXCIEn (TX Complete Interrupt Enable) : 송신완료 인터럽트 허용

 

UDRIE (UDR empty Interrupt Enable) : 송신 데이터 레지스터 준비완료 인터럽트 허용

 

RXENn (RX ENable) : 1로 세트하면 USART용 수신단자를 허용한다.

 

TXENn (TX ENable) : 1로 세트하면 USART용 송신단자를 허용한다. 클리어 하더라도 완료될때 까지는 송신단자로 동작.

 

UCSZn2 (Usart Character SiZe) : 전송 문자의 데이터 비트수 설정.

UCSZn1...0은 밑의 UCSRnC에 있다.

 

RXB8n (RX data Bit 8) : 전송문자가 9비트로 설정된 경우 수신된 문자의 9번째 비트를 저장한다.

 

TXB8n (TX data Bit 8) : 전송문자가 9비트로 설정된 경우 송신할 문자의 9번째 비트를 저장한다.

 

 

 

 

 

 

 

 

4. UCSRnC (Usart Control and Status Register C)

 

UMSELn (Usart Mode SELect) : 1이면 동기모드, 0이면 비동기모드로 설정.

 

UPMn1..0 (Usart Parity Mode) : 패리티 모드를 설정한다.

00 - 사용하지 않음, 10 - 짝수 패리티, 11 - 홀수 패리티

 

USBSn (Usart Stop Bit Select) : 1로 세트하면 스톱비트 2개, 0이면 한개로 설정한다.

 

UCSZn1..0 (Usart Character SiZe) : 전송 문자의 데이터 비트수 설정하며, 위의 UCSRnB의 UCSZn2비트와 같이 쓰인다.

설정 데이터는 위의 그림에 나와있다.

 

UCPOLn (Usart Clock POLarity) : 동기 모드의 슬레이브만 유효하며,

1로 설정할 경우 - 하강에지에서 출력, 상승에지에서 얻어짐

0으로 설정할 경우 - 상승에지에서 출력, 하강에지에서 얻어짐.

 

 

 

 

 

5. UBRRn (Usart Baud Rate Register)

0..11bit 총 12비트 사용

 

송수신 속도를 다음의 공식에 따라 설정한다. 

공식.

 

 

Baud Rate와 UBRR의 관계

 

 

 

 

 

 

 

설정 순서

1. UBRR을 통하여 baudrate설정

2. UCSRA에서 : 7(rx complete flag), 5(data register empty), 1(U2X)설정

3. UCSRB에서 : 7(rx complete int), 5(data register empty int enable), 4(rx enable), 3(tx enable)

4. UCSRC에서 : 6(Async), 5/4(parity), 3(stop), 2/1(8-bit)

5. UDR0에서 데이터 설정

 

 

char c;
void setup() {
  DDRD &= ~0x01; //uart RX
  DDRD |= 0x02; //uart TX

  UBRR0 = 103; // baudrate 9600;
  //UBRR0 = 8; // baudrate 115200;
  UCSR0A = 0x00;
  UCSR0B = 0x98; //TX, RX enable
  UCSR0C = 0x06; //bit setting-8, Async, no parity, 1stop

  UDR0 = 0x31; // data register
}
 char aa;
unsigned char s[10] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};

void loop() {
  
//  for(int i=0;i<10;i++)
//  {
//    while(!(UCSR0A & 0x20));
//    UDR0 = s[i]; // data register TX
//  }
//  delay(1000);
}

SIGNAL(USART_RX_vect) RX
{
  
   aa=UDR0;
   while(!(UCSR0A & 0x20));
   UDR0=aa; 
}

 

 

 

 

 

 

 

 

 

다음은 TWI (I2C) 통신에 대해 알아보도록 하자.

[복두출판사]AVR ATmega128 프로그래밍 응용실습:ED-4513 마이크로프로세서 콤보 IT를 이용한, 복두출판사
반응형