2. 개발환경구축

 

2.1 EWAVR

u EWAVR IAR 사에서 ATMEL사의 AVR 시리즈 컴파일러로 출시된 제품이다. AVR 초기 개발시부터 만들어진 컴파일러로 알려져 있으며 Optimization 능력이 뛰어난 컴파일러 이며, 유료의 컴파일러 이나 다양한 기능이 존재 합니다. 자체 디버거인 C-SPY가 있어 시뮬레이션 및 JTAG 포트를 통한 하드웨어 디버깅 까지 가능합니다.

 

 

2.2 WINAVR

u WinAVR GNU에서 개발한 AVR C언어 컴파일러 및 기타 개발도구 패키지이며, 강력한 성능과 무료라는 장점 때문에 세계적으로 널리 사용됩니다. WinAVRAVR-GCC를 내부에 가지고 있으면서 사용자가 쉽게 AVR-GCC를 사용할 수 있도록 IDE 환경을 제공합니다.

u WinAVRhttp://winavr.sourceforge.net/ 에서 최신버전을 다운로드 받을 수 있습니다.

 

 

 

 

u 최신 버전을 다운로드 후에 인스톨을 실시한다. 인스톨 후에 사용하면 됩니다.

 

2.3 기타 컴파일러

u 상용컴파일러는 ImageCraft, Codevision 등이 있습니다.

u 비 상용 컴파일러는 주로 avr-gcc기반에 IDE을 연동하는 방식으로 되어 있습니다.

u 관련자료는 해당사이트를 참조 해주세요

 

2.4 AVRSTUDIO

u ATMEL사에서 무료로 공급하는 IDE 프로그램으로 기본적으로 컴파일러는 ASM 을 제공하며 , 디버깅 환경으로 Simulator/Emulator를 제공해 CPU의 동작상태를 직접 눈으로 확인할 수 있으며, 개발 지원을 위해 각종 개발 툴과 개발장비와 연결해 CPU를 프로그램 할 수 있습니다.

u 상용 컴파일러 등의 디버깅 파일과 연결하여 좀더 원활한 개발을 지원합니다.

u 현재는 avr-gcc와 연동한 컴파일을 지원해 C 언어 사용도 가능합니다.

u AVRSTUDIO http://www.atmel.com/ 에서 다운로드 받으실 수 있습니다.

 

 

u 다운로드 된 파일을 인스톨 합니다.

u 서비스 팩이 있을 경우 해당 파일도 인스톨 합니다.

u 주의사항은 AVRSTUDIO에서 사용 가능한 개발툴일 경우 업그레이드를 해야 할 수도 있으며, 업그레이드를 안 한 경우 원할 한 사용에 제한을 받을 수도 있습니다. 업그레이드 전에 버전에 대한 확인을 꼭 하시길 바랍니다.

u 인스톨이 다 되면 사용을 하시면 됩니다.

1.4 외부 메모리 인터페이스

특징

u 외부 메모리는 PORT A PORT C를 이용하여 연결합니다.

u PORT A외부 데이터 메모리를 액세스하기 위한 데이터 버스 및 하위 어드레스 버스로 사용됩니다.

u PORT C는 외부 데이터 메모리를 액세스하기 위한 16비트 어드레스 중에서 상위 8비트 어드레스 버스로 사용 됩니다.

u PORT A ALE 신호에 의해 데이터 버스와 하위 어드레스 버스로 분리됩니다.

u 외부 메모리를 사용 하기 위해서는 별도의 Register를 초기에 선언해야 합니다.

u 외부 메모리 번지는 0x1100 ~ 0xFFFF까지로 약 60Kbyte 입니다.

u 메모리 외에 외부 확장 I/O로 사용 하기도 합니다 

 

 

1) 외부에 연결된 디바이스중는 지원할 수 있는 I/O 속도가 전부 다릅니다. 예를 들어 보면 SRAM도 일반적으로 마지막에 -55,-70,-100 등으로 적혀 있는데 55의 의미는 55ns 까지 동작이 가능하다는 것이다. 만약 100ns에서 동작이 가능한 소자를 55ns로 동작을 하려고 하면 분명히 문제가 발생합니다.

ATmega128은 기본적인 속도에서 1~3개까지의 대기 사이클을 줄 수 있어서 디바이스 간의 속도문제를 해결할 수 있도록 도와 줍니다.

 

 

- 아래 그림은 기본 사이클 입니다. (SRWn1 = 0, SRWn0 = 0)

 

 

- 아래 그림은 대기 1사이클 입니다. (SRWn1 = 0, SRWn0 = 1)

 

 

- 아래 그림은 대기 2사이클 입니다. (SRWn1 = 1, SRWn0 = 0)

 

 

- 아래 그림은 대기 3사이클 입니다. (SRWn1 = 1, SRWn0 = 1)

 

2) 레지스터

- MCUCR (MCU Control Register): CPU의 전체적인 기능을 설정한다.

 

 

 

Bit 7, SRE(External SRAM/XMEM Enable) : 외부 데이터 어섹스 신호를 사용할지를 설정 한다.

이 기능이 설정되면 일반 I/O 가 어드레스 버스 모드로 변경된다.

Bit 6, SRW10(Wait-state Select Bit) : SRW11과 함께 대기시간을 조절한다.

 

 

- XMCRA (External Memory Control Register A)

 

 

Bit 6..4, SRL2, SRL1, SRL0 (Wait-state Sector Limit) : 외부 데이터 영역을 2개로 나누어서 각각의 대기시간을 조절 할 수 있는데 이 레지스터는 영역을 어떻게 나눌지를 선택 한다.

 

 

Bit 3..2, SRW01, SRW00 (Wait-state Select Bits for Lower Sector):

SRW11, SRW10 Upper sector 의 대기 시간을 조절 하며 SRW01,SRW00 Lower sector의 대기시간을 조절한다.

 

 

 

 

Bit 7, XMBK (External Memory Bus-keeper Enable) : AD 버스에 3-state 상태일 조건에서 이전 값을 유지하도록 한다.

Bit 2..0, XMM2, XMM1, XMM0 (External Memory High Mask) : 어드레스 상위 바이트 어디 까지 쓸 것인지 결정 한다. 사용하지 않는 포트는 일반적인 I/O 로 사용이 가능하다. XMM2,1,0“001”로 설정하면 PORT C 7번은 일반 I/O로 사용 가능하다.

 

1.3 메모리구조

u 메모리는 프로그램 메모리, 데이터 메모리(내부 SRAM, 외부 SRAM, 내부 EEPROM)로 구성

u 프로그램 메모리는 내부 Flash 메모리를 사용하며 그 용량은 128Kbyte

u 내부 데이터 메모리 중 SRAM 4Kbyte

u 내부 데이터 메모리 중 EEPROM 4Kbyte

u 외부 데이터 메모리는 최대 64Kbyte 가 가능하며 외부 SRAM 또는 확장 I/O용으로 사용

 

 

 

프로그램 메모리 구조

데이터 메모리 구조

내부 32bit Registers

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1) 프로그램 메모리

- 128K Byte (64K * 16bit) Flash 메모리로 되어 있습니다.

- Application / Boot Flash section 으로 나누어지며 필요에 따라 Boot Flash section 기능은 선택적으로 사용

- Program Writing은 일반적으로 SPI 통신방식을 이용한 ISP기능 및 JTAG 에뮬레이터 사용하며, Application Flash section Boot Flash section에서 S/W 적인 Program Writing이 가능합니다.

2) 데이터 메모리

- 32레지스터는 AVR 모든 시리즈에서의 사용되는 범용 32 Registers($00~1F)

- 각종 I/O 디바이스들을 제어하기 위한 64 I/O Registers($20~$5F) 레지스터

- ATmega128에 추가된 각종 I/O 디바이스들을 제어하기 위한 160 Ext I/O Registers($60~$FF)

- 스택 또는 사용자 변수로 사용되는 내부 SRAM(0x0100~0x10FF) , 4Kbyte(4096*8bit)

- 4KB보다 더 확장된 데이터메모리를 필요할 때 확장해서 사용 가능한 외부 SRAM(0x1100~0xFFFF)

- 비휘발성 데이터를 보관하기 위한 4Kbyte 내장 EEPROM 이 있으며, 단일 바이트로 읽고 쓸 수 있습니다.

 

1.2 외부 구조

 

 

l ATmega128의 핀 구성

1) VCC (AVCC)

- 공급 전압 ( ATmega128L 2.7V ~ 5.5V , ATmega128 4.5V ~ 5.5V)

- AVCC ADC PORT F 에 공급하는 전압

2) GND

- 전원 접지

3) PORT A(PA7..PA0)

- 내부적으로 풀업된 8비트 양방향 병렬 포트

- 외부 데이터 메모리를 액세스하기 위한 데이터 버스 및 하위 어드레스 버스로 사용됨

4) PORT B(PB7..PB0)

- 내부적으로 풀업된 8비트 양방향 병렬 포트

5) PORT C(PC7..PC0)

- 내부적으로 풀업된 8비트 양방향 병렬 포트

- 외부 데이터 메모리를 액세스하기 위한 16비트 어드레스 중에서 상위 8비트 어드레스 버스로 사용

6) PORT D(PD7..PD0)

- 내부적으로 풀업된 8비트 양방향 병렬 포트

7) PORT E(PE7..PE0)

- 내부적으로 풀업된 8비트 양방향 병렬 포트

8) PORT F(PF7..PF0)

- 내부적으로 풀업된 8비트 양방향 병렬 포트

- A/D 컨버터의 입력포트

9) PORT G(PG4..PG0)

- 내부적으로 풀업된 8비트 양방향 병렬 포트

10) RESET

- 리셋 입력 핀으로서 50ns이상의 Low Lever 입력이 지속되면 리셋이 발생한다.

11) PORT D(PD7..PD0)

- 내부적으로 풀업된 8비트 양방향 병렬 포트

12) PORT E(PE7..PE0)

- 내부적으로 풀업된 8비트 양방향 병렬 포트

13) PORT F(PF7..PF0)

- 내부적으로 풀업된 8비트 양방향 병렬 포트

- A/D 컨버터의 입력포트

14) PORT G(PG4..PG0)

- 내부적으로 풀업된 8비트 양방향 병렬 포트

15) RESET

- 리셋 입력 핀으로서 50ns이상의 Low Lever 입력이 지속되면 리셋이 발생한다.

16) XTAL1

- 내부 발진(클럭 발생 증폭)회로의 입력 신호

17) XTAL2

- 내부 발진(클럭 발생 증폭)회로의 출력 신호

18) AREF

- A/D 컨버터의 레퍼런스 전압 핀

19) PEN

- 직렬 프로그램밍 모드에 대한 enable 을 설정한다.

- LOW 에서 enable

 

1. ATmega128 의 기본구조

1.1 특징

미국의 ATMEL 사의 ATmega128 8bit RISC(Reduced Instruction Set Computer) 구조의 AVR Core 를 사용하는 마이크로 컨트롤러중 하나입니다.

대부분의 명령어를 Single Cycle 에서 수행하고 I/O 구조는 외부에 추가되는 소자를 최소화 할수 있도록 설계 되어 있습니다. 칩 내부에는 발진회로, 타이머, UART, SPI, TWI, ADC, Analog 비교기, Watch-doc타이머 등이 들어 있습니다.

프로그램 영역과 데이터 영역이 분리되어 있으며 하버드 아키텍쳐 구조를 가지고 있어서 하나의 명령어가 수행되는 동안 다른 명령어를 미를 읽어 들이도록 되어있어 좀더 빠른 명령처리가 가능합니다. 또한 C언어에서 사용하기 편리하게 명령구조가 설계되어 있어 C언어에 최적화되어 있습니다.

ATmega128은 내부에서 프로그램 가능한 Flash, EEPROM, SRAM 을 가지고 있어 추가적이 메모리를 사용하지 않아도 사용이 가능합니다. 디버깅이 가능한 JTAG 회로를 이용해 저가의 툴을 연결해 개발이 용이 합니다.

l Features

High-performance, Low-power AVR® 8-bit Microcontroller

Advanced RISC Architecture

– 133 Powerful Instructions – Most Single Clock Cycle Execution

– 32 x 8 General Purpose Working Registers + Peripheral Control Registers

– Fully Static Operation

– Up to 16 MIPS Throughput at 16 MHz

– On-chip 2-cycle Multiplier

Nonvolatile Program and Data Memories

– 128K Bytes of In-System Reprogrammable Flash

Endurance: 1,000 Write/Erase Cycles

– Optional Boot Code Section with Independent Lock Bits

In-System Programming by On-chip Boot Program

True Read-While-Write Operation

– 4K Bytes EEPROM

Endurance: 100,000 Write/Erase Cycles

– 4K Bytes Internal SRAM

– Up to 64K Bytes Optional External Memory Space

– Programming Lock for Software Security

– SPI Interface for In-System Programming

JTAG (IEEE std. 1149.1 Compliant) Interface

– Boundary-scan Capabilities According to the JTAG Standard

– Extensive On-chip Debug Support

– Programming of Flash, EEPROM, Fuses and Lock Bits through the JTAG Interface

Peripheral Features

– Two 8-bit Timer/Counters with Separate Prescalers and Compare Modes

– Two Expanded 16-bit Timer/Counters with Separate Prescaler, Compare Mode and Capture Mode

– Real Time Counter with Separate Oscillator

– Two 8-bit PWM Channels

– 6 PWM Channels with Programmable Resolution from 1 to 16 Bits

– 8-channel, 10-bit ADC

8 Single-ended Channels

7 Differential Channels

2 Differential Channels with Programmable Gain (1x, 10x, 200x)

– Byte-oriented 2-wire Serial Interface

– Dual Programmable Serial USARTs

– Master/Slave SPI Serial Interface

– Programmable Watchdog Timer with On-chip Oscillator

– On-chip Analog Comparator

Special Microcontroller Features

– Power-on Reset and Programmable Brown-out Detection

– Internal Calibrated RC Oscillator

– External and Internal Interrupt Sources

– Six Sleep Modes: Idle, ADC Noise Reduction, Power-save, Power-down, Standby and Extended Standby

– Software Selectable Clock Frequency

– ATmega103 Compatibility Mode Selected by a Fuse

– Global Pull-up Disable

I/O and Packages

– 53 Programmable I/O Lines

– 64-lead TQFP

Operating Voltages

– 2.7 - 5.5V (ATmega128L)

– 4.5 - 5.5V (ATmega128)

Speed Grades

– 0 - 8 MHz (ATmega128L)

– 0 - 16 MHz (ATmega128)

+ Recent posts