2019. 8. 5. 14:24ㆍ개발 관련 학습정리/AVR(atmega128) Register 분석
USART (Universal Synchronus Receiver Transmit)에 대하여 알아보자.
스타트 비트 : 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) : 전송 문자의 데이터 비트수 설정.
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) : 패리티 모드를 설정한다.
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)
송수신 속도를 다음의 공식에 따라 설정한다.
설정 순서
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) Register 분석' 카테고리의 다른 글
[Atmega128] 10. Reset과 Watchdog 타이머 (0) | 2019.08.06 |
---|---|
[Atmega128] 9. I2C 통신 (Inter-Integrated Circuit) (2) | 2019.08.05 |
[Atmega128] 7. SPI 통신 (Serial Peripheral Interface Bus) (0) | 2019.08.05 |
[Atmega128] 6. 아날로그 변환기 ADC (Analog to Digital Converter) (0) | 2019.08.05 |
[Atmega128] 5. 아날로그 비교기 (Analog Comparator) (0) | 2019.08.03 |