일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- sqlite
- Database
- #CLCD
- xilinx
- ubuntu
- #ComportMaster
- ATMEGA128
- #Atmega128
- 인터럽트
- Linux
- #PuTTY
- Embedded linux
- git
- SQLite Studio
- #textLCD
- #MCU
- #문자열
- ubutu
- #UART
- Interrupt
- github
- petalinux
- #채터링
- #시리얼통신
- avr
- zynq
- Today
- Total
재잼재잼의 티스토리
4. UART사용 - 초기화 본문
UART를 실제로 사용해볼 차례다.
UART를 사용하기 위해서 초기화를 시켜줘야하는데, ATmega128의 데이터시트를 참조해보자.
1번 줄 : CPU클럭을 나타낸다. 나는 16Mhz를 사용하고 있기때문에 16000000L을 사용하면 된다. 대부분의 라이브러리가 CPU클럭을 나타내는 이름으로 F_CPU를 사용하기 때문에, #define F_CPU 16000000L 로 작성할 수 있다.
(https://www.avrfreaks.net/forum/define-fcpu-explanation)
2~3번 줄 : baud rate를 계산하는 방법.
데이터 시트에 따르면 위와같은 계산식으로 baud rate를 위한 UBRR값을 계산할 수 있다.
10번 줄 ~ 마지막 줄 : USART 초기화 함수.
UBRR은 16bit 레지스터이므로, 상위 8bit, 하위 8bit로 나뉜다. 계산된 UBRR값을 하위 비트부터 입력을 해주면 된다.
즉, UBRRH = ubrr >> 8; UBRRL = ubrr;로 입력될 수 있다.
UCSRB 레지스터에서는 "송신 허용(TXEN)", "수신 허용(RXEN)"을 위한 비트를 set한다.
UCSRC 레지스터에서 전송할 프레임 포멧을 결정하는데, 데이터비트의 개수, 정지비트의 개수, 패리티비트 사용 유무를 결정할 수 있다.
예제 코드에서는 8개의 데이터비트, 2개의 정지비트를 사용한다.
---------------------------------------------
기본적인 UART 초기화 방법은 Baud rate를 결정하고, UBRR에 입력, UCSRB에서 TX, RX를 허용하고, UCSRC에서 데이터 프레임을 결정 해주면 된다. 사용되는 레지스터에 대해서 알아보자.
1. UCSRA / B / C -> USART Control and Status Register A / B / C
UART의 제어, 상태 레지스터로 A, B, C 세가지로 구성되어있다.
A레지스터에서는 주로 송/수신 상태를 표현하기위한 비트로 구성되어 있다. 이부분은 송/수신 부분에서 다시한번 알아볼 것.
다만 1번 비트인 U2Xn 비트의 경우에는 비동기모드에서 1배속/2배속을 결정하는 부분으로, 2배속을 사용할 경우에는 초기화함수에서 set 해주면 된다.
7번, 6번 5번 비트 : RXCIEn, TXCIEn, UDRIEn는 각 비트의 조건(RXCn, TXCn, UDREn이 세트될 때)이 만족했을 때, 인터럽트 발생을 허가하는 비트다. "RX/TX Complete Interrupt Enable", "UART Data Register Empty Interrupt Enable"의 이름을 가진다.
4번, 3번 비트 : RXENn, TXENn은 UART에서 송신, 수신 동작을 허가하는 비트로, 세트하면 Enable이 된다.
2번 비트 : UCSZn2는 C레지스터의 UCSZn0, 1과 함께 데이터비트의 수를 표현하기 위한 비트. "UART Character Size"의 이름을 가짐.
1번 , 0번 비트 : RXB8n, TXB8n은 데이터 비트의 수가 9개일 때, MSB(8번 비트)가 저장되는 비트.
7번 비트는 예약된 비트로 사용하지 않는다.
6번 비트 : USART Mode Selet라는 이름을 가진다. 비동기모드(0), 동기모드(1)을 결정하기 위한 비트.
5번, 4번 비트 : UART Parity Mode라는 이름을 가지며, 패리티 비트의 동작 모드를 결정하기 위한 비트.
위와같이 선택할 수 있다.
3번 비트 : UART Stop Bit Select라는 이름을 가짐. 정지비트의 개수를 결정한다. 1비트(0), 2비트(1)을 선택할 수 있다.
2번 비트, 1번 비트, B레지스터의 2번 비트 : UCSZn2~UCSZn0의 3비트로 구성되며, 전송되는 데이터프레임에서 데이터비트의 크기를 결정한다.
위와같이 선택할 수 있다.
0번 비트 : 동기모드에서만 사용함. 비동기모드에서는 0값을 가져야 한다.
-----------------------------------
위의 레지스터를 사용해서 UART의 초기화가 가능하다.
'MCU' 카테고리의 다른 글
6. UART 문자열 송/수신 (0) | 2019.01.16 |
---|---|
5.UART 문자 송/수신 (0) | 2019.01.15 |
3. UART 개요 (0) | 2019.01.13 |
2. 버튼 채터링 해결하기 (2) | 2019.01.10 |
1. ATmega128 환경 구성 (0) | 2019.01.09 |