5.외부 인터럽트 및 내부 인터럽트

5.1 특징 및 기능

1) 인터럽트는 어떤 처리 중에 그보다 중요한 처리를 위한 처리 방식입니다. 즉 어떤 처리 중에 현재 하던 작업을 잠시 멈추고 중요한 작업을 먼저 한 후 다시 기존에 하던 작업을 수행 합니다. 중요한 작업도 중요도가 낮아지는데 어떤 것이 먼저 처리 될지 선택 되어져야 합니다. 이를 위해 인터럽트 간의 우선순의가 존재 합니다. 인터럽트 처리 중 에도 그보다 높은 우선순위 인터럽트의 경우 높은 순위의 인터럽트부터 먼저 처리를 합니다.

2) 인터럽트 종류

RESET 1개

외부 인터럽트 8개

Timer0 인터럽트 2개

Timer1 인터럽트 5개

Timer2 인터럽트 2개

Timer3 인터럽트 5개

UART0 인터럽트 3개

UART1 인터럽트 3개

ADC 인터럽트 1개

SPI 인터럽트 1개

EEPROM 인터럽트 1개

Analog Comp 인터럽트 1개

I2C 인터럽트 1개

SPM 인터럽트 1개

 

3) ATmega 128은 인터럽트 우선순위가 H/W 적으로 설정되어 있으며 그 레벨을 조정할 수는 없습니다.

 

 

4) 외부 인터럽트

- 외부 인터럽트는 INT0 ~ 7 번의 트리거 동작으로 발생합니다.

- 트리거신호는 LOW 레벨 / 상승 엣지(rising edge)/하강 엣지(falling edge) 방식을 지원합니다.

- I/O의 입/출력 설정에 관계없이 인터럽트가 발생합니다.

 

5) 외부 인터럽트 레지스터

- SREG (Status Register)

Bit7. I (Global Interrupt Enable) : 모든 인터럽트를 활성화 하도록 설정 합니다.

- EIFR (External Interrupt Flag Register)

각각의 외부 인터럽트 사용여부를 설정합니다. ( 1: 설정)

- EICRA (External Interrupt Control Register A)

외부 인터럽트중 0~ 3번까지의 트리거 방식을 LOW/상승 엣지/하강 엣지 중에 선택합니다.

- EICRB (External Interrupt Control Register B)

외부 인터럽트중 4~ 7번까지의 트리거 방식을 LOW/상승 엣지/하강 엣지 중에 선택합니다.

ISCn1

ISCn0

설명

0

0

LOW 레벨 에서 인터럽트 발생

0

1

사용 안함

1

0

하강 엣지(falling edge) 에서 인터럽트 발생

1

1

상승 엣지(rising edge) 에서 인터럽트 발생

* 인터럽트 발생 포인트

LOW 레벨

하강 엣지(falling edge)

상승 엣지(rising edge)

 

4. 입출력 I/O

 

4.1 특징 및 기능

1) I/O PORT의 구성

- 8bit, 양방향, 범용, 병렬기능의 I/O 포트는 PORTA ~ F까지 6개가 존재 합니다.

- 5bit, 양방향, 범용, 병렬기능의 I/O 포트는 PORTG 1개가 존재 합니다.

 

2) I/O의 특징

- 입력 또는 출력 모드로 동작합니다.

- 최대 구동 전류는 약 40mA 입니다.

- 입력모드에서 내부 PULL-UP 을 설정 할 수 있습니다.

 

- DDRx 레지스터를 이용해 출력 또는 입력 설정이 가능합니다. (1 : 출력모드, 0 : 입력모드)

- PORTx 레지스터로 출력 모드 일때 출력 값으로 입력 모드 일때 PULLUP 기능으로 사용 합니다.

- PINx 레지스터로 I/O의 입력 상태를 확인합니다. 만약 입력 모드에서 PORTx레지스터가 0으로 선택 되어지면 PULLUP이 되지 않아 Tri-Status(Hi 인피던스) 상태가 됩니다.

- I/O 또는 특수(부가) 기능이 있어서 그 기능을 사용 할 때는 해당 모드로 동작 합니다.

 

 

3.ATmega128 기본 하드웨어

3.1 메모리 LOCK bit, FUSE bit

AVR은 FUSE 라는 특별한 기능이 있습니다. FUSE는 AVR자체의 H/W 적인 스펙을 설정하고 조작하는데 사용되어 집니다. 이 FUSE에 대해 간단한 설명을 하도록 하겠습니다.

-M103C : ATmega103 호환 모드로 선택 합니다.

-WDTON : 자동으로 WDTON이 실행될지 선택 합니다.

-OCDEN : OCD 사용 여부를 설정합니다.

-JTAGEN : JTAG 디버깅 사용 여부를 선택 합니다.

-SPIEN : ISP를 지원할지 선택 합니다.

-CKOPT : 발진레벨을 조절합니다.

-EESAVE : Erase 명령시 EEPROM을 안 지울 것인지 선택 합니다.

-BOOTSZ1,0: 부트 사이즈를 결정합니다.

-BOOTRST : Reset에 의해 BOOT영역으로 이동할지 선택 합니다.

-BODLEVEL : 전압레벨이 어느 이하로 떨어질 경우 Reset 할지 선택 합니다.

-BODEN : 전압레벨 확인을 할지 선택 합니다.

-SUT1,0 : START 할때의 시간을 선택 합니다.

-CKSEL 0,1,2,3 : 클럭 소스를 설정 합니다.

 

 

3.2 시스템 클럭

FUSE 선택에 의해 ATmega128은 다양한 클럭을 선택 할 수 있습니다. 간단하게 보면 아래와 같습니다.

클럭소스

CKSEL 3~0

External Crystal/Ceramic Resonator

1111~1010

External Low-frequency Crystal

1001

External RC Oscillator

8.0~12.0 MHz

1000

3.0~8.0 MHz

0111

0.9~3.0 MHz

0110

0.0~0.9 MHz

0101

Calibrated Internal RC Oscillator

8.0 MHz

0100

4.0 MHz

0011

2.0 MHz

0010

1.0 MHz

0001

External Clock

0000

CKOPT를 이용해 발진 레벨을 조절하여 발진레벨이 작아지도록 해서 소비전력을 적게 할 수도 있으며, 발진레벨을 크게 해서 발진의 외부 노이즈 영향을 적게 받도록 할 수 있습니다.

 

 

3.3 시스템 리셋

ATmega128은 여러가지 Reset 조건이 존재 합니다. 그 내용은 아래와 같습니다.

- Power on Reset : 전원 이 CPU가 안정하게 돌수 있는 전압 이하일 경우 RESET 을 하고 있습니다.

- Watchdog Reset : Watchdog 타이머의 지정된 주기이내에서 재설정을 안하는 경우 Reset 을 합니다.

( 프로그램이 안정하게 돌아가는지 확인할 때 사용합니다.)

- Broen-out Reset: 전원이 일정 시간동안 지정된 전압 이하로 될경우 Reset 이 됩니다.

- JTAG에 의한 Reset : JTAG을 이용해 내부 레지스터를 설정해 Reset 을 할 수 있습니다.

- 외부 Reset : Reset pin 에 입력된 신호에 따라 Reset 을 할 수 있습니다 .

 

 

3.4 Watch-doc타이머

Watch-doc 타이머는 지정된 주기이내에서(타임아웃이 되기전에) S/W 적으로 타이머의 값을 초기화 시켜주지 않으면 정상적으로 동작하지 않는 것으로 판단을 합니다. 이는 CPU의 동작에 대한 신뢰성을 높이는데 사용합니다.

 

 

3.5 SLEEP 모드

저전력 시스템 동작시 사용하지 않을 때 사용하지 않는 모듈들을 정지시켜 소비전력을 낮추도록 하는데 사용 됩니다.

 

 

3.6 BOOT 로드

BOOTSZ1,0 로 부트 사이즈를 결정합니다. 또한 BOOTRST 으로 Reset에 의해 BOOT영역으로 이동할지 선택 합니다. 이 기능을 이용해Main 프로그램 영역을 프로그램적으로 변경할 수 있습니다. 그래서 장비의 문제 발생 또는 기능 추가에 많이 활용되어 집니다.

BOOTSZ1

BOOTSZ0

Boot Size

응용 프로그램 섹션

부트 로더 섹션

1

1

512워드(4page)

0x0000~0xFDFF

0xFE00~0xFFFF

1

0

1024워드(8page)

0x0000~0xFBFF

0xFC00~0xFFFF

0

1

2048워드(16page)

0x0000~0xF7FF

0xF800~0xFFFF

0

0

4096워드(32page)

0x0000~0xEFFF

0xF000~0xFFFF

6) AVRSTUDIO 의 툴바 설명

AVRSTUDIO 는 각종 디버깅을 편리하게 하위 위한 여러가지 버튼이 툴바 형태로 모여 있습니다. 이를 간단하게 정리해 보겠습니다.

- Start Debugging : 설정된 디바이스에 따라 디버깅을 시작한다.

- Stop Debugging : 설정된 디바이스의 디버깅을 종료한다.

- Run : 타겟 CPU를 동작시킨다. 브레이크 포인트, STOP 등의 명령으로 정지가 될수 있다.

- Break : 타겟을 RUN 동작중에 정지하게 한다.

- Reset : 타겟을 Reset 한다. Source 의 초기로 돌아간다.

- Step Into : 현재 함수를 자세하게 살펴본다.

- Step Over : 현재 위치한 명령 한 개만 실행한다.

- Step Out : 함수 와 서브루틴을 전부 수행한다.

- Run to Curser : 현재 선택 되어 있는 커서까지 실행 한다.

- AutoStep : 순차적으로 명령들을 자동으로 실행한다.

- Toggle Breakpoint : Breakpoint를 설정하거나 멈춘다.

- Quick watch : 현재 선택된 변수를 보여준다.

- Toggle Watch Windows : 변수의 상태를 나타내는 Watch Window를 보이거나 안 보이게 한다.

- Toggle Register Window : Register의 상태를 나타내는 Window를 보이거나 안 보이게 한다.

- Toggle Memory Window : Memory의 상태를 나타내는 Window를 보이거나 안 보이게 한다.

- Toggle Disassembler Window : Source 를 ASM 형태로 표현하거나 안한다.

 

'공부 > AVR' 카테고리의 다른 글

[ATMEGA128] 4. 입출력 I/O  (0) 2012.11.09
[ATMEGA128] 3.ATmega128 기본 하드웨어  (0) 2012.11.09
[ATMEGA128] 2.6통합환경구축(3)  (0) 2012.11.09
[ATMEGA128] 2.6 통합환경구축 (2)  (0) 2012.11.09
[ATMEGA128] 2.6 통합환경 구축 (1)  (0) 2012.11.09

5) ISP로 Flash Writer 하기 (JTAG도 비슷한 방식으로 사용이 가능합니다.)

ISP 선택 및 장비 선택 하기 위해 버튼을 누릅니다.

=>

 

Flash Writer 을 위한 기본 화면이 나옵니다.

- Device : Writer 할 디바이스를 선택 한다.

- Erase Device : Flash, EEPROM을 지운다.

- Erase Device Before Programming : Writer 하기 전에 Flash, EEPROM을 지운다.

- Verify Device After Programming : Writer 후 이상이 없는지 검사한다.

 

해당 CPU를 선택 합니다

 

- CPU는 AVRSTUDIO 버전 별로 지원하는 것이 다르며, 해당 디바이스를 정확하게 선택해주세요

 

파일을 선택 합니다.

- 파일은 hex(intel Hex File format), a90(iar 컴파일러에서 생성된 intel Hex File),eep (eeprom용 hex 파일) 을 사용할 수 있습니다.

 

CPU가 이상이 없는지 확인합니다.

- Advenced 에서 Read 해서 해당 device 가 정확한지 확인한다.

 

 

FUSE bit을 선택 합니다.

- CPU의 내부 기능을 선택 합니다.

- CPU 별로 설정이 틀리기 때문에 필이 확인 하셔야 합니다.

 

Flash Write 합니다.

 

필요시 EEPROM을 설정후 Write 합니다.

 

Lock bit을 선택 합니다.

 

'공부 > AVR' 카테고리의 다른 글

[ATMEGA128] 3.ATmega128 기본 하드웨어  (0) 2012.11.09
[ATMEGA128] 2.6 통합환경구축 (4)  (0) 2012.11.09
[ATMEGA128] 2.6 통합환경구축 (2)  (0) 2012.11.09
[ATMEGA128] 2.6 통합환경 구축 (1)  (0) 2012.11.09
[ATMEGA128] 2.5 ISP & JTAG  (0) 2012.11.09

4) JTAG으로 디버깅 하기

 

PC에 JTAG을 연결하고 타겟 보드에 JTAG 을 연결한 후 전원을 넣습니다.

 

AVRSTUDIO에서 Start Debugging 을 누릅니다.

 

 

JTAG 종류와 CPU를 설정한 후 JTAG과 CPU가 연결되어진 것을 STUDIO에서 확인할 수 있습니다.

 

RUN,STOP 등을 이용해 디버깅을 할 수 있습니다.

'공부 > AVR' 카테고리의 다른 글

[ATMEGA128] 2.6 통합환경구축 (4)  (0) 2012.11.09
[ATMEGA128] 2.6통합환경구축(3)  (0) 2012.11.09
[ATMEGA128] 2.6 통합환경 구축 (1)  (0) 2012.11.09
[ATMEGA128] 2.5 ISP & JTAG  (0) 2012.11.09
[ATMEGA128] 2. 개발환경구축  (0) 2012.11.09

 

2.6 통합환경구축

ATmega128을 이용한 보드만 있다고 해서 개발이 가능한 것은 아닙니다. 개발을 위해 어떤 것들이 필요한지현재까지 간단하게 개발에 필요한 컴파일러 S/W 와 각종 툴을 알아 보았습니다. 이제는 이런 툴을 어떻게 연결해서 사용하는지에 대해 간단하게 설명을 하겠습니다. 준비물을 아래와 같습니다.

 

1) 준비물

PC 또는 노트북

ISP 또는 JTAG (WIZ AVRISP 2.0 , WIZ AVRJTAG PRO)

ATmega128이 사용된 보드

WINAVR 최신버젼

AVRSTUDIO 최신버젼

각종 S/W 나 드라이버

전원

매뉴얼

간단한 예제 SORUCE

 

2) 설치 과정

WINAVR 을 인스톨 합니다.

본 문서는 WinAVR-20070525-install.exe 을 사용합니다.

AVRSTUDIO를 인스톨 합니다.

본 문서는 AVRSTUDIO 4.13 서비스팩 1 에서 사용합니다.

AVRSTUDIO4.13을 인스톨 후 AVRSTUDIO 4.13 SP1을 인스톨 하세요

WIZ AVRISP 2.0 , WIZ AVRJTAG PRO을 처음 사용시 USB 드라이버를 찾으므로 해당 파일을 인스톨을 해두셔야 합니다.

 

 

3) 프로젝트 만들어 컴파일 하기

WINAVR 에 들어 있는 demo source를 이용해서 간단한 프로젝트를 만들어 보겠습니다. 먼저 C:\WinAVR-20070525\examples\demo 디렉토리 아래에 있는 파일을 C:\prj\demo 라는 디렉토리를 만들어 그 아래에 복사합니다.

 

New Project 만들기

메뉴에 New Project를 선택 합니다

 

프로젝트 이름과 디렉토리 등을 선택 합니다.

- 프로젝트 name 과 생성되는 파일명이 같아야 합니다.

- 초기화 파일이 존재하므로 Create initial file은 선택하지 않습니다.

- 사용하고자 하는 디렉토리는 선택 합니다.

- Finish 을 눌러 완료합니다.

 

SOURCE 를 합칩니다.

- 프로젝트 창에서 오른쪽 마우스를 누르면 Add Existing File 을 선택 할 수 있습니다.

- 여기서 demo.c 와 iocompat.h 을 선택 합니다.

- 프로젝트에 파일이 추가된 것을 볼 수 있습니다.

 

 

프로젝트의 옵션을 잡습니다.

- 프로젝트 창에서 오른쪽 마우스를 눌러 Edit Configuration Options 을 선택 합니다.

- 먼저 AVRSTUDIO 에서 기본적으로 제공하는 옵션을 선택 해서 사용해 보겠습니다.

- 위 화면과 같이 atmega128을 선택 하고 Optimization 레벨을 0으로 변경합니다.

- 메모리에 관련된 설정이 필요한경우 Memory Settings 에서 설정을 합니다. (현재는 필요가 없기 때문에 넘어가겠습니다.)

- Custom Options에 GCC의 Path가 정확하게 연결이 되어 있는지도 꼭 확인하셔야 합니다.

 

 

컴파일

- 설정이 완료되면 Build 버튼을 눌러 Build 합니다.

- 이상이 없으면 컴파일이 완료된 것을 Build 창에서 확인할수 있습니다.

 

 

Makefile 을 이용한 컴파일

- AVRSTUDIO 는 기존에 GCC컴파일에서 사용하는 make 파일을 선택해서 컴파일 할수도 있습니다.

- 이때는 Options 에서 Use External Makefile 을 선택 하고 사용하고자 하는 Makefile 을 선택합니다.

- 컴파일을 하면 됩니다.

 

'공부 > AVR' 카테고리의 다른 글

[ATMEGA128] 2.6통합환경구축(3)  (0) 2012.11.09
[ATMEGA128] 2.6 통합환경구축 (2)  (0) 2012.11.09
[ATMEGA128] 2.5 ISP & JTAG  (0) 2012.11.09
[ATMEGA128] 2. 개발환경구축  (0) 2012.11.09
[ATMEGA128] 1. ATmega128의 기본 구조 (4)  (0) 2012.11.09

2.5 ISP & JTAG

개발 환경을 구축하기 위해서는 다시 설명되는 장비 중 하나 또는 다수가 필요 하며 해당하는 S/W또한 필요합니다.

1) ISP

u AVR 시리즈는 모두 ISP 기능을 내장하고 있습니다. ISP 기능이 없는 CPU의 경우 거의 대부분 고가의 롬라이터를 이용해 프로그램을 해야 합니다. 그러나 ISP 기능 지원으로 매우 저렴하고 편리하게 프로그램 할 수 있습니다.

u 현재 ISP 에 사용되는 프로그램 및 툴은 매우 다양하며 그 사용법도 각각입니다. 저의가 추천해 드리는 방식은 STK500 형태의 ISP방식입니다. 이 방식은 FLASH Page 블록을 한번에 메모리에 저장하여 라이트 하는 방식을 사용하여 보다 빠른 속도를 지원합니다. 이런 방식의 제품으로는 대표적인 것이 ATMAL AVRISP MCUWORLD WIZAVRISP 2.0 등이 있습니다. 프로그램은 AVRSTUDIO에서 지원하며 AVR 모든 디바이스를 지원 합니다. 또한 AVRSTUDIO가 업그레이드를 지원 합니다.

 

 

2) JTAGICE

u AVR 의 개발을 더욱 쉽게 하기 위해서는 JTAG 장비가 필수 입니다. 개발시 JTAG포트를 사용하여 인서킷 에뮬레이터를 지원합니다. 지원하는 기능으로는 메모리덤프, 싱글스텝 디버깅, 브레이크 포인트 등이 있습니다. 모든 AVR을 다 지원하는 것은 아니나 ATmega128의 경우 지원을 하고 있습니다.

u Mcuworld WIZ AVRJTAG PRO 의 경우 JTAG 을 지원 하며 ISP도 추가적으로 지원을 하고 있습니다. 이를 이용해 고가의 장비가 지원하는 소스레벨 디버깅이 가능 하며 기타 다양한 기능도 사용이 가능합니다. 단 주의 사항으로 ATmega128 Flash Write 횟수가 10000번으로 제한되어 있어 이 이상 사용시 CPU를 교체해야 할 수도 있습니다.

u 프로그램으로는 AVRSTUDIO를 사용하고 있습니다.

 

 

3) JTAGICE MKII

u JTAGICE와 기능적으로는 비슷합니다. 단 추가적으로 debugWIRE를 지원하며 그 외에 좀더 많은 디바이스를 지원하고 있습니다.

 

+ Recent posts