전체적으로 쓰기 쉬운 방향으로 가는건 좋긴한데 적응기간이 필요한거같다.
일단 AVRStudio6를 깔고 버전을 확인해보자.
1. AVRStudio 6 version 6.0.1703 - beta
2. ASF 3.0.1
3. AVRGCC 3.3.2.31
XMEGA256A3BU 모듈보드도 만들어놨으니 이제 디버깅 코드를 만들어서 돌려보자.
CDC를 사용해서 호스트랑 시리얼 통신을 하고 디버깅 메뉴를 추가하면 끝~~
프로젝트 생성부터 시작해보자.
여기로 가서
XMEGA256A3BU니까 이 템플릿을 선택하자. 프로젝트 명은 test로~~
여기서 정확한 MCU 파트명을 정해주면 된다.
프로젝트 만들었고 여기서 ASF Wizard를 실행해보자
여기서 USB/CDC Standard I/O (stdio)(component)를 선택해서 추가하면 된다.
여기까지 하면 USB/CDC를 standard IO로 연결해주는 소스가 프로젝트에 추가된다.
그럼 여기서 끝???
일리가 없지...
일단 클럭설정부터 해보자구. conf_clock.h로 가보자.
기본설정은 2MHz 내부 클럭으로 설정되었는데 USB 구동을 위한 설정은 아래쪽에 이미 설정되어 있다.
#define CONFIG_USBCLK_SOURCE USBCLK_SRC_RCOSC
//#define CONFIG_OSC_RC32_CAL 48000000UL
//#define CONFIG_OSC_AUTOCAL OSC_ID_RC32MHZ
//#define CONFIG_OSC_AUTOCAL_REF_OSC OSC_ID_USBSOF
//#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_RC32MHZ
//#define CONFIG_SYSCLK_PSADIV SYSCLK_PSADIV_2
//#define CONFIG_SYSCLK_PSBCDIV SYSCLK_PSBCDIV_1_1
이렇게~~
앞에 주석을 제거하자.
#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_RC2MHZ
#define CONFIG_SYSCLK_PSADIV SYSCLK_PSADIV_1
#define CONFIG_SYSCLK_PSBCDIV SYSCLK_PSBCDIV_1_1
여기는 주석을 추가해주도록 하자.
다음은 USB 설정...conf_usb.h로 가자.
#define USB_DEVICE_VENDOR_ID 0x0000
#define USB_DEVICE_PRODUCT_ID 0x0000
이 설정을
#define USB_DEVICE_VENDOR_ID 0x03EB
#define USB_DEVICE_PRODUCT_ID 0x2404
이렇게 바꿔줘야한다.
그리고 아래 콜백 함수들을
#define UDI_CDC_ENABLE_EXT() true
#define UDI_CDC_DISABLE_EXT()
stdio_usb.c의 stdio_usb_enable()과 stdio_usb_disable() 함수와 연결해준다.
#define UDI_CDC_ENABLE_EXT() stdio_usb_enable()
#define UDI_CDC_DISABLE_EXT() stdio_usb_disable()
그리고 그 아래쪽에 설정을 잘 봐둬라.
#define UDI_CDC_DEFAULT_RATE 115200
#define UDI_CDC_DEFAULT_STOPBITS CDC_STOP_BITS_1
#define UDI_CDC_DEFAULT_PARITY CDC_PAR_NONE
#define UDI_CDC_DEFAULT_DATABITS 8
보레잇 115200, Stop bit 1. parity 없음, 데이터비트 8~~
그리고 main() 함수에 셋업 함수를 추가해보자.
int main (void)
{
irq_initialize_vectors();
cpu_irq_enable();
sleepmgr_init();
sysclk_init();
board_init();
stdio_usb_init(&USB);
while(1)
printf("hello\r\n");
// Insert application code here, after the board has been initialized.
}
자 여기까지 하고 컴파일을 함 돌리보자.
아 에러가 뜨네...
stdio_usb 의 함수를 인식못하는거 같응께 conf_usb.h에 stdio_usb.h를 인클루드 시켜주자.
conf_usb.h의 아래부분
/**
* USB Device Driver Configuration
* @{
*/
//@}
//! The includes of classes and other headers must be done at the end of this file to avoid compile error
#include "udi_cdc_conf.h"
#include <stdio_usb.h>
#endif // _CONF_USB_H_
여기에다 인클루드시켜주자.
그런다음 컴파일 오케이~~
플립으로 다운로드 하고 리붓~~
이렇게 COM34로 잡힌다.
드라이버는 atmel_device_cdc.inf다. 프로젝트 폴더내에 생성되어 있으니 걱정마시라.
이제 COM34, 115200/8/none/1/none 으로 접속하면
아차 무한루프로 계속 출력시켰지...
디버그 코드 만든다고 이것저것 테스트 중인데
printf는 잘 동작하는데
scanf는 이상하게 동작한다.
걍 scanf 말고 udi_cdc_getc 를 대신 썼다.
흠...
간단하다고 할수도 없고 복잡하다고 하기도 좀 그렇다. 애매한데...
ASF는 문서화가 관건이겠네. 어플노트를 정확하게만 만들어주면 실무 개발자들은 상당히 편할거같다.
끝
댓글 없음:
댓글 쓰기