3460|0

1万

帖子

25

TA的资源

版主

楼主
 

使用ASF在不同MCU中创建CDC项目的比较 [复制链接]

很多人不喜欢用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
  • SAM R21 xplained pro

(没有D20/D21开发板,希望有这个开发板的网友可以试试,并发表一下测试结果)

测试过程
先给每个目标平台创建项目,然后在ASF向导中添加ASF功能,再修改配置参数和主程序,最后编译并下载,在超级终端中测试程序运行效果。

项目文件的创建和修改过程都是类似的,基本步骤如下:

首先是创建一个GCC C ASF Board Project
  

然后在ASF Wizard中添加USB Device (Service) 和Delay Routines (service)两个服务
  

然后将主程序改为
  1. int main (void)
  2. {
  3.         uint8_t ch = '>';
  4.         
  5.         sysclk_init();
  6.         board_init();

  7.         // Initialize interrupt vector table support.
  8.         irq_initialize_vectors();

  9.         // Enable interrupts
  10.         cpu_irq_enable();
  11.         
  12.         udc_start();
  13.         delay_init();

  14.         // Insert application code here, after the board has been initialized.
  15.         while (true) {
  16.                 // if receive char
  17.                 if(udi_cdc_is_rx_ready())
  18.                 {
  19.                         ch = udi_cdc_getc();
  20.                         LED_Toggle(LED0_GPIO);
  21.                 }
  22.                 udi_cdc_putc(ch);
  23.                 delay_ms(200);
  24.         }
  25. }
复制代码


然后修改配置文件conf_clock.h,并将conf_usb.h中第52行的强制警告关闭。再编译后下载到开发板。
  1. //#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


  1. //#define CONFIG_SYSCLK_SOURCE          SYSCLK_SRC_RC2MHZ
  2. #define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_RC32MHZ
  3. //#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_RC32KHZ

  4. ...

  5. #define CONFIG_USBCLK_SOURCE                USBCLK_SRC_RCOSC
  6. #define CONFIG_OSC_RC32_CAL                 48000000UL
  7. #define CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC  OSC_ID_USBSOF
复制代码



SAM4LC8中,需要修改如下文件:

在conf_board.h中添加USB定义
  1. // Enable USB interface (USB)
  2. #define CONF_BOARD_USB_PORT

  3. // Enable USB VBUS detect
  4. #define CONF_BOARD_USB_VBUS_DETECT
复制代码


在config_clock.h中,修改系统时钟为SYSCLK_SRC_OSC0或SYSCLK_SRC_PLL0:
  1. //#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_RCSYS
  2. #define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_OSC0
  3. //#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_PLL0
复制代码



在SAM4SD32中,无需修改config_clock.h。但是编程时,需要将GPNVM Bits中的BOOT_MODE选中,不然程序不会运行。
  



SAM R21中,情况复杂一点,ASF3.21有些小bug。可以用ASF 3.20,或者修改一下
\src\ASF\sam0\utils\cmsis\samr21\source\gcc\startup_samr21.c,将USB_IRQn注释掉。具体参考这里




小结

从上面的过程可以看到,创建项目、添加ASF功能、主程序基本是相同的,不同之处主要在于配置时钟,这也就是ASF的方便之处了,可以让我们编程和程序移植变得轻松一点(虽然速度慢了一点)。




点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表