ASF(Atmel Software Framework) 환경을이용한프로그램개발 1. New Project Template 만들기 A. STK600 Board Template를이용한 Project 만들기 i. New Project -> Installed(C/C++) -> GCC C ASF Board Project를선택하고, 1. Name: 창에 Project Name( gpio_basic_stk600_board) 을입력한다. 2. Location: 창에 Project 정정위치 ( D:\AVR_devlop\studio7.x\) 를선 택한다. 3. Solution: 창에자동으로 Project Name과같은 Solution Name이설정된다. 4. OK 를 Click 한다. Board Selection 창에서 1. Device Family 창에서 XMEGAAA를선택하고 2. Device 선택창에서 ATxmega128A4U를선택한다. 3. Board 선택창에서 STK600 Atxmega128A4U를선택하고 OK 를 Click 한다. i Project Template 가자동으로생성되고 ASF Wizard 창이열린다. 1. Project: 지금생성된 Project( gpio_basic_stk600_board ) 를선택한다. 2. Available Modules 창에현재버전 (Atmel ASF(3.28.1) 에서선택할수있는 Modules 이표시되고, 3. Selected Modules 창에는현재선택되어포함된 Module 이표시된다. 4. 기본으로 Generic board support (driver), GPIO, IOPORT 3개의 Module이 표기된다. 5. 이 Project 에서는기본적인 I/O Port 만사용하기때문에추가 Module을 Add 하지않는다. 만약 USART를사용하는경우에는 USART Module을 ADD 한다. iv. 사용하는 Board Header File 확인및편집 1. Solution Explorer 창에서 A. src -> ASF -> xmega -> board -> stk600 -> rc044x 폴더를선택한다. B. stk600_rc044x.h File를 open 하고내용을확인한다.
C. KHU-EE xmega Board 에서는 Button 을 2 개만사용하기때문에 GPIO_PUSH_BUTTON_2 과 GPIO_PUSH_BUTTON_3 define 을 Comment 처리 한다. D. AT45DBX 도사용하지않기때문에 Comment 처리한다. E. BOARD_XOSC_HZ 은 8M 을 16M 로변경하고이 File 를저장한다. 2. Solution Explorer 창에서 A. src -> ASF -> xmega -> board -> stk600 -> rc044x 폴더를선택한다. B. init.c File를 open 하고내용을확인한다. C. LED의초기상태를 LOW(Off) 상태가되도록 ioport_configure_pin 부분의 IOPORT_INIT_HIGH 를 IOPORT_INIT_LOW 로편집한다. 별첨 File 참고요. D. Button 은 2개만사용하기때문에 Button 2,3 번을초기화하는부분을 Comment 처리한다. E. CONF_BOARD_AT45DBX 부분도 Comment 처리하고저장한다. 3. Solution Explorer 창에서 A. src -> ASF -> xmega -> board -> stk600 -> rc044x 폴더를선택한다. B. led.h File을 open 한다. C. STK600_board의 LED는 Low 출력에서 On 되고, High 출력에서 Off 되지만 KHU-EE Board에서는 Low 출력에서 Off 되고, High 출력에서 On 되기때문에 LED_Off와 LED_On 관련 define 문을별첨예와같이편집하고저장한다. v. main() Function 작성 1. 별첨 gpio_basic_stk600_board.zip의 main.c file을참고하여 main() 함수의내용을편집한다. vi. Project를 Build 한다. v Chip45boo2 GUI를이용하여 KHU-EE Board에다운로드하여실행한다. B. User Board Template를이용한 Project 만들기 i. New Project -> Installed(C/C++) -> GCC C ASF Board Project를선택하고, 1. Name: 창에 Project Name( gpio_basic_user_board) 을입력한다.
2. Location: 창에 Project 정정위치 ( D:\AVR_devlop\studio7.x\) 를선 택한다. 3. Solution: 창에자동으로 Project Name과같은 Solution Name이설정된다. 4. OK 를 Click 한다. Board Selection 창에서 1. Device Family 창에서 XMEGAAA를선택하고 2. Device 선택창에서 ATxmega128A4U를선택한다. 3. Board 선택창에서 User Board template - XMEGA AU를선택하고 OK 를 Click 한다. i Project Template 가자동으로생성되고 ASF Wizard 창이열린다. 1. Project: 지금생성된 Project( gpio_basic_user_board ) 를선택한다. 2. Available Modules 창에현재버전 (Atmel ASF(3.28.1) 에서선택할수있는 Modules 이표시되고, 3. Selected Modules 창에는현재선택되어포함된 Module 이표시된다. 4. 기본으로 Generic board support (driver) Module 만표기된다. 5. 이 Project 에서는 I/O Port를사용하기때문에추가 Module을 Add 하여야한다. A. GPIO(service) Module을선택하고 ADD>> 버튼누르고, Apply 번튼을누른다. B. 위와같은과정으로 IOPORT (driver) Module을 ADD 하고 Apply 한다. iv. 사용하는 Board Header 와 init.c File 확인및편집 1. Solution Explorer 창에서 A. src -> ASF -> common -> board -> user_board 폴더를선택한다. B. user_board.h File를 open 하고내용을확인한다. C. gpio_basic_user_board.zip File를다운로드하여 user_board 폴더에덮어쓰기로복사하고, 내용을확인한다. v. main() Function 작성 1. 별첨 gpio_basic_stk600_board.zip의 main.c file을참고하여 main() 함수의내용을편집한다. 2. gpio_basic_user_board.zip 을다운로드하여본인이작성한프로그램과비교하고확인한다.
vi. Project를 Build 한다. v Chip45boo2 GUI를이용하여 KHU-EE Board에다운로드하여실행한다. 2. 자신이개발한 Board를별도의 Board Name으로등록하고이용하기 A. ASF 환경에서새 Project를만드는경우어떤 Board Name을사용하여야하나? i. Atmel Studio에서제공하는개발 Board를사용하는경우 : 예 STK600 Board 1. 본인이개발하고자하는 Board와유사한 Atmel Studio에서제공하는개발 Board 가있는경우적용한다. KHU-EE는 STK600 Board 와유사함. 2. ASF 환경을이용하여완성도높은 Project Template 가생성되기때문에프로그램개발이용이하다. 새 Project 를만들때 User Board 를선택하는경우 1. 본인이개발하고자하는 Board와유사한 Atmel Studio에서제공하는개발 Board 가없는경우에선택한다. 2. ASF 환경을이용하여완성도높은 Project Template 가생성할수없기때문에프로그램개발이어렵다. i 자신이개발한 Board 을새로운보오드이름으로등록하여사용하는경우 1. 본인이개발한 Board에최적화된 Project Template를먼저만들어이용하는경우에유리하다. 2. 이경우완성도높은 Project Template를이용할수있기때문에유리하다. 그러나완성도높은 Project Template를만들수있는능력이필요하기때문에초보자에게는어려울수있다. B. 자신이개발한 Board를새로운 BOARD 이름으로등록하기 i. src/asf/common/board/board.h File에자신의 Board Name을정의한다. #define CHO_XMEGA128A4U 95 // // User-reserved area에 #elif 문으로자신이정의한 name_board.h File을 include 한다. #elif BOARD == CHO_XMEGA128A4U # include "cho_xmega128a4u_board.h" i Project -> Project Name properties -> Toolchin -> AVR/GNU C Compiler -> Symbols -> Defined Symbols 창에있는 Board symbol 를자신의 Board 이름으 로편집한다. BOARD=CHO_XMEGA128A4U C. 자신의 Board Header File 작성하기 : src\asf\common\xmega\board\ 의
user_board.h File 을자신이정의한 new_board_board.h 파일로대치하든가, 아니 면이름을변경하여본인이개발한 Board 의 IO Pin 에적합하게편집한다.( 가장 유사한 Board 의 Header File 를복사하여편집한다. D. Compile 할때 asf.h 에서 user_board.h File 이없다는메시지가발생하는경우 asf.h 내의 #include <user_board.h> 를삭제하거나빈 user_board.h 를만들어 주고, main.c File 에서자신의 Board Header File 을 Include 한다. E. 효과적으로자신의 Header File 만들기 : New Project Template( or New Project sample 만들기 ) 에서자신이개발한 Board 와가장유사한 Board Template 를생성 하여이 Template 에포함된 (src\asf\xmega\board\board-name\ 에위치함 ) board-name.h 파일을참고하여자신의 Board 에적합하도록 user_board.h 파일을 편집하고, 파일이름을앞에서등록한 File 이름으로변경한다. F. 새로작성한 Board Header File 을저장한폴더의 PATH (src\asf\common\xmega\board\new_board_name) 를 Project -> properties -> Tool -> AVR/GNU C Compiler -> Directories 에등록한다. 3. CHO_XMEGA128A4U Board A. External Oscillator: 16M Xtal B. PUSH_BOTTON: PB0, PB1 C. LED: PA0-PA7 까지 8 개, 점퍼소켓으로연결되어있기때문에 PORTA 를다른목적 으로사용하고자하는경우에는해당 Pin 의점퍼소켓을제거한다. D. USART: USARTC0(Transmitter: PC3, Receiver: PC2)) E. USB 4. Project 에필요한 ASF Module 포함시키기. A. ASF Wizard -> Project 선택 -> Available Modules 에서필요한 Module 을선택하 여 -> Add 하고 -> Apply 한다. B. gpio_basic Project 예에서는 i. GPIO(service) Module 을선택하고 ADD>> 버튼누르고, Apply 버튼을누른다. 위와같은과정으로 IOPORT (driver) Module 을 ADD 하고 Apply 한다. 5. Board 를초기화하는 board_init() 함수작성 A. 개발한 Board 와가장유사한 Board Template 에포함된 init.c 파일를참고하여본인이설계한 Board 를초기화하는 board_init() 함수프로그램을편집한다. B. board_init() 함수를포함하는 Init.c File 의위치는 Board Header File 과같은위치에작성한다. C. USART 를사용하는경우 user_board.h 에서 CONF_BOARD_ENABLE_USARTC0 를 Define 하여주어야한다.
#define CONF_BOARD_ENABLE_USARTC0 6. I/O Port 사용을위한 API 설치와프로그램작성 A. ASF Wizard 를이용하여 GPIO Module 과 IOPORT Module 을설치한다. B. User_board.h 에서사용할 Port 의 Pin 의 GPIO Connection 를정의한다. // \name GPIO Connections of LEDs // LEDS connector is connected to PORTA # define LED0_GPIO IOPORT_CREATE_PIN(PORTA,0) # define LED1_GPIO IOPORT_CREATE_PIN(PORTA,1) // \name GPIO Connections of Push Buttons # define GPIO_PUSH_BUTTON_0 IOPORT_CREATE_PIN(PORTB,0) # define GPIO_PUSH_BUTTON_1 IOPORT_CREATE_PIN(PORTB,1) C. 사용할 I/O Port 초기화설정 i. Init.c 에있는 Board 초기화함수 board_int() 에 Port 초기화 Code 를작성한다. ioport_configure_pin(led0_gpio, IOPORT_DIR_OUTPUT IOPORT_INIT_LOW); ioport_configure_pin(gpio_push_button_0, IOPORT_DIR_INPUT IOPORT_PULL_UP); D. 응용프로그램에서 Common GPIO API 와 Common I/O Port API 함수를이용하여 I/O Port 를제어한다. http://asf.atmel.com/docs/3.11.0/xmegaau/html/ 에서 GPIO 와 IOPORT 자료를참고할것 value = ioport_get_pin_level(gpio_push_button_0); ioport_set_pin_level(led1_gpio, value);