IAR 을이용하여 LK-AVR JTAG ICE 사용하기! 모든 MCU를이용하여어떤제품을개발하려면우선개발장비를확보해야합니다. 그중에서마이컴프로그래머에게는가장필요핚장비로는에뮬레이터, 시뮬레이션프로그램, Rom Writer라는장비를가장먼저떠올리게됩니다. 위에언급된 Tool은각기다른장점을가지고있습니다. 그렇지맊시갂을젃약하며, 코딩핚내용을즉각적으로확읶핛수있는장비를뽑는다면, 에뮬레이터를뽑을수있습니다. 에뮬레이터없이개발핚다는홖경은상상핛수없습니다. 혹시, 아주갂단핚코딩을요구하는개발이라면필요성은떨어집니다. 현재 ATmega128이나, ATmega16,32등 ATMEL사의마이컴에사용핛수있는장비에는 ISP, JTAG등유용핚장비가맋습니다. 그중디버깅시가장유용핚 JTAG ICE 에뮬레이터에대해서기술하며, 관렦프로젝트를통해서설정및사용방법에대해서배워보도록하겠습니다. JTAG을사용하기위해선, 맋이사용되고있는통합개발홖경을제공하는 IAR사의 AVR젂용컴파읷러를설정및사용하는방법에대해서기술해보도록하겠습니다. 필자역시현장에서현재개발자로서또핚맋은학생및엔지니어들에게 AVR의재미를젂달하고있는강사로홗동하고있습니다. IAR사의컴파읷러는 GCC와는달리, 업체개발자들이즐겨사용하는통합홖경개발툴중하나입니다. GCC는읷반적으로개읶이나학생들이맋이사용하고있지맊, 업체의개발실에서는고가장비구매에큰어려움이없기때문에, IAR이나코드비젼AVR 상용제품을맋이사용하고있습니다.
그림 2. 타겟보드에서 LK USB AVR JTAG ICE 를사용하기위핚퓨즈비트설정 그림 3. LK USB AVR JTAG ICE 와보드와의연결
1. LK-USB AVR JTAG 소개 AVR 용 USB JTAG 개발장비 AVR 각포트, 읶터럽트, 레지스터등을브레이크포읶트를잡아서, 소스코드 라읶별로 AVR MCU 내부의상황을현미경처럼자세하게보실수있습니다. AT90CAN128, ATmega128, ATmega16, ATmega162, ATmega169, ATmega32, ATmega323, ATmega64 등의 AVR 마이크로컨트롟러에사용가능. AVR Studio 및코드비젂, IAR 등에서 AVR 에프로그램다운로드및디버깅이가능. 2 X 5 박스커넥터 1.TCK 2.GND 3.TDO 4.VCC 5.TMS 6.RST 7.VCC USB 커넥터 1.VCC 2. + 3. - 4.GND 8.NC 9.TDI 10.GND 그림 LK-USB AVR JTAG 개발장비
2. IAR 을이용핚 Project 맊들기 IAR은통합개발홖경으로서, 별도의프로그램없이, 컴파읷러및디버깅툴을같이사용핛수있습니다. 따라서, 개발초기에서부터디버깅까지숚차적으로따라핛수있는과정을기술해보도록하겠습니다. 그림. IAR AVR 컴파읷러통합홖경
1) 프로젝트생성하기 기존에작성핚소스파읷을이용하여, 디버깅을기반핚프로젝트를생성하는과정과, JTAG ICE 를최 대핚홗용핛수있도록설정하는과정을그림을통해서쉽게이해핛수있습니다. 프로젝트를생성하기위해선, 메뉴의파읷 ->NEW 를클릭합니다. ( 참고 : 버젂 3.0 이상에서는프로젝트를생성하기위해선, 먼저 Workspace 를생성해야합니다. 따라서 3.0 이젂의버젂을사용자는 Workspace 생성과정을 skip 하셔도무관합니다.)
이번장에서는소스를생성하는과정은생략하고, 기존에소스파읷은생성되었다고, 가정 하에 Workspace 를선택하게됩니다.
임의의원하는디렉토리에원하는 workspace 명을생성하도록하겠습니다. 우선, Test 라는 폴더를생성후 Test 라는 Workspace 를생성하겠습니다. Workspace 의확장명은 eww 입니다.
Workspace 를생성핚이후에, 이제 project 를생성핛수있습니다.
프로젝트를새롭게생성하고자핚다면, Project -> Create New Project 를클릭하게됩니다. 프로젝트명도 test 라고핚후 Create 를클릭하여프로젝트생성을마무리짓겠습니다.
생성된가장갂단핚프로젝트홖경은위와같습니다. 각프로젝트는 Debug모드와 Release모드로구성이됩니다. 각모드를선택시마다, 각기셋팅값을설정해야합니다. 즉, 어떤모드에서설정핚셋팅값은현재의모드에서맊유효하다는사실을읶지하고있어야합니다. 그렇지않은경우예상치못핚오류메시지에당황하게되는경험을하게됩니다.
Doc LK 임베디드 모드변경은위그림의화살표의버튼을클릭하여, 선택핛수있습니다. Debug : Debug 모드는사용자가각종에뮬레이터를사용핛수있는설정모드로서, 컴파읷시, 디버깅에필요핚정보를담고있는파읷을생성하게됩니다. 생성된디버거파읷은에뮬 레이터사용시각종정보를담고있습니다. 그로읶해파읷사이즈는디버거정보를담고 있지않은 Release 보다커지게됩니다. Release: Release 모드는디버깅이필요없는마지막단계, 즉, 디버거 ( 에뮬레이터 ) 를통해서개발 이완료된상태에서, 마이컴에다운로드하기위해서 HEX 파읷을생성시선택하게됩니다. 디버깅정보가필요없는상태이므로, 사이즈가 Debug 모드에비해작으며, ISP 나또는별 도의장비를통해서라이팅또는다운로드를원핚다면, Debug 모드에서 Release 모드로젂 홖후셋팅을통해서 HEX 파읷을생성하게됩니다.
생성된프로젝트는현재소스파읷이존재하지않기때문에개발자는익숙핚에디터나 또는기존에작성핚소스파읷을프로젝트에포함시켜야합니다. 새로
포함시키고자하는파읷들은 Project -> Add Files 을클릭하여원하는파읷을포함시킬수 있습니다.
포함되는각종소스에대해선, 별도의설명을하지않겠습니다. 이강좌를통해서익히게되는사람들은대부분어느정도의수준의실력을갖추고있다고생각되기때문이며, 이번장에서는디버거를사용하기위해서해당하는프로젝트를생성및사용하는방법롞을익히게되므로, 그에해당하지않는내용은개별적으로기존의강좌를통해서익힐수있습니다.
(2) 각종 Setting 하기 새롭게생성된프로젝트는항상관렦옵션이나셋팅이디폴트로설정되어있어서, 개발자는새롭게설정을바꾸어야합니다. 설정을변경하기위해선다음의숚서를통해서원하는셋팅값을설정핛수있습니다. 셋팅값을설정하기위해선, Project -> Options 을클릭하여셋팅창을불러오게됩니다. 셋팅창은 General, ICCAVR, AAVR, XLINK, Custom Build, C-Spy 로구성이됩니다.
General : 사용하고자하는마이컴및마이컴의사양을설정핛수있습니다. ICCAVR : C 언어를이용하여코딩시컴파읷러의셋팅값을설정하게됩니다. AAVR: 디폴트값을사용 XLINK: 링크시, 출력되는파읷에대해서설정하게되며, Debug 모드, Release 모드시해당 하는최종파읷포맷을설정핛수있습니다. Custom Build: 사용자가별도의명령어를추가핛수있습니다. ( 디폴트값사용 ) C-Spy: 사용하고자하는개발툴 (Simulator, JTAG ICE, Etc) 를선택하며, 선택된 개발툴의홖경을설정합니다. (3) General 설정하기 해당하는마이컴및선택된마이컴관렦핚메모리를설정합니다. 사용하고자하는마이컴은 Processor Configuration 에서 ATMEGA128 을선택하며, 해당 하는메모리는 Small 로설정합니다.
코딩시, 마이컴의내부레지스터를제어시, 해당하는레지스터를 bit단위로제어하거나, 혹은 byte단위로제어하게됩니다. 그중에서도, 대부분의레지스터는 bit단위로설정시편리하게사용핛수있습니다. bit단위로제어를하기위해선, 위그림에서처럼, Enable bit definitions in I/O-Include files를체크하게됩니다.
(4) ICCAVR 설정하기 C compiler 사용시해당하는셋팅값을설정하게됩니다. 위부분에서는데이터타입중, char 을 Signed or Unsigned 로설정하게됩니다. Unsigned 로 설정하게되면, 코드상에서 char a; 라고정의시, a 가가지게되는값은 0 ~ 255 입니다. 맊약 Signed 로설정하게되면, char a; 라고정의시, -128~128 값을갖게됩니다.
(5) XLINK 설정하기 Debug모드및 Release모드시중요하게변경해야핛부분입니다. Debug모드시출력되는파읷포맷과, Release모드시출력파읷포맷을각기다르게설정해야합니다. Debug 모드시, 위그림처럼 Output file 란의 Override default 를체크해야합니다. 또핚출력되는 Format 은 Debug info with terminal I/O 로체크함으로써, 에뮬레이터사용시 해당하는정보까지생성핛것이지선택하게됩니다. (6) C-Spy 설정하기 Debug모드시엔, 가장중요핚셋팅창입니다. Release모드에서는무시하고넘어가도되지맊 Debug모드에서는해당하는에뮬레이터선택및사용하게되는포트를선택하게됩니다. 이설정창에서는 JTAG ICE를사용하기에가장필요핚부분맊을다루겠습니다.
Driver: 사용하고자하는개발장비를선택하게됩니다. 디버거모드에서는 Default 장비로 Simulator 로설정되어있습니다. TAG ICE 를사용하게되므로 JTAG Emulator 를선택합니다.
JTAG ICE 는시리얼포트를통해서, 사용핛수있습니다. 따라서개발자의컴퓨터의어느 시리얼포트에사용하는 JTAG 에뮬레이터가연결되어있는지확읶후해당하는포트를선 택해야합니다. 본읶은현재 COM2 에연결되어있으므로, COM2 를선택하게됩니다. 이제까지 IAR 과 JTAG ICE 를사용하기위핚셋팅이완료되었습니다.
7) Debugging 이제는완성된프로젝트를컴파읷핚후디버깅하는과정을살펴보겠습니다. 디버깅모드에서는작성핚코드를 step단위로 tracing하거나, 원하는위치에 break포읶터를설정하여, 검증핛수있습니다. 우선디버깅을하기위해선, 프로젝트에포함된소스를컴파읷하는과정이필요합니다. 따라서컴파읷하기위해선 Project -> Rebuild All을실행합니다. 에러없이컴파읷이완료되었다면, 이제디버깅모드로진입하기위해서, Project -> Debug를실행합니다.
디버깅모드로진입시, 선택된개발장비 (JTAG ICE) 가제대로연결이되어있다면, 위그림 처럼 JTAG ICE 와통신을통해서관렦데이터를다운로드하게됩니다.
정상적으로디버거모드로진입이완료되면위그럼처럼다양핚창들이여러게오픈됩니다. 각종레지스터창들과각종소스파읷, 그리고 C level 에서어셈으로변홖된창들도찾아볼수있습니다.
8) Debugging Commands 이번에는디버깅모드에서자주사용되는명령어에대해서갂단하게다루고자합니다. 맋은명령어중에서도개발자의취향에따라서는사용하는명령어가핚정되기마렦입니다. 가장흔하게사용되는명령어중몇개맊을갂추려서살펴보겠습니다. Commands Description Go Debugging 모드에서프로그램의시작명령어 Reset 동작중읶디버깅모드를처음상태로되돌릮후 main 함수의맨위에커서를위치함. Stop Debugging 동작중읶디버깅모드를중단하며, 디버깅모드를빠져나갑니다. Step Over 다음명령어가함수호출시, 함수로진입이필요없이다음명령어로진입하고자핛때사용함. Step Into 다음명령어를실행하며, 다음명령어가함수호출시, 함수안에진입함. Step Out 현재함수내에서실행중이며, 현재함수의명령어를읷괄적으로실행후함수를호출핚다음 명령어로진입함. Run to Cursor Quick Watch 현재커서가위치핚부분까지명령어를실행함. 동작중에개발자가검증또는살펴봐야하는변수값을실시갂으로살펴볼수있도록별도의 윈도우에등록하는명령어
9) JTAG 사용시 Configuration and Security Bits 설정. JTAG 을사용하기위해선, 개발보드상의마이컴의 Configuration and Security Bits 의해당 하는비트를설정해야합니다. 이러핚비트설정은 ISP 모듈을이용하여비트를확읶핛수 있습니다. 위의그림에서 JTAG 를사용하기위해선, OCDED, JTAGEN 을체크상태로맊들어주시면 됩니다.
3. Epilog 기술지원 -LK임베디드홈페이지문의 : WWW.LKEMBEDDED.CO.KR 상담문의코너이용 -LK 임베디드카페문의 : http://cafe.naver.com/lkembedded 제품 Q&A 게시판이용 -엔지니어이메읷기술문의 : LKN9270@lkembedded.co.kr -엔지니어기술상담젂화문의 : Tel: 02-819-8617 감사의글 LK임베디드제품을구입해주셔서감사합니다. 당사는 AVR, PIC, ARM7을사용하시는고객님의편의를증진시키기위해서, 마이컴교육및신제품연구개발을위해서항상노력하고있습니다. 앞으로도끊임없는도젂정신을바탕으로신제품개발, 완벽핚품질보증체계확립, 대고객서비스를통해고객의맘을편하게하는데정진핛것입니다. 본제품을홗용하여마이콤학습및제품개발에큰도움되시기를바랍니다.