在Atmel Studio 6中,集成了Atmel Software Framework(ASF框架)。通过它提供的库,可以很快速地完成新的项目。

这次的最终目标使用ASF在LCD上显示出文字“Hello World!”,现阶段目标是点亮LCD的背光,学习目标是了解怎么样使用ASF提供的模块。

一、 ASF Wizard

新建一个项目,根据所使用的开发板选择模板。

然后可以通过ASF Wizard进行所需模块的配置。

默认情况下,已经选择了两个模块。在之前我们以前使用过了其中Generic board support模块提供的头文件sam4e_ek.h了。

为了解模块添加的方法,先把这两个模块移除。

二、 通过ASF设置时钟

  1. 添加模块

    在可用模块里找到“System Clock Control”模块,展开它。

    可以看到它依赖的模块,以及相应的API文档等内容。

    添加该模块后,它会自动地把依赖的模块添加进去。添加完成后点击Apply按钮,使改变生效。

    现在在asf.h文件中,就已经导入了一系列的模块相关的头文件。如刚刚使用的系统时钟控制模块的:

    // From module: System Clock Control - SAM4E implementation
    #include <sysclk.h>

    同时,在文件夹config下,多了一个文件conf_clock.h。

  2. 配置

    conf_clock.h里保存的就是时钟相关的配置了。这里面的注释很清楚,配置方法也很简单。并且在该文件的末尾也说明了默认情况下,配置的结果:

    // ===== Target frequency (System clock)
    // - XTAL frequency: 12MHz
    // - System clock source: PLLA
    // - System clock prescaler: 2 (divided by 2)
    // - PLLA source: XTAL
    // - PLLA output: XTAL * 16 / 1
    // - System clock: 12 * 16 / 1 / 2 = 96MHz

    为了使这个时钟的配置生效,调用sysclk_init()即可:

    #include <asf.h>
    int main (void)
    {
    sysclk_init();
    while(1);
    }
  3. 编译

    但是在编译时,发现缺少头文件board.h。这说明ASF Wizard在解决依赖时也有那么一点Bug。尝试再手动添加一个模块Generic board support,再编译,发现又缺少头文件ioport.h,继续添加模块IOPORT,编译通过。IOPORT模块依赖了System Clock Control模块,可以将手动添加的这个模块删除,至此,又回到了新建项目时的模块设置了。

    添加不必要的模块会增加编译的时间,也可能会增加生成的目标文件的大小。如果熟悉相关头文件的作用,也可以修改asf.h中包含的头文件。

    另外,也可以通过了解ASF中函数的实现,来学习相关的配置过程。

  4. 查看MCK的频率

    如sysclk_init()一样,ASF中实现了许多常用的功能。如我们需要查看MCK的频率的话,也很简单:

    volatile uint32_t freq;
    freq = SystemCoreClock; /* 4 000 000 */ /* 这个函数是根据conf_clock.h中宏的定义来计算的。
    即是调用sysclk_init()后MCK的值 */
    freq = sysclk_get_cpu_hz(); /* 96 000 000 */ sysclk_init(); /* 调用sysclk_init()后会自动修改这个变量 */
    freq = SystemCoreClock; /* 96 000 000 */

三、 LCD背光控制器

开发板使用的LCD背光控制器是AAT31系列的。同时PC13连接的是它的使能、控制引脚。

另外,假设我们不知道这个背光控制器的亮度控制方法是向EN/SET引脚发送N个脉冲波,那该怎么使用这个控制器呢?RTFM?找它的芯片手册当然是一个能够深入了解它的方法,但假如我们的目标仅仅是能用就好,又或是使用起来太过麻烦呢?

嗯,我们这次学的就是ASF。

  1. 添加模块

    在ASF Wizard中添加Display – AAT31XX Backlight Controller模块。添加后项目里多了个头文件conf_at31xx.h,这个头文件主要的作用就是在未定义EN/SET引脚的接线时,对其进行定义(在sam4e_ek.h这个文件中已经做好相关的定义了)。同时asf.h中也包含了相关的头文件了。

  2. ASF中对组件进行初始化

    使用背光控制器之前,需要进行相关配置。这个工作可以手动完成,也可以使用ASF完成。

    conf_board.h文件里,可以指定好一系列需要配置的组件。然后在执行board_init()函数时,就可以根据这些宏的定义执行相应的初始化工作。这个头文件里已经通过注释说明了配置USART等引脚时,宏是如何定义的,但是却不知道如何背光组件相关的定义。

    查看board_init()的实现,可以发现以下几句:

    #ifdef CONF_BOARD_AAT3155
    /* Configure Backlight control pin */
    ioport_set_pin_dir(BOARD_AAT31XX_SET_GPIO, IOPORT_DIR_OUTPUT);
    #endif

    通过这里就可以得到需要的宏的名字,以及ASF初始化时具体的工作了。现在就在conf_board.h中,加上相应的定义就好了:

    /* Configure Backlight control pin */
    #define CONF_BOARD_AAT3155

    另外,aat31xx.h头文件也需要这个宏的声明以判断具体的控制器的型号。

    最后不要忘记调用board_init( )函数。

  3. API的使用

    可以查看相应的API的文档,以了解ASF提供的API。

    更直接的方法是阅读相应的头文件(aat31xx.h),这里面可能会有一些文档中未提到的部分。如以下几个宏就未在API文档中说明:

    #define AAT31XX_MIN_BACKLIGHT_LEVEL 1
    #define AAT31XX_AVG_BACKLIGHT_LEVEL 8
    #define AAT31XX_MAX_BACKLIGHT_LEVEL 16

    现在,就可以很方便地使用背光控制器了。如以下代码将配置背光为最大亮度:

    aat31xx_set_backlight(AAT31XX_MAX_BACKLIGHT_LEVEL);

四、 LCD控制器

开发板使用的LCD控制器是ILI93xx系列的。ASF提供的模块为Display – ILI93xx LCD Controller。conf_board.h中,相应的宏声明为CONF_BOARD_ILI93XX。

board_init( )中初始化的工作仅有配置GPIO引脚的复用,但是还有别的工作需要完成。所以LCD暂时还不能用。剩下的部分在下一次说明。

SAM4E单片机之旅——13、LCD之ASF初步的更多相关文章

  1. SAM4E单片机之旅——14、LCD之SMC的配置

    在上个例子中,已经在ASF添加了ILI93xx模块,并做好了相关的声明.这次就做好SMC的配置,然后使用ASF提供的API在屏幕上打印出”Hello World!”字样. 一. 电路图 开发板的LCD ...

  2. SAM4E单片机之旅——24、使用DSP库求向量数量积

    DSP(Digital Signal Processing,数字信号处理)中会使用大量的数学运算.Cortex-M4中,配置了一些强大的部件,以提高DSP能力.同时CMSIS提供了一个DSP库,提供了 ...

  3. SAM4E单片机之旅——18、通过AFEC(ADC)获取输入的电压

    很多时候,一个电压不仅仅需要定性(高电平或者低电平),而且要定量(了解具体电压的数值).这个时候就可以用到模数转换器(ADC)了.这次的内容是测量开发板搭载的滑动变阻器(VR1)的电压,然后把ADC转 ...

  4. SAM4E单片机之旅——3、LED闪烁之定时器中断

    让一个LED灯闪烁不过瘾,我们应该让这块开发板完成一点更高难度的任务:比如让两个LED灯闪烁. …… 当然了,以我们的现在使用的空循环技术,还是可以实现这点的.但是这样显得略为低端.所以我们使用一个高 ...

  5. SAM4E单片机之旅——1、LED闪烁之空循环

    最近因为导师要写一本关于SAME4单片机的书籍,而我也作为一个嵌入式的初学者看了这本书.现在也让我写写几个小的程序,做做示例.既然写了文档之类的,就发到博客上来吧. 目前关于这芯片能参考的书籍大概就只 ...

  6. SAM4E单片机之旅——23、在AS6(GCC)中使用FPU

    浮点单元(Floating Point Unit,FPU),是用于处理浮点数运算的单元. 为使用FPU,除了需要启用FPU外,还需要对编译器进行设置,以使其针对浮点运算生成特殊的指令.虽然在Atmel ...

  7. SAM4E单片机之旅——22、GMAC和PHY的介绍与初始化

    网络通信的作用不用多说,而这次进行的工作即是对以太网通信过程中,需要用到的硬件部分进行初始化,也介绍了发送和接收数据的方法. 由于较为复杂,所以使用了ASF框架.但是也会对用到的库函数的实现做一个介绍 ...

  8. SAM4E单片机之旅——17、通过UART进行标准IO

    交互还是很有必要的,而且使用键盘和显示器的交互效率还是很高的.当然,可以直接使用UART进行字符的输入和输出.但是又何必浪费了C的标准输入输出的格式控制之类的功能呢? 这次内容就是使用scanf() ...

  9. SAM4E单片机之旅——16、NAND Flash读写

    这次大概介绍了一下NAND Flash,以及在ASF中使用它的方法. 一. 接线 这个开发板搭载了一个256 MB,8位的NAND Flash(MT29F2G08ABAEA).引脚接线如下: 偷个懒, ...

随机推荐

  1. Codeforces 583 DIV2 GCD Table 贪心

    原题链接:http://codeforces.com/problemset/problem/583/C 题意: 大概就是给你个gcd表,让你还原整个序列. 题解: 由$GCD(a,a)=a$,我们知道 ...

  2. FTP经典常用命令

    FTP命令是Internet用户使用最频繁的命令之一,不论是在DOS还是UNIX操作系统下使用FTP,都会遇到大量的FTP内部命令. 熟悉并灵活应用FTP的内部命令,可以大大方便使用者,并收到事半功倍 ...

  3. C#是唯一能挑战Java的编程语言?

    几乎所有新近成长的Visual Studio代码开发人员都选择使用C#,而不是VB.NET或C++,这也使得C#已经成长为微软的第一大语言.根据本月的Tiobe编程语言排行榜,C#再次取得了突破性进展 ...

  4. Maven引入Hadoop依赖报错:Missing artifact jdk.tools:jdk.tools:jar:1.6

    Maven引入Hadoop依赖报错:Missing artifact jdk.tools:jdk.tools:jar:1.6 原因是缺少tools.jar的依赖,tools.jar在jdk的安装目录中 ...

  5. unity3D中使用Socket进行数据通信(一)

    公司今年3D产品的工作中心主要集中在提高产品深度上,通过对竞争产品的分析,发现我们的缺陷在于多人在线与后台管理部分,多人在线使用unity自带的Network能够搞定,后台部分前段时间主要研究了下Sq ...

  6. Java Swing界面编程(25)---事件处理:鼠标事件及监听处理

    假设想对一个鼠标的操作进行监听,假设鼠标按下.松开等.则能够使用MouseListener接口. package com.beyole.util; import java.awt.event.Mous ...

  7. 自定义序列化4 (MFC调用C#的.dll)

    CLR:CLR常用简写词语,CLR是公共语言运行时,Common Language Runtime)和Java虚拟机一样也是一个运行时环境,它负责资源管理(内存分配和垃圾收集),并保证应用和底层操作系 ...

  8. eclipse svn插件 删除原账号信息重新登录

    1.通过删除SVN客户端的账号配置文件    1)查看你的Eclipse中使用的是什么SVN Interface(中文:svn接口)windows > preference > Team ...

  9. websocket-client connection( Long-lived )

    参考:https://pypi.python.org/pypi/websocket-client/ import websocket import thread import time def on_ ...

  10. 中兴应用之星携手天翼开放平台:让APP开发更简单

    日前,业内率先的APP开发平台运营商中兴应用之星与中国电信天翼开放平台达成战略合作.即广大用户通过天翼开放平台,可直接享受到应用之星提供的"APP开发服务".   应用之星.中兴通 ...