스마트 컨트롤러 - ATmega를 이용한 시리얼 통신 설정
<학습목표>
UCSR 레지스터 값을 ATmega128A의 데이터시트를 보고 설정할 수 있다.
ATmega를 이용한 시리얼 통신을 위한 초기화 함수를 만들 수 있다.
지난 시간에 봤던 UCSR 레지스터의 값을 설정해 주기 위한 코딩을 한다.
우선 Smart.h 파일에 define 해준다.

USCR 레지스터에 원하는 설정 값을 입력해준다.
<UCSRnA register>
7th bit - RX: 수신이 완료되면(자료를 다 받아들이면) 0 -> -
6th bit - TX: 전송이 완료되면 1 -> -
5th bit - EMPTY: shift register에 데이터가 없는 경우(전에 데이터를 다 보낸 경우) -> -
//5th bit에서 자료가 남아 있는 상태에서 TX로부터 자료를 받게 되면 덮어쓰게 되어 버리기 //때문에 shift register가 비어있는 것을 확인한 다음에 자료를 받아야 한다.
4th bit - FE: 자료 세트가 전송되는데 잡음 유무를 확인하는 bit 에러가 있으면 1 -> -
3rd bit - DOR: 기존에 있던 자료에 전송된 데이터를 엎어 쓰는 경우 1 -> -
2nd bit - UPE: 패리티에러가 있는 경우에 1 -> -
1st bit - U2X: 보통 속도 0 -> 0
Zero bit - MPCM: 1일 때 주소 정보를 가지고 있지 않은 정보는 모두 무시된다. 0으로 설정 -> 0
//비동기식 데이터 송신 방식에서 데이터와 head, tail을 합친 것을 프레임(frame)이라고 한다.
<UCSRnB 레지스터>

Bit 7 - RXCIE: 수신 interrupt 활성화 시 1 -> -
Bit 6 - TXCIE: 송신 interrupt 활성화 시 1 -> -
Bit 5 - RDRIE: 데이터 empty interrupt 활성화 시 1 -> -
Bit 4 - RXEN: USART 송신 활성화 시 1 -> 1
Bit 3 - TXEN: USART 수신 활성화 시 1 -> 1
Bit 2 - UCSZ: 글자 크기 -> 0
Bit 1 - RXB8n: 8비트 데이터 수신에서 추가 비트 사용(9bit) -> -
Bit 0 - TXB8n: 8비트 데이터 송신에서 추가 비트 사용(9bit) -> -
<UCSRnC 레지스터>

Bit 6 - UMSEL: Clock 사용 여부, 비동기식 0, 동기식 1 -> 0
Bit 5 - UPM1: 패리티 생성기와 체크기 활성화, 짝수 패리티 1 -> 1
Bit 4 - UPM0: 패리티 생성기와 체크기 활성화, 짝수 패리티 0 -> 0
Bit 3 - USBS: 스톱 bit 선택 1bit는 0, 2bits는 1 -> 0
Bit 2 - UCSZ1: 글자 크기 8bit는 1 -> 1
Bit 1 - UCSZ0: 글자 크기 8bit는 1 -> 1
Bit 0 - UCPOL: 클럭 양극화, 동기식만 사용 -> -

작성한 USART.c와 USART.h의 코드를 보면,


main.c 파일로 가서 초기화시키는 INIT함수를 만들어보자.
