AVR Studio 소개 1. AVR Studio 의다운로드 AVR Studio 는 Atmel 사의 8bit MCU 인 AVR 용의통합개발환경툴 (Integrated Development Environment (IDE) tool) 이며프로그램내부에어셈블러, 시뮬레이터, 에뮬레이터를사용한디버거, AVR 용개발툴용소프트웨어가포함되어있다. AVR Studio 는 3.5x 버전과 4.0x 의두가지버전이있으며, 개별적으로설치가가능하고 Windows95/98/ME/2000/XP 에서사용할수있다. AVR Studio 3.x 버전은 AVR 초기부터업그레이드되어온버전으로현재는 3.56 버전이가장최신버전이며, AVR Studio 4.0x 버전은 3.5x 버전과호환성은유지하지만 3.5x 버전의업그레이드버전은아니며최근에새로개발된새로운버전이다. 만약한가지버전의 AVR Studio 를사용하고자한다면, 90S 시리즈사용자는 3.5x 버전을, 최근에나온디바이스를사용한다면 4.0x 버전을사용하기바란다. 두가지버전이개별적으로설치가가능하므로무리가없다면두개의 Studio 를설치하여사용하는것도좋다고본다. AVR Studio 는 Atmel 홈페이지의 http://www.atmel.com/products/avr/ 에서 Tools & Software 에서다운받을수있다. 여기에서는최근디바이스가포함된 AVR Studio 4.0x 버전을사용한디버깅과툴사용법을소개하고자한다. AVR Studio4.0x 버전설치시에설치폴더를임의로바꿀경우설치한후에제대로동작이안될수가있습니다. 특히 XP 사용자일경우기본설치폴더에설치해주시기바랍니다. - AVR Studio 관련홈페이지 - Atmel 홈페이지 : http://www.atmel.com 프로차일드 : http:// AVR Freaks : http://www.avrfreaks.net
AVR Studio 의실행 1. AVR Studio 의실행 AVR Studio 를처음실행시키면아래와같은창이뜨게된다. 이중에서가운데에있는창은 Project Wizard 창으로 최근에작업한어셈블러프로젝트나디버깅프로젝트의리스트를보여줌으로써빠른작업을가능케도와준다. 이창은매번 AVR Studio 를실행할때마다뜨게되므로이것이귀찮을경우왼쪽하단의 Show this dialog on open 의체크박스를지워주면된다. 새로운어셈블러프로젝트를만든다 Project Wizard 윈도우 리스트에없는디버깅프로젝트를열때사용한다. 지금은새로운어셈블러프로젝트를만들어서사용할것이므로일단은을눌러창을종료시킨다. 만약 C 로작성된파일을가지고디버깅을하고자한다면 10 Page 에있는 AVR 디버깅을참고하시오.
AVR 어셈블러 2. 새어셈블러프로젝트만들기 Project -> New Project 를누르면아래와같은창이뜨게된다. Project Type 은 Atmel AVR Assembler 로고정되어있다. Project Name : 만들고자하는프로젝트이름을적는다. Create Initial file : 새로운프로젝트를만들때프로젝트이름과동일한 ASM 파일을만든다. 만약기존에있는 ASM 파일을사용하고자한다면체크하지않는다. 기본적으로체크되어있다. Create Folder : Location 에서지정한폴더에프로젝트이름과동일한폴더를만든다. 만약 Location 에서지정한폴더에프로젝트를생성하고자할경우체크하지않는다. 기본적으로체크되어있지않다. Location : 프로젝트파일이위치할폴더를선택한다. 되도록이면 ASM 파일이있는폴더에프로젝트를만든다.
AVR 어셈블러 새로운프로젝트를만들고새로운 ASM 파일을작성해야하므로, Location 에프로젝트를만들폴더를선택하고, 적당한프로젝트이름을적고, Create Initial File 에있는체크를지우고, Next 를누른다. 사용하려는에뮬레이터나시뮬레이터를선택한다. 사용하려는디바이스를선택한다. 에뮬레이터가있는경우 : 해당에뮬레이터의종류를선택하고사용하고자하는 Device 를선택한다. ( 예 : JTAG ICE 가연결되어있는경우 JTAG ICE 를선택한다.) 그외의경우 : AVR Simulator 를선택하고사용하고자하는 Device 를선택한다. 이경우시뮬레이터로동작한다. 만약 Device 창에 ATmega128 하나밖에안뜬다면 AVR Studio 를다시설치하여야한다. 제어판에서프로그램추가 / 삭제에서 AVR Studio4 를선택하여제거한후에디폴트폴더에다시설치하여야한다.
AVR 어셈블러 4. 새로운어셈파일만들기 File -> New File 을눌러새로운파일을생성하고, File -> Save file as 를눌러확장자가 asm 인어셈파일로저장한다. 이때가급적이면해당어셈블러프로젝트파일이있는폴더에어셈파일을저장하도록한다. 만약어셈블러프로젝트파일과해당어셈파일이서로다른폴더에있을경우 hex 파일은프로젝트파일이있는폴더에생성된다. Ex) firstasm.asm 가급적이면어셈블러프로젝트가있는폴더에어셈블러파일을저장한다. 확장자가 asm 인어셈파일로저장한다.
AVR 어셈블러 5. 프로젝트에어셈블러파일등록 OR Workspace -> Assembler -> 마우스오른쪽클릭 -> Add existing File 을누르고어셈파일선택 메뉴의 Project -> Add existing File 선택 -> 어셈파일선택 Workspace -> Project Name -> Assembler ->Assember file 이등록이된다.
AVR 어셈블러 6. 어셈파일작성하기 일단다음과같이어셈파일을작성한후저장을한다. 어셈블러파일일경우약 1000 라인이넘어가게되면사실상디버깅이굉장히힘들어지므로, 일정한규칙을가지고소스를작성하여야하며, 곳곳에주석을달아어떤목적으로사용하였는지설명해놓는것이좋다. 어셈블러의경우일반적으로 TAB 사이즈를 8 로사용하며 C 의경우 4 를사용하는데, 특별한규칙이있다기보다는 TAB 을사용하여띄여쓰기를할경우보기좋게하기위함이다. 소스의알고리즘이나내용도중요하지만일단은 보기좋은소스가잘짠소스이다
AVR 어셈블러 7. 기본설정및컴파일 소스의내용은 PORTB 에 1 과 0 을반복해서출력하는것이다. 일단소스가작성되었으면 AVR Studio 가설치된폴더에서 AvrAssembler 폴더 -> appnotes 폴더를찾은후그폴더에서사용디바이스의 include 파일을프로젝트가있는폴더로복사한다. 기본설치폴더는 Program Files -> ATMEL ->AVR Tools 이다. Program Files -> ATMEL -> AVR Tools -> AvrAssembler -> Appnotes m16def.inc, 8535def.inc, t16def.inc. 예 ) ATmega16 을사용하므로 m16def.inc 파일을복사하여어셈블러프로젝트가있는폴더에복사한다. Build(F7) 준비가되었으면메뉴툴바에서 Build 를누르거나메뉴에서 Project -> Build 를누른다.
AVR 어셈블러 Start Debugging 컴파일에에러가없다면툴바에삼각형의아이콘이생겨나며이것을누르면 Debug 플랫폼에서설정한값으로디버깅을시작한다. ( 예, AVR Simurator, ATmega16 을선택하였다면 ATmega16 디바이스로시뮬레이션을하게된다.
AVR 디버깅 8. 디버깅 AVR Studio 에서작성된어셈블러일경우자동으로디버깅모드로들어갈수있지만 C 로작성된파일이나, 기타외부에서 Assembly 된파일일경우디버그파일 ( 오브젝트파일 ) 을불러와서디버깅할수있다. File -> Open File 을누르거나 ( 불러오기 ) 아이콘을누른다. *.d90 : IAR C 컴파일러의 AVR 의디버그파일포맷이다. *.cof : Common Object File 포맷 *.obj : 어셈블러 Object File 디버그파일이있는폴더에서확장자가 *.d90 *.cof *.obj 인파일을찾아서열기를누른다.
AVR 디버깅 디버그플랫폼셀렉트윈도우가열리며, 사용하고자하는에뮬레이터와디바이스를선택한다. 사용하려는에뮬레이터나시뮬레이터를선택한다. 사용하려는디바이스를선택한다. 에뮬레이터가있는경우 : 해당에뮬레이터의종류를선택하고사용하고자하는 Device 를선택한다. ( 예 : JTAG ICE 가연결되어있는경우 JTAG ICE 를선택한다.) 그외의경우 : AVR Simulator 를선택하고사용하고자하는 Device 를선택한다. 이경우시뮬레이터로동작한다. 만약 Device 창에 ATmega128 하나밖에안뜬다면 AVR Studio 를다시설치하여야한다. 제어판에서프로그램추가 / 삭제에서 AVR Studio4 를선택하여제거한후에디폴트폴더에다시설치하여야한다.
AVR 디버깅 선택한파일에이상이없다면 Workspace 와 Source windows 가뜨며, AVR Studio 는디버거로서동작하게된다. Workspace I/O 나 Clock 등을확인할수있다. Source Windows 현재디버깅하고있는파일의소스를보여주며현재프로그램카운터가위치하고있는곳을가리킨다.
AVR 디버깅 이때의툴바의아이콘들의구성은다음과같다. Debug 플랫폼에서설정한상황으로디버깅을시작한다. 디버깅을멈춤다. 타겟을 Reset 한다. 이때 C 소스라면 Main 함수의첫번째라인에, 어셈소스일경우 0 번지에커서가위치한다. 타겟을 Run 시킨다. Break Point 가있을경우브레이크포인트에서멈추게되며소스상에에러가없을경우완전동작을하게된다. 타겟이 Run 상태일때동작을멈추게한다. C 나어셈일경우커서가위치한라인의명령을한개수행한다. 만약명령어가아닌함수나서브루틴 Call 일경우함수나서브루틴으로들어가게된다. 수행하고있는함수나서브루틴을마저다실행하고나온다. 현재위치 ( 현재의프로그램카운터 ) 에서부터커서가있는위치까지만실행을한다. 중간에 Break Point 가있을경우 Break Point 에서멈춘다.
AVR 디버깅 C 나어셈일경우커서가위치한라인의명령을한개수행한다. 만약명령어가아닌함수나서브루틴 Call 일경우함수나서브루틴을수행하고나온다. 순차적으로명령어들을자동으로실행한다. 현재의프로그램카운터의위치를나타낸다. Break Point 를 Set 하거나 Clear 시킨다. 명령어를실행하다가 Break Point 를만나면멈추게된다. JTAG ICE 의경우 Break Point 는 4 개까지만설정할수있다. 모든 Break Point 를클리어시킨다. 변수명을더블클릭으로설정한후 Quick watch 를누르면팝업창이뜨며선택한변수의값을보여준다. Watch view 창을활성화, 비활성화시킨다. Watch view 창은모든선언된변수나상수를확인할수있다. Memory view 창을활성화, 비활성화시킨다. Memory view 창에선 AVR 의모든내부및외부메모리를확인할수있다.(Ex, Flash, SRAM, EEPROM, I/O, REGISTER ) 프로그램소스를 Disassembly 된코드로보여준다. 소스가 C 일경우 PC(Program Counter) 와 OP code, 어셈블러로번역된소스를보여주고어셈블러일경우 PC 와 OP code 를보여준다.
AVR 디버깅 소스창에서원하는위치에커서를가져간후마우스오른쪽버튼을누르면다음과같은팝업창이나온다. 이중에서, 잘쓰는것들을보면, Add to watch : 마우스가가리키고있는위치의변수를 Watch 윈도우에등록시킨다. Toggle break : 마우스가가리키고있는위치에브레이크포인트를 Set 하거나 Clear 시킨다. Run to cursor : 마우스가가리키고있는위치까지 Run 하고그위치가되면멈춘다. 물론이럴경우그위치까지실행이되지않는다면멈추지않고실행이된다. 등이있다. 이런부분들은세세하기설명하기힘드므로, 한번씩해보고익숙해져야한다.
AVR Tools 9. AVR Tools AVR Studio 에서는기본적으로 Atmel 에서 AVR 용으로나온모든에뮬레이터와스타터킷, ISP 를지원한다. AVR Prog : AVR Appnote AVR 901: In-System Programming 에있는어셈파일을지원하는 PC 프로그램이며, AVR109 Self-programming 에서도 AVR Prog 를사용해서다운로드한다. STK500, JTAG, AVR ISP 등에서펌웨어를수동으로업그레이드할때에도사용한다. ICE50 Upgrade : ICE40, ICE50 에뮬레이터의펌웨어를업그레이드할때사용한다. ICE50 Selftest : ICE40, ICE50 의자기진단테스트에서사용한다. STK500/AVRISP/JTAG ICE : STK500, AVR ISP, JTAG ICE 를사용하여타겟디바이스를 Programming 할때에사용한다.
STK500/AVR ISP/JTAG ICE Atmel 사에서나온 Tool 중에서 STK500, AVR ISP, JTAG ICE 등은디바이스를라이팅할수있는 ISP 기능을가지 고있다. 인터넷에있는 PC 의프린터포트를사용하는케이블은 (KANDA STK200/300 케이블 ) AVR Studio 에선 지원하지않으므로주의하여야한다. STK500 AVR ISP JTAG ICE 이기능을사용하기위해서는메뉴아이콘중 을누르거나, Tools -> STK500/AVRISP/JTAG ICE 에서역시 STK500/AVRISP/JTAG ICE 을선택해주면된다.
STK500/AVR ISP/JTAG ICE Device : 라이팅을할디바이스를선택한다. Erase Device : 디바이스의메모리를지운다. 만약장비가연결되어있다면 Detectiong..STK500 found on COM 1: 등과같이연결된장비명과시리얼포트명이나오게된다. 만약 AVR ISP 나 JTAG ICE 가연결되어있다면 STK500 이라고써있는부분에연결된장비명이나온다. 만약 Detecting.. FAILED! 라고나온다면장비와연결이되지않은것이므로 PC 의시리얼포트를확인해보거나, 장비의전원을 확인해보아야한다. Programming mode : ISP : 6 Pin 혹은 10 Pin 케이블을사용하는 ISP 모드이다. MOSI, MISO, SCK, RESET, VCC, GND 를연결해서 라이팅하게된다. Parallel/High Voltage Serial : Reset 에 12V 를사용해서라이팅하는모드이다. 일반적인방법이아니므로설명은 STK500 의 User Guide 를참고하기바란다. Erase Device Before Programming : 디바이스를라이팅하기전에 FLASH 와 EEPROM 을지운다. Verify Device After Programming : 디바이스를라이팅한후에 Verify 동작을수행한다.
STK500/AVR ISP/JTAG ICE Input HEX File : Flash 에라이팅하기위한 *.hex, *.a90 파일을선택한다. Program : Flash 에선택한 Hex 파일을라이팅한다. Read : Device 의 Flash 를읽어서파일로저장한다. Input HEX File : EEOROM 에라이팅하기위한 *.hex, *.a90,*.eep 파일을선택한다. Program : EEPROM 에선택한 Hex 파일을라이팅한다. Read : Device 의 EEPROM 를읽어서파일로저장한다. *.hex : Intel Hex File Format *.a90 : IAR Compiler 에서생성되는 Intel Hex Format *.eep : AVR 어셈블러에서생성되는 eeprom 용 hex 파일 Atmel 에서나온 AVR 장비들은모두인텍헥사파일포맷을사용하므로 AVRGCC 등의컴파일러에서출력파일 포맷을 Intel Hex 로선택하여야한다.
STK500/AVR ISP/JTAG ICE Fuse 메뉴에서는디바이스의동작환경을설정할 Fuse bit 를설정할수있다. 90S 시리즈와 Mega 시리즈의 Fuse 비트에상당한차이가있으므로주의하여야한다. 디바이스와의연결이이상이없다면상태창에현재디바이스에설정된 Fuse Bit 값을읽어오게된다. Fuse 비트는한번라이팅하면지워지지않고유지되므로, 다시설정해줄필요는없지만, 처음에잘못설정되면 ISP 로프로그램모드로들어가지않으므로주의하여야한다.
STK500/AVR ISP/JTAG ICE Fuse Bit의개별적설명 (ATmega128 기준 ) ㅁ ATmega103 Compatibility Model[M103C=0] 기본적으로체크되어있으며 ATmega 128 로사용하고자할적엔체크하지않는다. 이것은 Mega128이 Mega103의후속모델로나왔기때문이며, Mega162, Mega8515, Mega8535 등은각각 161,8515, 8535와호환모드를갖는다. ㅁ Watchdog Timer always on; [WDTON=0] 워치독타이머를하드웨어적으로 ON 시킨다. ㅁ On-Chip Debug Enabled; [OCDEN=0] JTAG 을사용한 Debug 를 Enable 한다. 체크하지않는다. ㅁ JTAG Interface Enabled; [JTAGEN=0] JTAG 을사용해 Debug 나 Writing 을할때체크한다. JTAG ICE 을사용하지않는다면체크하지않는다. ㅁ Serial program downloading (SPI) enabled; [SPIEN=0] ISP 기능을사용할때체크한다. 기본적으로체크되어있으며, 이비트가지워질경우 ISP 로라이팅이되지않으므로 주의하여야한다.
STK500/AVR ISP/JTAG ICE ㅁ Preserve EEPROM memory through the Chip Erase cycle; [EESAVE=0] Device 의메모리를 Erase 할때 EEPROM 을지우지않는다. Device 를 Erase 할때에 Flash 와 EEPROM 을모두 지우므로, EEPROM 에저장되어있는데이터를보존하고싶을때사용한다. 단, Program 은가능하다. ㅁ Boot Flash section size=512 words Boot start address=$fe00; [BOOTSZ=11] ㅁ Boot Reset vector Enabled (default address=$0000); [BOOTRST=0] Self Programming 을사용할때 Boot Loader 가들어갈 Flash 메모리의크기와리셋번지를설정한다. 만약, Self Programming 을사용하지않는다면 Boot Flash section 의크기는어느것이든상관없으며 Boot Reset vector Enable 에는체크하지않는다. ㅁ Brown-out detection level an VCC=4.0V; [BODLEVEL=0] ㅁ Brown-out detection level an VCC=2.7V; [BODLEVEL=1] default value ㅁ Brown-out detection enabled; [BODEN=0] Brown-out detection 기능을사용할때체크한다. Brown-out detection 기능은 VCC가위에설정된레벨이하로떨어질경우시스템적으로 Reset을해주는기능이다. Brown-out detection enableed 를체크하지않으면레벨은상관이없다. ㅁ CKOPT fuse(operation dependent of CKSEL fuses); [CKOPT=0] Clock 의 Swing 레벨을 Small 에서 Full Swing 하게한다. Ext. Crystal/Resonator 를사용할때 8MHz 보다클경우 반드시체크해주어야하며, XTAL2 로다른디바이스에클럭을주고자할때에도사용한다.
STK500/AVR ISP/JTAG ICE ㅁ Ext. Clock; Start-up time: 6 CK + 0 ms; [CKSEL=0000 SUT=00] XTAL1 핀으로외부에서클럭을공급받을때사용한다. Oscillator 를사용할때사용한다. 만약 XTAL/Resonator 사용시실수로이클럭옵션을선택하게되면발진을하지않아 ISP 기능을사용할수없다. 이럴경우 Oscillator 를연결하거나, 펑션제너레이터로 XTAL1 에클럭을공급해주면서 ISP 로클럭옵션을바꿔주어야한다. ㅁ Int. RC Osc. 1 MHz; Start-up time: 6 CK + 0 ms; [CKSEL=0001 SUT=00] ㅁ Int. RC Osc. 2 MHz; Start-up time: 6 CK + 0 ms; [CKSEL=0010 SUT=00] ㅁ Int. RC Osc. 4 MHz; Start-up time: 6 CK + 0 ms; [CKSEL=0011 SUT=00] ㅁ Int. RC Osc. 8 MHz; Start-up time: 6 CK + 0 ms; [CKSEL=0100 SUT=00] 내부 RC 발진기를사용할때체크한다. 1~8MHz 까지선택할수있으며, 1MHz 를제외한 2,4,8 MHz 일경우, 외부롬라이터에서 Calibration Byte 를읽어서 OSCCAL 레지스터에써넣어주어야한다. ㅁ Ext. RC Osc. - 0.9 MHz; Start-up time: 18CK + 0 ms; [CKSEL=0101 SUT=00] ㅁ Ext. RC Osc. 0.9 MHz - 3.0 MHz; Start-up time: 18CK + 0 ms; [CKSEL=0110 SUT=00] ㅁ Ext. RC Osc. 3.0 MHz - 8.0 MHz; Start-up time: 18CK + 0 ms; [CKSEL=0111 SUT=00] ㅁ Ext. RC Osc. 8.0 MHz - 12.0 MHz; Start-up time: 18CK + 0 ms; [CKSEL=1000 SUT=00] 외부 RC 발진기를사용할때체크한다.
STK500/AVR ISP/JTAG ICE ㅁ Ext. Low-Freq. Crystal; Start-up tie : 1K CK + 4 ms; [CKSEL= 1001 SUT=00] 32.768KHz 의시계클럭을사용할시사용한다. ㅁ Ext. RC Osc. - 0.9 MHz; Start-up time: 18CK + 0 ms; [CKSEL=0101 SUT=00] ㅁ Ext. RC Osc. 0.9 MHz - 3.0 MHz; Start-up time: 18CK + 0 ms; [CKSEL=0110 SUT=00] ㅁ Ext. RC Osc. 3.0 MHz - 8.0 MHz; Start-up time: 18CK + 0 ms; [CKSEL=0111 SUT=00] ㅁ Ext. RC Osc. 8.0 MHz - 12.0 MHz; Start-up time: 18CK + 0 ms; [CKSEL=1000 SUT=00] 외부 RC 발진기를사용할때체크한다. ㅁ Ext. Crystal/Resonator Low Freq.; Start-up time: 258 CK + 4 ms; [CKSEL= 1010 SUT=00] 외부 Crystal 이나 Resonator 를사용할때사용한다 (Clock Freq : 9 ~ 16MHz) Start-up time :?? CK +?? ms 는시스템이 Reset 되었을경우다시 On 되기까지의리셋딜레이이다. 각클럭옵션마다 SUT 값에따라각각다른리셋딜레이가있다. AVR Studio 에서는클럭옵션에대한설명이나와있지만 PonyProg2000 등과같은프로그램에선이부분에대한설명이나와있지않으므로, 데이터쉬트에서 System Clock and Clock Options 부분을잘읽어보고선택해야한다. 특히해당비트를체크하면 0 이므로이부분을주의해야한다.
기타사항 기타 AVR과관련된질문사항은프로차일드의홈페이지인 의 Question 에올려주시면최대한답변해드리겠습니다. 이문서에더추가되거나수정해야할사항이있으면 wjhong@prochild.com 이나 ragon@prochild.com 으로연락주시면감사하겠습니다.