AVR ATmega128 소개 마이크로컨트롤러 AVR ATmega128 저자 : 이상설 (slee@wku.ac.kr) 소속 : 원광대학교전기 정보통신공학부
학습목표 2/39 다양한 AVR 패밀리와소자특징을알아보고, 제어환경에따라 AVR 소자를선택하여개발할수있는융통성을이해할수있다. ATmega128 내부구조에서메모리공간, I/O 공간의프로그램과데이터를처리하기위한특수레지스터, 범용레지스터의역할을이해할수있다. ATmega128 내부에포함된명령어인출과실행절차를알아보고, 명령어유형을통해동작을이해할수있다. ATmega128 이장치를쉽게제어할수있도록하기위해내장한메모리와주변장치의특징을개략적으로이해할수있다.
목차 3/39 1. AVR 개요 2. ATmega128 특징 3. ATmega128 내부구조 4. ATmega128 명령어실행 5. ATmega128 메모리와주변장치 6. ISP(In System Programming)
4/39 ATmega AVR 개요 AVR 의특징 (1) 연산과데이터저장을한번에할수있는하버드구조로되어있어동시에프로그램메모리와데이터메모리를동시에액세스할수있음. 대부분의명령은단일클럭으로실행하여동작속도를혁신적으로개선한제어기임. 임베디드환경에적합한저전력소모를갖음. 명령어는 16 비트버스폭의하드웨어로처리되지만, 데이터는 8 비트길이기반으로처리되는특이한 8 비트마이크로컨트롤러임. 내부에는 32 개의범용작업레지스터를가지며모든레지스터는산술 - 논리연산장치 (ALU) 와직접적으로연결되는구조를가지고있기때문에한클럭사이클내에단일명령사이에두개의독립된레지스터를한꺼번에처리할수있음. AVR RISC 구조는 CISC 마이크로컨트롤러보다 10 배이상의빠른속도로실행이이루어지는보다편리한코드체계를가지는마이크로컨트롤러임. C- 언어로제어하기에적합한주소지정모드 (addressing mode) 를제공하여높은코드집적도를가지고있음.
5/39 ATmega AVR 개요 AVR 의특징 (2) 단일칩에자체프로그램이가능한 1KB~256KB 까지의플래시메모리를가지고있음. 프로그램은직렬프로그래밍인터페이스방식의 ISP 기능을이용하여 10,000 번까지재프로그램이가능함. 모델에따라 64Byte 에서 4KB 까지의 EEPROM 을내장하고있어데이터백업이가능함. 100,000 정도반복사용가능 모델에따라데이터메모리로서 32Byte 에서 8KB 까지의비교적큰 SRAM 을내장하고있음. 이상의 3 가지메모리를내장하고있어효율성이극대화되어있는마이크로컨트롤러로각광을받음. ISP(In-System Programming) 이라는기법을통해롬라이터와같은별도의장비없이도 PC 에서프로그램을작성하여곧바로 AVR 내부의플래시메모리로프로그램코드를저장할수있음. 1.8 5.5V 의동작이가능하며, 특히저전력소모에적합한다양한동작모드를제공함.
Section 01 AVR 개요 6/39 AVR 패밀리 네트워크연결성 USB, 인터넷, SDRAM 연결 FPU 내장 ; 과학계산및디지털신호처리에적합 실시간성능향상기능주변기기사이의빠른신호처리응용에적합 12 비트 ADC/DAC 기능, DMA 사용으로빠른데이터전송 메모리, 입출력핀, 내부주변장치를달리하는다양한소자제공개발을목적으로한응용분야에적합 ATmega8, ATmega128, AT90CAN128, AT90PWM3B 등 크기가작고저렴함응용분야에적합저가형모델로단순하고소형의대량생산이요구되는간단한제어장치에활용가능 휴대용 Li-Ion 배터리를관리하는제품을위해설계배터리셀전압, 전류, 온도를추적배터리수명을늘리고에너지를효율적으로사용하도록함 진동과충격, 혹독한온도환경에서동작보장
Section 01 AVR 개요 7/39 8 비트 megaavr 패밀리소자 ( 요약 ) 8 비트 tinyavr 패밀리소자 ( 요약 )
Section 02 ATmega128 특징 8/39 진보된 RISC 구조 133개의강력한명령어, 1클록사이클에실행 32개의범용레지스터와주변장치제어레지스터 16[MHz] 에서 16[MIPS] 까지성능이나올수있음 2클록사이클이소요되는곱셈기를칩에내장 비휘발성프로그램과데이터메모리 128[Kbyte] 의 ISP(In System Programming) 로재프로그램가능한플래시메모리내장 : 10,000회읽기 / 쓰기가능 4[Kbyte] EEPROM : 100,000회읽기 / 쓰기가능 4[Kbyte] SRAM 내장 64[Kbyte] 까지외부에추가하여사용할수있는메모리공간 SPI 인터페이스를이용한 ISP(In System Programming)
Section 02 ATmega128 특징 9/39 주변장치 2 개의 8 비트타이머 / 카운터 : 별도의프리스케일러와비교모드동작 2 개의 16 비트타이머 / 카운터 : 별도의프리스케일러, 비교모드, 캡처모드동작 실시간타이머카운터 6 개의 PWM 채널 출력비교모듈레이터 아날로그비교기 10 비트 A/D 변환기 TWI(Two-wire Serial Interface) 직렬인터페이스 2 개의 USART SPI 직렬인터페이스 와치독타이머
10/39 ATmega128 의핀설명 ATmega128 의외부구조
11/39 ATmega128 의핀설명 포트 A(PA7 PA0) 외부데이터메모리와데이터전송시하위주소와데이터버스로사용 8 비트의양방향 I/O 포트로사용가능 외부에메모리를인터페이스하지않을때에는내부풀업저항 (20 kω 50 kω ) 을갖음. 포트 B(PB7~PB0) 포트는중복된기능을가지고있는포트 ( 양방향 I/O 혹은 SPI 신호와타이머 / 카운터신호 ) 내부적으로풀업저항 (20 kω 50 kω ) 8 비트의양방향 I/O 포트로사용가능 포트 C(PC7~PC0) 외부데이터메모리와데이터전송시상위주소버스로사용 8 비트의양방향 I/O 포트로사용가능 외부에메모리를인터페이스하지않을때에는내부풀업저항 (20 kω 50 kω ) 을갖음
12/39 ATmega128 의핀설명 포트 D(PD7 PD0) 포트는중복된기능을가지고있는포트 내부적으로풀업저항 (20kΩ 50kΩ) 8비트의양방향 I/O 포트로사용가능 포트 E(PE7~PE0) 포트는중복된기능을가지고있는포트 내부적으로풀업저항 (20kΩ 50kΩ) 8비트의양방향 I/O 포트로사용가능 포트 F(PF7 PF0) 포트는중복된기능을가지고있는포트 내부적으로풀업저항 (20kΩ 50kΩ) A/D 컨버터의입력포트로사용 8비트의양방향 I/O 포트로사용가능
13/39 ATmega128 의핀설명 포트 G(PG4~PG0) 포트는중복된기능을가지고있는포트 내부적으로풀업저항 (20kΩ 50kΩ) 5비트의양방향 I/O 포트로사용가능 RESET: 마스터리셋입력 ( 액티브 LOW 신호 ) AVCC : A/D 컨버터및포트 F의전원 AREF : A/D 컨버터의기준전압 PEN : SPI를활성화시키는프로그래밍인에이블핀 XTAL1, XTAL2 VCC, GND
Section 03 ATmega128 블럭도 14/39
Section 03 ATmega128 내부구조 15/39 명령어레지스터 (IR) 명령어디코더 메모리 플래시프로그램메모리 데이터메모리 (SRAM) 범용레지스터 I/O 레지스터 EEPROM 프로그램카운터 (PC) 기타주변장치 [ ATmega128 의내부구조 ]
Section 03 ATmega128 내부구조 16/39 명령어레지스터 (IR) 프로그램카운터가지칭한곳에서명령어레지스터로명령어인출 명령어에는명령코드, 오퍼랜드, 연산결과저장위치필드를가짐 명령어디코더 명령어레지스터의명령코드를디코딩하여제어신호생성 ALU는명령코드에해당되는연산동작을수행하게함 제어신호는연산대상이되는오퍼랜드가 ALU에전달되게함 제어신호는연산결과를저장할수있게함 스택포인터 스택은임시데이터, 로컬변수, 호출된함수의복귀주소등을저장 스택포인터 (Stack Pointer) 는스택의 TOP 을저장하는특수레지스터 스택에데이터가저장되면, 스택공간은커짐» 스택포인터의주소는높은값에서낮은값으로감소» PUSH 명령어 : 데이터가스택에저장. 이때스택포인터는 1씩감소» POP 명령어 : 데이터를스택의 TOP에서꺼냄. 이때스택포인터는 1씩증가
Section 03 ATmega128 메모리맵 17/39 프로그램영역메모리 데이터영역메모리 플래시프로그램메모리 : PC 로접근일반레지스터 + I/O 레지스터 + 데이터메모리 : 데이터주소로접근
18/39 Section 03 ATmega128 내부구조 플래시프로그램메모리 프로그램저장 비휘발성 (Non-volatile) 메모리 전원이없어도, 저장된데이터는변경되지않음 64[Kword](128[Kbyte]) 크기, 10,000회쓰고읽기 다운로더장치로다운로드 부트프로그램부 : 부팅에필요한기본정보 응용프로그램부 : 워드단위 (16 비트크기 ) 의명령어로구성된프로그램 [ 플래시프로그램메모리맵 ] 프로그램카운터 (PC : 16 bits) 플래시프로그램메모리공간을가리킴 명령어를차례로인출하면서응용프로그램실행
Section 03 ATmega128 내부구조 19/39 플래시프로그램메모리 기본적으로한개의번지가 16 비트단위로구성되어 16 비트마이크로프로세서인것처럼동작 모든 AVR 의명령어는 16 비트또는 32 비트길이로구성 플래시로되어있는내부프로그램메모리는부트프로그램섹션 (boot program section) 과응용프로그램섹션 (application program section) 의두가지영역
Section 03 ATmega128 내부구조 20/39 범용레지스터 데이터레지스터» 레지스터 R0~R25» 데이터를저장하는레지스터» 메모리주소 0x00~0x19에해당 주소레지스터» 레지스터 R26~R31» 레지스터간접주소방식을위한레지스터» 메모리주소 0x1A~0x1F에해당 [ 범용레지스터파일 ]
Section 03 ATmega128 내부구조 21/39 범용레지스터사용사례» 변수 x 를데이터레지스터 r24 로활용한사례
Section 03 ATmega128 내부구조 22/39
Section 03 ATmega128 내부구조 23/39 doc2467 datasheet 참조 ($3A) : 일반명령어가사용하는레지스터주소이름 $1A : i/o 명령어 (in, out) 가사용하는주소이름
Section 03 ATmega128 내부구조 24/39
Section 03 ATmega128 내부구조 25/39 범용레지스터 데이터레지스터» 레지스터 R0~R25» 데이터를저장하는레지스터» 메모리주소 0x00~0x19에해당 주소레지스터» 레지스터 R26~R31» 레지스터간접주소방식을위한레지스터» 메모리주소 0x1A~0x1F에해당 [ 범용레지스터파일 ]
Section 03 ATmega128 내부구조 26/39 주소레지스터 X, Y, Z» 데이터메모리에대한주소를가짐» 두개의레지스터를묶어, 주소레지스터 X, Y, Z 는 16 비트레지스터 주소레지스터 Z 활용사례 메모리 0x100 위치에데이터 0xAB 를저장동작» Z- 레지스터에메모리주소 0x100 을넣음 (r31 0x01, r30 0x00)» r24 에 0xAB 를넣음» st Z+, r24 동작으로메모리주소 Z 위치에 r24 값을기록, 동작후 Z 값은 1 증가
Section 03 ATmega128 내부구조 27/39 데이터공간 (32 Register + 128 I/O Register + 4k SRAM) 변수는프로그램이수행되면서변경될수있음 변수는데이터메모리 (SRAM) 에저장 일반모드» 내부 SRAM을 4,096[byte] 사용가능» I/O 명령어로 64개 I/O 레지스터접근» 확장된 160개의 I/O 레지스터를갖고 ld, store 명령으로접근 doc2467 datasheet 참조 [ ATmega128 데이터메모리 (SRAM) 구성 ]
Section 03 ATmega128 내부구조 28/39 I/O 공간 in, out 의 I/O 명령어가가리키는주소는 I/O 공간 ld, st 명령어가사용하는주소는데이터메모리공간 64개 I/O 레지스터» in, out 명령으로참조할때는 I/O 공간 : 0x00 0x3F» ld, st 명령으로참조할때는데이터메모리공간 : 0x20~0x5F 확장된 I/O 공간은 in, out 명령이아닌 ld, st 명령으로만참조 EEPROM(Electrically Erasable and Programmable ROM) 4Kbyte의 EEPROM을내장 비휘발성메모리로서, 전원이공급되지않아도데이터는계속값을유지 플래시프로그램메모리는프로그램이다운로드되는비휘발성메모리 EEPROM은프로그램이수행되는동안에데이터를기록하여활용» 데이터기록을위해 SRAM 보다더많은클록이필요
Section 03 ATmega128 내부구조 29/39 상태레지스터 (SREG, Status Register) 가장최근에실행된산술연산의결과정보를저장 이결과에따라다음에실행되는프로그램의흐름을제어명령어에영향 인터럽트가발생했을때» 상태레지스터를하드웨어가자동으로저장, 복귀되지않음» 소프트웨어적으로저장, 복귀동작을수행해야함
Section 03 ATmega128 내부구조 30/39
Section 03 ATmega128 내부구조 31/39
Section 04 ATmega128 명령어실행 32/39 명령어인출 프로그램카운터 (PC) 가가리키는명령어가명령어레지스터 (IR) 로인출 프로그램카운터의값은명령어레지스터크기만큼증가 명령어실행 ❶ 명령어분석 ❷ ALU에오퍼랜드인가 ❸ ALU 연산실행및결과기록
Section 04 ATmega128 명령어실행 33/39 명령어인출과실행 한클록에수행되는명령어실행동작
Section 04 D 플립플롭 34/39 에지트리거 D 플립플롭 클록형 D 플립플롭의클록펄스입력에펄스전이검출기를추가하여구성 D CP Q(t+1) 0 0 1 1 상승에지트리거 D 플립플롭의논리기호및진리표 D CP Q(t+1) 0 0 1 1 하강에지트리거 D 플립플롭의논리기호및진리표
Section 03 D 래치 (latch) 35/39 CP=0 이면이전값유지, CP=1 이면값전달 회로도 논리기호 동작 CP=1, D=1 이면 G 3 의출력은 0, G 4 의출력은 1 이된다. 따라서 NAND 게이트로구성된 S-R 래치의입력은 S=0, R=1 이되므로결과적으로 Q=1 을얻는다. CP=1, D=0 이면 G 3 의출력은 1, G 4 의출력은 0 이된다. 따라서 S-R 래치의입력은 S=1, R=0 이되므로결과적으로 Q=0 을얻는다.
Section 03 D 플립플롭 36/39 주종형 D 플립플롭 (negative edge triggered) Master 플립플롭의클록입력은클록펄스가그대로입력되고, Slave 플립플롭부분의클록입력에는반전된클록펄스가입력되도록구성 CP=1 : 외부의 D 입력이 Master 플립플롭에전달 Slave 플립플롭은 CP=0이므로값유지. CP=0 : Slave 플립플롭이동작하여 Q=Y, Q = Y Master 플립플롭은 CP=0이므로입력에상관없이값유지.
Section 04 D 플립플롭 (SRAM, Registers) 37/39 예제 그림과같은파형을주종형 D 플립플롭에인가하였을때, 출력 Q 의파형을그려보아라. 단, Q 는 0 으로초기화되어있으며, 게이트에서의전파지연은없는것으로가정한다.
Section 03 D 플립플롭 38/39 다른형태의 D 플립플롭