tag 标签: asf

相关博文
  • 热度 17
    2015-5-3 16:34
    975 次阅读|
    0 个评论
    ASF又悄悄升级到3.23.1了。 主要更新: Release ASF3.23 (Apr 2015) • SAM4C/CM 256k devices support • SAML21 - Low power application • USB MultiTouch HID Example • BLE SDK Support • SmartConnect 6Lowpan stack support • TAL Support For RF215 and Performance Analyzer Application • WINC1500 driver update to rev 18.1.1 网盘分享: http://pan.baidu.com/s/1ntkQmBB  
  • 热度 14
    2015-1-28 00:44
    1737 次阅读|
    0 个评论
    很多人不喜欢用AS6和ASF,因为AS6+ASF的组合运行程序慢、打开项目文件慢、编译速度慢,的确是不够方便。但是AS6和ASF毕竟是ATMEL官方的主要开发工具,还是有它的一些优点的,比如使用ASF快速建立项目、通过ASF向导添加新的功能模块、程序在不同MCU下的移植很方便。下面就以不同开发板下USB CDC的例子为例,演示一下这几个特点。   测试环境:   AS 6.2sp1 ASF 3.21 windows7 x64 超级终端(其他串口软件也可以)   MCU平台:   XMEGA128B1 SAM4L8 xplained pro SAM4S Xplained pro (没有D20/D21开发板,希望有这个开发板的网友可以试试,并发表一下测试结果)   测试过程:   先给每个目标平台创建项目,然后在ASF向导中添加ASF功能,再修改配置参数和主程序,最后编译并下载,在超级终端中测试程序运行效果。   项目文件的创建和修改过程都是类似的,基本步骤如下:   首先是创建一个GCC C ASF Board Project     然后在ASF Wizard中添加USB Device (Service) 和Delay Routines (service)两个服务   然后将主程序改为 int main (void) {         uint8_t ch = '';                  sysclk_init();         board_init();           // Initialize interrupt vector table support.         irq_initialize_vectors();           // Enable interrupts         cpu_irq_enable();                  udc_start();         delay_init();           // Insert application code here, after the board has been initialized.         while (true) {                 // if receive char                 if(udi_cdc_is_rx_ready())                 {                         ch = udi_cdc_getc();                         LED_Toggle(LED0_GPIO);                 }                 udi_cdc_putc(ch);                 delay_ms(200);         } }   然后修改配置文件conf_clock.h,并将conf_usb.h中第52行的强制警告关闭。再编译后下载到开发板。 //#warning You must refill the following definitions with a correct values     Xmega128B1没有板载编程器(仿真器),使用了Flip通过Bootloader下载;其他开发板通过板载EDBG下载       程序下载后,正常情况就可以在COM和LPT中看到ASF的串口(串口号可能不同)     连接任何一个串口软件都可以,因为是虚拟串口,波特率等参数任意设置都行     正常运行效果如下,不输入时,每200ms自动发送一个字符,有输入时输出自动修改为输入的字符。   下面是各开发板具体修改的文件:   在 Xmega128B1 中,只需要修改config_clock.h,需要修改两处: 修改系统时钟为SYSCLK_SRC_RC32MHZ 使能CONFIG_OSC_RC32_CAL 和CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC   //#define CONFIG_SYSCLK_SOURCE          SYSCLK_SRC_RC2MHZ #define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_RC32MHZ //#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_RC32KHZ   ...   #define CONFIG_USBCLK_SOURCE                USBCLK_SRC_RCOSC #define CONFIG_OSC_RC32_CAL                 48000000UL #define CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC  OSC_ID_USBSOF 复制代码   在 SAM4LC8 中,需要修改如下文件: 在conf_board.h中添加USB定义 // Enable USB interface (USB) #define CONF_BOARD_USB_PORT   // Enable USB VBUS detect #define CONF_BOARD_USB_VBUS_DETECT 复制代码 在config_clock.h中,修改系统时钟为SYSCLK_SRC_OSC0或SYSCLK_SRC_PLL0: //#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_RCSYS #define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_OSC0 //#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_PLL0   复制代码   在 SAM4SD32 中,无需修改config_clock.h。但是编程时,需要将GPNVM Bits中的BOOT_MODE选中,不然程序不会运行。   小结 : 从上面的过程可以看到,创建项目、添加ASF功能、主程序基本是相同的,不同之处主要在于配置时钟,这也就是ASF的方便之处了,可以让我们编程和程序移植变得轻松一点(虽然速度慢了一点)。
  • 热度 13
    2015-1-24 00:22
    1546 次阅读|
    0 个评论
    在ASF中有一个STDIO_USB_EXAMPLE的例子,可以方便的演示CDC串口。但是为了更好的理解这个例子,我们自己重新创建,然后通过ASF添加函数,这样可以更好的掌握整个过程。下面是我创建项目的过程,供大家参考。   首先创建项目,选择gcc c asf project。     然后选择xmega128B1以及xmega128B1-xplained模板。     在ASF向导中,添加USB Device(server)- cdc_stdio     然后打开 config_usb.h 。先注释掉第49行的强制警告提示,不然每次编译都会产生一个警告。   //#warning You must refill the following definitions with a correct values   复制代码   然后将124/125行修改为下面语句   #define  UDI_CDC_ENABLE_EXT(port)          stdio_usb_enable() #define  UDI_CDC_DISABLE_EXT(port)         stdio_usb_disable()   复制代码   最后添加包含头文件 stdio_usb.h   #include stdio_usb.h   复制代码   再打开文件 conf_clock.h ,先将系统时钟改为SYSCLK_SRC_RC32MHZ。   //#define CONFIG_SYSCLK_SOURCE          SYSCLK_SRC_RC2MHZ #define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_RC32MHZ //#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_RC32KHZ //#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_XOSC //#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_PLL   复制代码   然后允许CONFIG_OSC_RC32_CAL 和CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC   #define CONFIG_USBCLK_SOURCE                USBCLK_SRC_RCOSC #define CONFIG_OSC_RC32_CAL                 48000000UL #define CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC  OSC_ID_USBSOF   复制代码   最后在打开main.c,在main函数中输入下面代码   sysclk_init();         board_init();           // Initialize interrupt vector table support.         irq_initialize_vectors();           // Enable interrupts         cpu_irq_enable();           stdio_usb_init();           uint8_t ch;           while (true) {                   ch = getchar();                 putchar(ch);                 LED_Toggle(LED2_GPIO);         }   复制代码   编译项目文件,通过Flip将编译后HEX写入芯片。     重新上电(记得先取下短路块),应该就可以找到串口了。     打开一个串口终端,选择上面的串口,并设置波特率为115200,随便输入什么,如果屏幕上可以显示出你输入的字符,LED同时闪动,就代表成功了。