在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暂时还不能用。剩下的部分在下一次说明。

转载于:https://www.cnblogs.com/h46incon/p/3453137.html

SAM4E单片机之旅——13、LCD之ASF初步相关推荐

  1. SAM4E单片机之旅——10、UART与MCK之PLL

    为使用更更高的波特率,则需要更更高的外设时钟的频率.这个时候就需要用到锁相环(PLL)了.锁相环可以对输入的时钟进行分频.升频后进行输出.MCK可以使用的锁相环为PLLA,而PLLA的输入时钟为MAI ...

  2. 【解决方案】STM32L152单片机驱动段码LCD屏,执行HAL_LCD_Init函数失败返回HAL_TIMEOUT,长时间卡在LCD_FLAG_RDY的while循环里面的解决办法

    STM32L152单片机驱动段码LCD屏,HAL_LCD_Init函数执行失败,卡在LCD_FLAG_RDY里面,函数返回HAL_TIMEOUT /*!< Wait Until the LCD ...

  3. ARM裸机-13.LCD

    1.LCD简介 1.1.什么是LCD? (1)LCD(Liquid Crystal Display)俗称液晶. (2)液晶是一种材料,液晶这种材料具有一种特点:可以在电信号的驱动下液晶分子进行旋转,旋 ...

  4. 小猪的Python学习之旅 —— 13.文字识别库pytesseract初体验

    小猪的Python学习之旅 -- 13.文字识别库pytesseract初体验 标签:Python 引言 度过了短暂的春节假期,又要开始继续搬砖了,因为还处于节后 综合征,各种散漫,不想看任何代码相关 ...

  5. Linux之旅 13:磁盘配额与高级文件管理

    Linux之旅 13:磁盘配额与高级文件管理 图源:pixels 磁盘配额(quota)的应用与实践 什么是磁盘配额 磁盘配额的一般用途 限制某一用户组能使用的最大磁盘配额 限制某一用户的最大磁盘配额 ...

  6. 51单片机 DHT11温湿度传感器LCD显示+串口打印显示

    第一部分:DHT11详解: DHT11是一款有已校准数字信号输出的温湿度传感器. 精度湿度±5%RH, 温度±2℃,量程湿度20-90%RH, 温度0~50℃. **一.电路连接分析 1.引脚图** ...

  7. 单片机c语言调试菜单,单片机c语言下lcd多级菜单的一种实现方法

    图形点阵式液晶可显示用户自定义的任意符号 和图形,并可卷动显示.它作为单片机系统人机交 互界面的重要组成部分被广泛应用于实时检测和显 示的仪器仪表中,例如手机上的显示屏就是图形点 阵液晶. 采用图形点 ...

  8. a*算法流程图_单片机常用的13个C语言算法,看过的据说都晋级高手了

    点击箭头处 "蓝色字" ,关注我们哦!! 问:怎么每天看到这种文章? 答:只需搜索公众号"51单片机学习网"免费关注 推荐阅读 单片机基础汇编语言编程实例 自制 ...

  9. 从51开始的单片机之旅(一)----流水灯、矩形键盘、电子时钟

    说一下个人的学习经历 我做过的项目: 今天先把当初做的89E51总结出来 先说下89E51 一.流水灯.数码管 二.矩阵键盘,蜂鸣器和电子时钟 结语: 说一下个人的学习经历 我是大二开始进入学校电子设 ...

最新文章

  1. 关于JVM,你需要掌握这些!!
  2. Hierarchy视图里的Transform和Camera组件
  3. Java工具类——UUIDUtils
  4. Bootstrap的下载和使用
  5. 三星Galaxy S21系列通过认证:终究还是要学苹果“保护环境”?
  6. HCIE-Security Day12:补充包过滤和安全策略的概念
  7. flow time 是什么
  8. Atitit 图像处理 halcon类库的使用  范例边缘检测 attilax总结
  9. 187.重复的DNA序列
  10. 前端实现Word在线预览
  11. .satan勒索病毒加密文件恢复手记
  12. 基于Luckysheet实现的协同编辑在线表格支持在线导入数据库,前端导出,前端导入,后端导出
  13. Python - How to make a chain of function decorators?
  14. 另类搞笑:自我指涉例句不完全收集
  15. pybullet机器人运动质心轨迹/足端轨迹显示adduserdebugline
  16. 如何鉴别虚拟主机好坏
  17. 有哪些值得推荐的,关于脑科学认知研究的经典书籍 ?
  18. 服务器接上显示器操作,服务器接上显示器
  19. 创业公司股权分配的七大实操建议
  20. 前端实现克里金插值分析(二)

热门文章

  1. 深度学习之卷积神经网络(1)什么是卷积
  2. 数学--数论-- AtCoder Beginner Contest 151(组合数+数学推导)好题(๑•̀ㅂ•́)و✧
  3. 机器学习中的随机过程_机器学习过程
  4. vgg 名人人脸图像库_您看起来像哪个名人? 图像相似度搜索模型
  5. TeamViewer远程访问
  6. 将ARM4412开发板配置成USB网卡,并且使用USB通过Ubuntu上网
  7. 万维网服务器协议提供web,万维网的HTTP和FTP协议.doc
  8. python将dataframe写入csv_Pandas dataframe数据写入文件和数据库
  9. android怎样添加图片锐化功能,如何在android处理图片(图像二值化锐化转换格式).doc...
  10. 14英寸电脑长宽多少_连接4K显示器流行,带雷电3雷电4接口的笔记本要多少钱?...