论坛里很多朋友都对ASF框架感兴趣,但却感觉无从下手。本次评测中,我们将对ATMEL推出的ASF框架做一个详细的介绍。
1.为什么要推出ASF?
在以往的编程中,我们往往都是针对寄存器的编程。开发人员在每一次编程之前都要详细阅读数据手册,不能漏掉任何一个微小的部分。很多时候,往往就是一个寄存器的“0”、“1”设置错误而导致模块不能运行,延误了整个系统的开发进度。为了减少用户开发系统所消耗的时间,ATMEL的专家们把自己编写的,并且经过验证的代码整合到了一起组成一个庞大的开发支持框架:AVR Software Framework(AVR 软件框架)。从字面上看来,ASF似乎是ATMEL转为AVR处理器而设计的,其实不然,目前的AVR几乎支持ATMEL全系列的MCU.
2.如何得到ASF?
得到ASF的方法有两种:从ATMEL官网上下载ASF包或者直接下载AVR STUDIO。进入ASF的官网,页面的上方包含有ASF的基本介绍,中间部分是目前能提供的最新版本的ASF,可以看到,当前最新版本为 3.7.3。页面上方的Devices栏给出了目前ASF所支持的所有器件的型号与种类,随着ASF版本的不断更新与完善,后续的器件肯定会越来越多。如果要深入学习ASF,那么一定要看看Documents栏目中所给出的资料了,在Documents栏目中包含有User Guide,Reference Manual等各种文档。

3. ASF是如何组织的?
从ATMEL网站上下载的ASF独立安装包是一个ZIP压缩文件,解压到硬盘目录中就得到了完整的ASF软件。

根目录下包含有releasenote和readme文件,它们分别告诉了我们当前版本的ASF相对于以前有哪些改动以及如何才能找到ASF相关文档、资源。除了两个文件外,根目录中还包含有六个文件夹,它们分别是avr32、common、mega、
sam、thirdparty、xmega。从它们的名字我们可以看出这些就是ATMEL公司推出的主流嵌入式处理器。不管我们打开哪个目录,其中都会包含有applications、boards、components、drivers、services、utils六个子文件夹,
这些文件夹有什么用?它们里面都包含有哪些东西?ASF为什么要这样区分?要回答这些问题,我们就得从ASF的整体结构说起,下图来自于ASF官方文档,它给出了整个ASF的架构。

从该图中可以看到,在基本硬件平台之上为BOARD目录的支持范围,它包含有针对于不同硬件板卡所定义的各种板级声明和实现,当然这些实现都对IO寄存器进行了封装,使得用户无需了解底层细节即可很好的完成对底层硬件的操作。
在board层之上是drivers层。drivers层有一个很明显的特点:针对不同的外设驱动(如ADC驱动,RTC驱动),它都给出了一个XXXX.C和XXXX.H的文件。drivers层向下调用了board层给出的函数接口定义,向上为components层和service层提供接口。
Components层。组件层是ASF中抽像级别比较高的驱动层,它提供一系列驱动用来使处理器完成对外围组件的操作,例如:DATAFLASH,SDRAM,SRAM和NADA FLASH。如果组件是多个架构共享的,那么这些驱动将会被归纳到COMMON目录中。
Services层。服务层是另一个架构在drivers层之上的高级层,其中包含有USB协议栈,FAT文件系统,DSP库,图形库等。和组件层一样,如果多个架构的MCU都包含有同样的Services层的话,那么该Services也将会被归纳到COMMON目录中。简言之,Services层包含的就是各种协议栈,软件库。
utils层。在utils中包含有多个链接脚本文件,这些脚本为不同编译器条件下提供了统一的接口。
4. 是否只有AVR STUDIO才能支持ASF?
相信很多初学者都会有类似的疑问,毕竟ASF和AVR STUDIO都是ATMEL推出的软件开发平台。其实ATMEL在设计ASF之初确实是这样考虑的,但随着ASF的发展,支持器件的种类不断增多。现在的ASF早已支持IAR,GCC等主流的嵌入式开发平台了。在IAR中使用ASF的方法也非常简单,打开各个架构下的APPLICATION目录下的DEMO,就会发现其中有一个IAR文件夹,使用IAR建立的工程就保存在其中。同时,在该目录下还包含有一个GCC文件夹,这就是GCC建立的工程目录。
5.如何使用ASF?
讲了这么多ASF的背景知识,相信很多人已经迫不及待想要尝试一下使用ASF了。那么如何使用ASF呢?下面我们就以AVR STUDIO 6为例,说明如何在AVR STUDIO中使用ASF。
首先打开AVR STUDIO软件,新建一个基于ASF的的例子工程:

随后,系统将弹出工程选择界面。用户可以根据当前所拥有开发板的类型、目录或技术选择对应的基于ASF的工程。由于目前我手上的只是XMEGA-A3BU开发板,所以我们选择的就是XMEGA-A3BU USART工程。在下方填写好工程名、工程目录后,点击OK,软件将自动创建工程。

工程创建完成后,在右边的“解决方案”栏目中包含有当前工程所有.c和.h源文件。此时,整个工程就建立完成了,点击“编译调试”即可下载到板子上运行。

在开发过程中不可避免的需要查看帮助,很多类似的公司都是单独发布一个说明文档供用户查询。不过在AVR STUDIO中却提供了一个集成化的帮助方式。 点击“解决方案”栏目中下面ASF Explorer栏,系统将打开当前所添加的ASF模块对应的帮助文档。

如果需要向一个已经存在的工程中添加ASF,那么AVR STUDIO中提供有ASF Wizard向导。打开ASF Wizard向导的方式有两种:在菜单栏中选择ASF栏目下的ASF Wizard 或 在工程解决方案下点击右键。


打开的ASF Wizard界面如下图所示,图中左边为当前项目所能支持的各个模块,右边为当前项目中已经选用的模块。在左边框中选中需要添加的模块,点击下方的ADD按钮,即可把其添加到当前项目中。

6.ATMEL GALLERY
最后,让我们来看看ATMEL GALLERY。什么是GALLERY?简言之,GALLERY就是一个包含各种用于扩展AVR STUDIO功能的软件的集合。运行GALLERY的方法也很简单,点击“工具”菜单下的“扩展管理器”即可打开。

打开后的GALLERY包含有很多可用的扩展资源,有些标注为FREE的表明该资源属于免费使用且已经安装;有些标注为Download的则表示当前可以从网络上下载并安装使用。

总结:
ASF是ATMEL推出的,用于减少开发人员工作量提高工作效率的软件框架。实际上,不光是ATMEL,其它公司诸如TI,ST公司都推出了类似的开发框架。不过,ASF原生态的被集成到AVR STUDIO开发环境中,这使得它们几乎是无缝的融合在了一起。从ASF Wizard到帮助文档的访问,从工程的创立到开发文档的编写,无不体现了ATMEL对ASF寄予的厚望。我们有理由相信,随着时间的推移,ASF的功能将会更加的强大,其所支持的MCU也更加丰富。
参考文献:
1. ASF官方网页
2. Atmel XMEGA-A3BU 评测手记
3. ASF 官方文档集合
原创申明:本文为爱板网原创,谢绝转载!
论坛里很多朋友都对ASF框架感兴趣,但却感觉无从下手。本次评测中,我们将对ATMEL推出的ASF框架做一个详细的介绍。
1.为什么要推出ASF?
在以往的编程中,我们往往都是针对寄存器的编程。开发人员在每一次编程之前都要详细阅读数据手册,不能漏掉任何一个微小的部分。很多时候,往往就是一个寄存器的“0”、“1”设置错误而导致模块不能运行,延误了整个系统的开发进度。为了减少用户开发系统所消耗的时间,ATMEL的专家们把自己编写的,并且经过验证的代码整合到了一起组成一个庞大的开发支持框架:AVR Software Framework(AVR 软件框架)。从字面上看来,ASF似乎是ATMEL转为AVR处理器而设计的,其实不然,目前的AVR几乎支持ATMEL全系列的MCU.
2.如何得到ASF?
得到ASF的方法有两种:从ATMEL官网上下载ASF包或者直接下载AVR STUDIO。进入ASF的官网,页面的上方包含有ASF的基本介绍,中间部分是目前能提供的最新版本的ASF,可以看到,当前最新版本为 3.7.3。页面上方的Devices栏给出了目前ASF所支持的所有器件的型号与种类,随着ASF版本的不断更新与完善,后续的器件肯定会越来越多。如果要深入学习ASF,那么一定要看看Documents栏目中所给出的资料了,在Documents栏目中包含有User Guide,Reference Manual等各种文档。

3. ASF是如何组织的?
从ATMEL网站上下载的ASF独立安装包是一个ZIP压缩文件,解压到硬盘目录中就得到了完整的ASF软件。

根目录下包含有releasenote和readme文件,它们分别告诉了我们当前版本的ASF相对于以前有哪些改动以及如何才能找到ASF相关文档、资源。除了两个文件外,根目录中还包含有六个文件夹,它们分别是avr32、common、mega、
sam、thirdparty、xmega。从它们的名字我们可以看出这些就是ATMEL公司推出的主流嵌入式处理器。不管我们打开哪个目录,其中都会包含有applications、boards、components、drivers、services、utils六个子文件夹,
这些文件夹有什么用?它们里面都包含有哪些东西?ASF为什么要这样区分?要回答这些问题,我们就得从ASF的整体结构说起,下图来自于ASF官方文档,它给出了整个ASF的架构。

从该图中可以看到,在基本硬件平台之上为BOARD目录的支持范围,它包含有针对于不同硬件板卡所定义的各种板级声明和实现,当然这些实现都对IO寄存器进行了封装,使得用户无需了解底层细节即可很好的完成对底层硬件的操作。
在board层之上是drivers层。drivers层有一个很明显的特点:针对不同的外设驱动(如ADC驱动,RTC驱动),它都给出了一个XXXX.C和XXXX.H的文件。drivers层向下调用了board层给出的函数接口定义,向上为components层和service层提供接口。
Components层。组件层是ASF中抽像级别比较高的驱动层,它提供一系列驱动用来使处理器完成对外围组件的操作,例如:DATAFLASH,SDRAM,SRAM和NADA FLASH。如果组件是多个架构共享的,那么这些驱动将会被归纳到COMMON目录中。
Services层。服务层是另一个架构在drivers层之上的高级层,其中包含有USB协议栈,FAT文件系统,DSP库,图形库等。和组件层一样,如果多个架构的MCU都包含有同样的Services层的话,那么该Services也将会被归纳到COMMON目录中。简言之,Services层包含的就是各种协议栈,软件库。
utils层。在utils中包含有多个链接脚本文件,这些脚本为不同编译器条件下提供了统一的接口。











