查看: 1478|回复: 0

使用ASF在不同MCU中创建CDC项目的比较

[复制链接]
  • TA的每日心情
    奋斗
    2019-12-1 10:07
  • 签到天数: 1617 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2015-1-28 01:39:29 | 显示全部楼层 |阅读模式
    分享到:
    很多人不喜欢用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) <cdc>和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的方便之处了,可以让我们编程和程序移植变得轻松一点(虽然速度慢了一点)。
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-20 00:17 , Processed in 0.121206 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.