일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- #CLCD
- sqlite
- #UART
- ubutu
- xilinx
- avr
- zynq
- #textLCD
- SQLite Studio
- #채터링
- Embedded linux
- #시리얼통신
- #문자열
- github
- #MCU
- #Atmega128
- ubuntu
- petalinux
- #PuTTY
- Database
- git
- Linux
- 인터럽트
- ATMEGA128
- Interrupt
- #ComportMaster
- Today
- Total
재잼재잼의 티스토리
5.UART 문자 송/수신 본문
UART를 사용해서 PC와 ATmega128 사이에 문자 송/수신을 구현해보자.
이전에 살펴보았던 UART 관련 레지스터에서 송/수신 작업의 상태를 나타내는 레지스터가 있었다.
바로 UCSR1A이다.
7번 비트 : Receive Complete라는 이름을 가지며, Receive Buffer에 읽지 않은 데이터가 있을 때 set되고, Receive Buffer가 비었을 때 clear된다.
6번 비트 : Transmit Complete라는 이름을 가지며, Transmit Shift Register에 있는 데이터 프레임이 전부 전송되고, UDRn에 새로운 데이터가 없을때 set된다.
5번 비트 : UART Data Register Enable이라는 이름을 가진다. UDRn이 새로운 데이터를 받을 준비가 되었을 때, set된다.
-------------------------------------
또한 데이터의 송/수신을 위한 버퍼레지스터가 존재하는데 UDRn이 그 역할을 수행한다.
이 버퍼 레지스터는 UART 송신과 수신을 위해 사용되는데 RXBn과 TXBn이 같은 주소를 공유하여 사용한다.
UDRn레지스터에 데이터가 기록(written)될 경우에는 TXBn에 기록이 되며,
UDRn레지스터를 읽으면(Reading) RXBn에 위치한 데이터를 반환(return)한다.
----------------------------------------
이 레지스터를 가지고, 데이터시트에 있는 송/수신 예제를 확인해보자.
먼저 송신부분을 보면
while( ! ( UCSRA & ( 1 << UDRE1) ) ) ;
UDR1 = data;
UDRE1 비트가 set 될 때까지 계속 반복하는 부분인데, UDREn 비트는 새로운 데이터를 받을 준비가 되었을 때 set 되기 때문에, UDRE1이 set되면 UDR1에 전송할 문자(data)를 저장하고, 송신된다.
수신 부분에서는
unsigned char 형을 반환하며,
while( ! ( UCSRA & ( 1 << RXC1 ) ) );
return UDR1;
RXC1 비트가 set 될 때까지 반복한다. RXC1비트는 수신버퍼에 읽지않은 데이터가 있을 때 set 되기때문에, RXC1비트가 set 되면, UDRn에 있는 데이터를 읽고 반환 해준다.
-------------------------------------------
이 예제 코드를 사용해서 PC와 문자 1개를 송/수신하는 프로그램은
와 같이 작성할 수 있다.
'MCU' 카테고리의 다른 글
7. CLCD 사용하기 (0) | 2019.01.22 |
---|---|
6. UART 문자열 송/수신 (0) | 2019.01.16 |
4. UART사용 - 초기화 (0) | 2019.01.14 |
3. UART 개요 (0) | 2019.01.13 |
2. 버튼 채터링 해결하기 (2) | 2019.01.10 |