​Atmel SAM4S 学习笔记(三)-- 示例代码分析

作者: liunian__92
上传时间为: 2014-11-17 03:29 PM
2014-11-17
阅读:

         上一篇文章中,介绍了环境的搭建和示例程序编译和下载到单片机中。这篇文章主要是介绍一下Atmel SAM4S Xplained pro 开发板的示例程序和ASF。

        记得刚接触单片机的时候使用的是STC89C52单片和keil 开发环境,记得当时写程序都是把程序要实现的功能全部放到一个main.c的函数中去,刚开始完成的功能还是比较简单。后来学习了STM32F407 知道了还有固件库这么个可以加快开发速度的东西。将不同的功能的代码放在了不同的文件中去(gpio.c、IIC.c等)进行归类。这种方法便于程序的管理维护和扩展其他的功能,现在的单片机以不再是十几年前的51汇编时代,现在动辄上M的flash存储空间,除非一些对时序要求特别高,或者是操作系统内核调度中会用到汇编,基本上单片机开发使用的是C语言。模块化、分层的思想对开发和维护以及后期的功能扩展都是很有帮助。

        ASF,Atmel Software Frame 其实ASF也只是一个代号而已,可以理解为他是Atmel 公司开发的兼容Atmel公司单片机的一个固件库。其中包括了一些驱动、I/O的控制、协议等一些底层驱动,供给用户来调用加快开发速度。

打开的昨天的示例程序,会看到如图3-1 所示的文件结构

main.c中主要存放的是示例程序的主程序。ASF的文件夹中主要包括了一系列的板级支持包,比如I/O口的配置、spi等配置文件还有开发板上的OLED屏幕以及SD卡的驱动函数。在thirdparty文件夹中有CMSIS和fatfs。

CMSIS(Cortex Microcontroller Software Interface Standard)是ARM Cortex™ 微控制器软件接口标准,是 Cortex-M 处理器系列的与供应商无关的硬件抽象层,是内核与外设、实时操作系统和中间设备之间的通用接口。

FatFs是一个通用的文件系统模块,用于在小型嵌入式系统中实现FAT文件系统。 FatFs 的编写遵循ANSI C,因此不依赖于硬件平台。

详细的内容大家可以自己去研究一下。

下面就简单的分析一下main.c函数。

static void ProcessButtonEvt(uint8_t uc_button);//按键处理函数

static void Button1_Handler(uint32_t id, uint32_t mask);//按键1 按键中断

static void Button2_Handler(uint32_t id, uint32_t mask); //按键2按键中断

static void Button3_Handler(uint32_t id, uint32_t mask); //按键3按键中断

static void SD_Detect_Handler(uint32_t id, uint32_t mask); //SD中断

static void configure_buttons(void);//机械按键初始化

static void configure_adc(void);//配置ADC 采集光线传感器

static void get_num_files_on_sd(void);//得到SD卡根目录下的文件总数

static void display_sd_info(void);//在OLED上显示SD卡的状态

static void display_sd_files(void);//显示SD卡的内容到OLED屏幕上

static void ssd1306_draw_graph(uint8_t col, uint8_t page, uint8_t width, uint8_t height, uint8_t *tab);//在OLED屏幕上显示图片

static void ssd1306_clear_char(void);//清空OLED屏幕

int main(void)

{

/*主要完成时钟、gpio、OLED、SD卡的初始化,和各个功能*/

}

具体内容参看程序,研究一下ASF提供的函数,开发起来会增加开发速度。

下面我们就来开发个小的实例,让OLED液晶屏幕输出HelloWorld!

首先将main.c函数的内容全部清空,我们一步一步来建立这个函数。

因为要在OLED屏上输出,所以要查看液晶屏的驱动函数。

详细的可以去项目文件中  ASF   ->   common  ->   components  ->   display  ->   ssd1306   中查看驱动文件。

#include<asf.h>

#include<string.h>

intmain(void)

{

sysclk_init();// 初始化时钟

board_init();// 初始化GPIO

ssd1306_init();//初始化OLED液晶屏

ssd1306_clear();//清空OLED屏幕

/*显示helloWorld*/

ssd1306_set_page_address(0);//行

ssd1306_set_column_address(0);//列

ssd1306_write_text("HelloWorld");

/*显示我的论坛ID*/

ssd1306_set_page_address(3);

ssd1306_set_column_address(70);

ssd1306_write_text("-- liunian__92");

while(1);

}

上述代码即可完成输出HelloWorld。如图3-2所示

总结一下atmel Studio开发起来还是很好用的,外壳也是VS2010的。有些功能还是很方便的,

比如系统中有

                     ssd1306_set_page_address();

                     ssd1306_set_column_address();

                     _write_text"); 这三个函数,

当你只输入  ssd   的时候,就会在下面自动出现这个三个备选函数。这个自动补充功能还是蛮实用的。

        atmel Studio 一些调试功能还是蛮好用的,更重要的是Help 帮助窗口,有对atmel公司所有芯片和开发板的介绍信息,如果是初次接触atmel公司芯片的芯片,确实应该好好看看help文档和他们的示例代码。但是,可能这个开发环境是为了兼容atmel公司所有的产品,所以会有很多的功能我们用不到,所以感觉整个开发环境就显得操作缓慢。

这个是官方的给出的一些视屏教程,介绍了atmel Studio开发环境使用的,有兴趣可以去看一看:

http://www.atmel.com/zh/cn/Microsite/atmel_studio6/videos.aspx

        经过这几天的学习对这款单片机还是有一定的宏观上的了解,准备下篇文章,介绍一下搭建一个简单高效好用的开发环境IAR。来学习这款芯片最底层的东西,通过产看芯片手册配置寄存器来实现中断、定时器等功能。

希望可以和更多爱好者们多多交流学习。

如果有什么建议问题欢迎私信或者Email(574433742@qq.com)我哦。。。。

Atmel SAM4S Xplained pro学习笔记(一)-- 开发套件介绍

Atmel SAM4S 学习笔记(二)-- 开发环境搭建

Atmel SAM4S 学习笔记(三)-- 示例代码分析

全部评论 ()
条评论
写评论

创建讨论帖子

登录 后参与评论
系统提示