뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기...

24
뻔뻔한 AVR 프로그래밍 뻔뻔한 AVR 프로그래밍 The 6 th Lecture The 6 Lecture 유명환 ( [email protected])

Transcript of 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기...

Page 1: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석

뻔뻔한 AVR 프로그래밍뻔뻔한 AVR 프로그래밍The 6th LectureThe 6 Lecture

유 명 환 ( [email protected])

Page 2: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석

INDEX“통신” 관련 이야기1 INDEX“시리얼 통신” 관련 이야기2

ATmega128 시리얼 통신 회로도 분석3

ATmega128 시리얼 통신 컨트롤러(USART) 분석4

ATmega128 시리얼 통신 관련 레지스터 분석5

ATmega128 시리얼 통신 실습6

Page 3: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석

“통신” 관련 이야기1 통신 관련 이야기

동기 (Synchronous) 非 동기 (Asynchronous)

TCP UDPTCP

USART

TWI(I2C)

UDP

UART

GPS, BlueTooth, ZigBee

임베디드 시스템용 시리얼 통신 UART ex) MMI (Man Machine Interface)

통신 속도 시간 (계산) 공식통신 속도 시간 (계산) 공식

Page 4: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석

“시리얼 통신” 관련 이야기2 시리얼 통신 관련 이야기

CPU

CPU0

01

10 0 0 0 0111TX

UARTcore 0

011

1

Busdata stream

RxUART

0 0 0 0 0111

SerialParallel

start 0 1 2 3 4 5 6 7 8 parity stop stop

Data bit

Page 5: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석

AT 시리얼 통신 회로도 분석ATmega128 시리얼 통신 회로도 분석3

Page 6: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석

AT 시리얼 통신 회로도 분석ATmega128 시리얼 통신 회로도 분석3

DK128-MAIN 보드 : ISP 회로

Page 7: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석

AT 시리얼 통신 회로도 분석ATmega128 시리얼 통신 회로도 분석3

DK128-MAIN 보드 : UART 회로

Page 8: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석

AT 시리얼 통신 회로도 분석ATmega128 시리얼 통신 회로도 분석3

PC DK 12812V

5V1 threshold 5V1

10

0 0 1

GND

+5V Powered RS-232 Transmitters/Receivers+5V Powered RS-232 Transmitters/Receivers

--> MAX232 와 호환!!

Page 9: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석

AT 시리얼 통신 컨트롤러(USART) 분석ATmega128 시리얼 통신 컨트롤러(USART) 분석4

<-- 16MHz

--> TXD1

<-- RXD1

Page 10: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석

AT 시리얼 통신 컨트롤러(USART) 분석ATmega128 시리얼 통신 컨트롤러(USART) 분석4

Clock Generator

Transmitter다음 번 데이터는 송신 버퍼가

비워질(empty) 때까지 대기(wait)

UDR (Transmit) : 송신 버퍼송신 버퍼 empty

비워질(empty) 때까지 대기(wait)

TRANSMIT SHIFT REGISTER: 한 비트씩 송신(Transmitting)

TXD1

한 비트씩 Loading

Receiver

: 한 비트씩 송신(Transmitting)

Receiver

Page 11: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석

AT 시리얼 통신 컨트롤러(USART) 분석ATmega128 시리얼 통신 컨트롤러(USART) 분석4

Clock Generator

Transmitter

ReceiverRXD1핀으로부터 한 비트씩 수신

RECEIVE SHIFT REGISTER: 한 비트씩 수신 버퍼에 저장

RXD1

UDR (Receive) : 수신 버퍼Stop 비트 : Data 비트 수신이 완료됨을 뜻함!

수신 버퍼 full

Page 12: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석

AT 시리얼 통신 컨트롤러(USART) 분석ATmega128 시리얼 통신 컨트롤러(USART) 분석4

TXD

RXD

TXD

RXD

PC DK128

RXD

GND

RXD

GND

• Full Duplex 동작

– 직렬 송수신이 독립적

• 비 동기(Asynchronous)와 동기(Synchronous) 모두 동작• 비 동기(Asynchronous)와 동기(Synchronous) 모두 동작

– 일반적으로 UART는 명령어전송을 위해 주로 사용 주로 비 동기

• 5, 6, 7, 8, 9 데이터 비트와 1, 2 스톱 비트no parity

start 0 1 2 3 4 5 6 7 8 parity stop stop

5, 6, 7, 8, 9 데이터 비트 1, 2 스톱비트비트

Page 13: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석

AT 시리얼 통신 관련 레지스터 분석ATmega128 시리얼 통신 관련 레지스터 분석5

PC : 하이퍼터미널 (시리얼 가상 에뮬레이터)

DK128 : Firmware

19200-8-N-1

DK128 : Firmware

19200 : 시리얼 통신 속도(Baud rate)

8 : (송수신) 데이터 사이즈 -> ASCII code

N : No Parity

1 : Stop 비트 “1” 비트 사용* 흐름 제어 -> 반드시 “없음” 으로 설정할 것!

Page 14: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석

AT 시리얼 통신 관련 레지스터 분석ATmega128 시리얼 통신 관련 레지스터 분석5

UDRn : USARTn I/O Data Register

Register 설명 실제 구현 예

UDRn •송수신 데이터를 저장하기 위한 레지스터 -> 버퍼(Buffer) UDR1 = byte; // 송신할 때

return UDR1; // 수신할 때return UDR1; // 수신할 때

19200-8-N-1

Page 15: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석

AT 시리얼 통신 관련 레지스터 분석ATmega128 시리얼 통신 관련 레지스터 분석5

UCSRnA : USART Control and Status Register A

Register 설명 실제 구현 예

Bit 7 –RXC

• USART Receive Complete bitRX 핀으로부터 입력된 수신 데이터(8비트)가 모두 수신 버퍼(UDR)로

while(! (UCSR1A &(1<<RXC1)) );// RXC1 비트가 “1”이 될 때까지RXCn:

USART Receive Complete

• RX 핀으로부터 입력된 수신 데이터(8비트)가 모두 수신 버퍼(UDR)로입력이 완료되는 순간 자동적으로 “1”로 설정됨.

수신 버퍼가 완전히 채워질 때

// RXC1 비트가 “1”이 될 때까지

대기(wait) -> Polling 방식

Bit 5 –UDREn: USART Data

• USART Data Register Empty bit• 송신 버퍼(UDR)가 새로운 데이터를 받을 준비가 되어 있는지 알려줌

송신 버퍼가 완전히 비워질 때

while(!(UCSR1A &(1<<UDRE1)));// UDRE1 비트가 “1”이 될 때까지

대기(wait)

Register Empty

19200-8-N-1

Page 16: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석

AT 시리얼 통신 관련 레지스터 분석ATmega128 시리얼 통신 관련 레지스터 분석5

Page 17: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석

AT 시리얼 통신 관련 레지스터 분석ATmega128 시리얼 통신 관련 레지스터 분석5

UCSRnB : USART Control and Status Register B

Register 설명 실제 구현 예

Bit 4 –RXENn:

• USART 수신을 활성화(enable)• 수신 버퍼와 관련된 동작이 가능하도록 함

UCSR1B = (1<<TXEN) | (1<<RXEN) | (0<<UCSZ2);RXENn:

Receiver Enable

• 수신 버퍼와 관련된 동작이 가능하도록 함 ( ) | ( );

Bit 3 –TXENn:

• USART 송신을 활성화(enable)• 송신 버퍼와 관련된 동작이 가능하도록 함

UCSR1B = (1<<TXEN) | (1<<RXEN) | (0<<UCSZ2);TXENn:

Transmitter Enable

• 송신 버퍼와 관련된 동작이 가능하도록 함 (1<<RXEN) | (0<<UCSZ2);

Bit 2 –UCSZn2:

• UCSRnC의 UCSZn1:0과 함께 송수신 데이터의 사이즈를 결정

• UCSRnC 참조

UCSR1B = (1<<TXEN) | (1<<RXEN) | (0<<UCSZ2);

Character Size

UCSRnC 참조

19200-8-N-1

Page 18: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석

AT 시리얼 통신 관련 레지스터 분석ATmega128 시리얼 통신 관련 레지스터 분석5

UCSRnC :UCSRnC : USART Control and Status Register C

Register 설명 실제 구현 예

Bit 5:4 –UPMn1:0: Parity Mode

• Parity 모드 설정 UCSR1C = (0<<UPM1)|(0<<UPM0) | (0<< USBS) | (1<<UCSZ1) | (1 <<UCSZ0);UPMn1 UPMn0 Parity mode

Parity Mode0 0 Disabled

0 1 (Reserved)

1 0 Enabled, Even Parity

1 1 Enabled Odd Parity

Bit 3 –USBSn: Stop Bit

• Stop 비트를 1비트와 2비트 중 어느 것을 할지 설정 UCSR1C = (0<<UPM1)|(0<<UPM0) | (0<< USBS) | (1<<UCSZ1) | (1 <<UCSZ0);

1 1 Enabled, Odd Parity

USBSn Stop-Bit(s)Stop Bit Select 0 1-bit

1 2-bits

19200-8-N-1

Page 19: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석

AT 시리얼 통신 관련 레지스터 분석ATmega128 시리얼 통신 관련 레지스터 분석5

Bit 2:1 –UCSZn1:0: Character Si

• UCSRB의 UCSZ2와 함께 송수신 데이터의 사이즈를 결정

• 8비트 데이터 사이즈로 결정함! ASCII codeUCSR1C = (0<<UPM1) | (0<<UPM0) | (0<< USBS) | (1<<UCSZ1) | (1 <<UCSZ0);Character Si

ze| (1 <<UCSZ0);

UCSZn2 UCSZn1 UCSZn0 Character Size

0 0 0 5-bit

0 0 1 6-bit

0 1 0 7-bit

0 1 1 8-bit

1 0 0 Reserved

1 0 1 Reserved

1 1 0 Reserved

1 1 1 9-bit

19200-8-N-1

Page 20: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석

AT 시리얼 통신 관련 레지스터 분석ATmega128 시리얼 통신 관련 레지스터 분석5

UBRRnL, UBRRnH :UBRRnL, UBRRnH : USART Baud Rate Registers

Register 설명 실제 구현 예

UBRRnL, UBRRnH

• 시리얼 통신 (송수신) 속도(Baud Rate)를 설정하기 위한 레지스터

19200-8-N-1

Page 21: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석

AT 시리얼 통신 관련 레지스터 분석ATmega128 시리얼 통신 관련 레지스터 분석5

Page 22: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석

AT 시리얼 통신 관련 레지스터 분석ATmega128 시리얼 통신 관련 레지스터 분석5Clock GeneratorUBRRnH 전송 속도 설정

Transmitter

UBRRnL

Next data

UDR (Transmit) : 송신 버퍼송신 버퍼 empty

TRANSMIT SHIFT REGISTER: 송신 시프트 레지스터

TXD1

Receiver

USCRnARXCn

UCSRnB수신 활성화송신 활성화

UCSRnCParity mode 설정

비 설정RXCn

UDREn 송신 활성화data size 설정

Stop 비트 설정data size 설정

Page 23: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석

AT 시리얼 통신 관련 레지스터 분석ATmega128 시리얼 통신 관련 레지스터 분석5Clock Generator

UBRRnH전송 속도 설정

Transmitter

UBRRnL

Receiver

RECEIVE SHIFT REGISTER RXD1

RXD1핀으로부터 다음 신호 받음

RECEIVE SHIFT REGISTER: 수신 시프트 레지스터

RXD1

UDR (Receive) : 수신 버퍼Stop 비트

수신 버퍼 full수신 버퍼 full

USCRnARXCn

UCSRnB수신 활성화송신 활성화

UCSRnCParity mode 설정

비 설정RXCn

UDREn 송신 활성화data size 설정

Stop 비트 설정data size 설정

Page 24: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석

AT 시리얼 통신 실습ATmega128 시리얼 통신 실습6예제_Header

#define CPU_CLOCK 16000000

#define BAUD_RATE 19200#define BAUD_RATE_L (CPU_CLOCK/(16l*BAUD_RATE))-1 // 하위 8 비트#define BAUD RATE H ((CPU CLOCK/(16l*BAUD RATE))-1) >> 8 // 상위 4 비트#define BAUD_RATE_H ((CPU_CLOCK/(16l BAUD_RATE)) 1) >> 8 // 상위 4 비트

- - - - 0 0 0 0 UBRRnH

case1) UBRR=51(0011 0011)인 경우

0 0 0 0

0 0 1 1 0 0 1 1UBRRnH

UBRRnL

case2) UBRR=416(0001 1010 0000)인 경우

- - - - 0 0 0 1

1 0 1 0 0 0 0 0UBRRnH

UBRRnL

* 110100000의 하위 8비트(1010 0000)는 UBRRnL (BAUD_RATE_L)에 할당

상위 4비트 값만 걸러내기 위해 0001 1010 0000 를 8번 오른쪽으로 Shift 시켜 남아 있는 값만 걸러내면 됨!

0 0 0 1 1 0 1 0 0 0 0 0 >> 8

0 0 0 0 0 0 0 0 0 0 0 1