习惯了ST的库,猛然间看到ATMEL的库,有点无从下手。这几天参考这示例工程,终于建立了一个使用ATMEl库的工程。

软件库版本:

软件平台:MDK470A

硬件平台:英蓓特 EB-SAM3S

MCU:     AT91SAM3S4C

1、库的来源

库来自atmel的网站:http://www.atmel.com/tools/SAM3SSOFTWAREPACKAGE.aspx

我使用的工具链是MDK,下载的是:AT91SAM3S-EK MDK® Software Package for Keil uVision4

http://www.atmel.com/images/SAM3S_softpack_2.1_for_uVision_4.12.zip(需要Atmel注册才能下载)

2、MDK中需要设置的地方

因为要使用ATMEL提供的的库,所以需要根据库的要求对开发环境进行一些设置:

板子使用芯片SAM3S4C,设置预定义符号sam3s4。

将于库的目录和用到的。h文件目录加到IncludePath里边(根据下一部分目录结构定)

命令选项:--gnu。因为库里边有些东西不是ANIS C的。比如变量定义不再函数的最前面等等

设置输出目录如下:

3、一步步建立工程

启动文件请参见本博的另一个博文:http://www.cnblogs.com/zyqgold/p/3201527.html

本文使用ATMEl的启动处理方式,即:注册中断向量之后,从resethandler进入main函数。

(1)新建目录E:\at91sam3s4c,并在该目录下建立文件夹:chip、at91lib、out、src

(2)将刚才从ATMEl下载到的库压缩包解压缩

(3)将目录\SAM3S_softpack_2.1_for_uVision_4.12\sam3s-ek\libraries\libboard_sam3s-ek下的两个文件夹include、source已经board.h拷贝到at91lib目录E:\at91sam3s4c\at91lib

(4)将目录\SAM3S_softpack_2.1_for_uVision_4.12\sam3s-ek\libraries\libchip_sam3s下的文件夹cmsis、include、source以及文件chip.h拷贝到目录E:\at91sam3s4c\chip

(5)MDK中,在E:\at91sam3s4c新建工程at91sam3s4c_LED,选择MCU AT91SAM3S4C

(6)电机确定后会弹出对话框,询问是否要拷贝启动文件,选择是。当然我们不是要使用这个启动文件,之后我们将会改写这个文件。

7、电机设置工程组织结构如下:

(8)向工程添加文件

将E:\at91sam3s4c\at91lib\source中的board_cstartup_keil.c和board_lowlevel.c文件添加到工程的at91lib目录下,将E:\at91sam3s4c\chip\source中的exceptions.c、wdt.c、pmc.c、pio.c文件添加到工程的chip目录。将E:\at91sam3s4c\chip\cmsis中的core_cm3.c文件添加到工程的chip目录

在E:\at91sam3s4c\src中新建文件main.c,并添加到工程的usr目录。

(9)添加工程引用位置(IncludePath)

E:\at91sam3s4c;.\chip\cmsis;.\at91lib;.\at91lib\include;.\chip;.\chip\include

(10)编辑sct文件:

在工程选项的Linker选项卡中,首先取消Use Memory Layout...之前的选择,然后点击ScatterFile选择框后边的EDIT。使用自己的分散加载描述文件

(11)想分散加载描述文件中添加内容:

; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

Load_region 0x400000 0x40000
{
    ; Flash 256K
    Vector_region 0x400000
    {
        board_cstartup_keil.o (vectors, +FIRST)
    }
    Fixed_region +0
    {
        .ANY (+RO)
    }
    ; SRAM0 32K
    Relocate_region 0x20000100 (0x8000-0x100)
    {
        .ANY (+RW +ZI)
    }
    ; Configure Stack and Heap
    ARM_LIB_HEAP 0x20007000 EMPTY 0x400
    {
    }

ARM_LIB_STACK 0x20007FFC EMPTY -0x400
    {
    }
}

(12)编辑文件startup_SAM3S.s

删除该文件所有的内容,因为我们不用MDK提供的启动文件。之后向这个文件添加内容:

AREA WORKAROUND,CODE,READONLY
EXTERN  __vector_table
LDR     r0,=__vector_table
ALIGN
END

这些内容的意思可参考http://www.cnblogs.com/zyqgold/p/3201527.html

(13)最后按F7生成即可。此时工程中还没有main函数,系统会报错。不用急,完成下一步就好了。

4、用库写一个点灯程序

板子LED的原理图如下:

即3个LED分别由PA19、PA20和PC20驱动。PA19、PA20电平为高时D2、D3被点亮,PC20为低电平时D4被点亮。

#include "board.h"

int main()
{
    Pin LED2,LED3,LED4;  //定义三个引脚结构体,三个引脚分别对应三个LED
    WDT_Disable(WDT); //复位时候看门狗默认是打开的,手动关掉。不让MCU反复复位

LED2.mask = PIO_PA19;   //引脚属性定义
    LED2.pio = PIOA;
    LED2.id = ID_PIOA;
    LED2.type = PIO_OUTPUT_1;
    LED2.attribute = PIO_DEFAULT;
   
    LED3.mask = PIO_PA20;
    LED3.pio = PIOA;
    LED3.id = ID_PIOA;
    LED3.type = PIO_OUTPUT_1;
    LED3.attribute = PIO_DEFAULT;
   
    LED4.mask = PIO_PA20;
    LED4.pio = PIOC;
    LED4.id = ID_PIOC;
    LED4.type = PIO_OUTPUT_0;
    LED4.attribute = PIO_DEFAULT;
   
    Pin pinlist[] = {LED2,LED3,LED4}; //专门为库函数定义的Pin列
    uint32_t numLeds = PIO_LISTSIZE( pinlist ) ;  //库里边建议这么写的
   
    PIO_Configure(pinlist,numLeds);   //库函数初始化Pin
   
    PIO_Clear(&LED2);//点亮D2
    PIO_Clear(&LED3);  //点亮D3
    PIO_Set(&LED4);  //点亮D4

while(1);
}

最后,下载到板子上。等一会就会看见板子上的3个LED亮了。等一会的原因,是这个板子的晶振稳定的比较慢,不要怪MCU哦。

【AT91SAM3S】建立基于SAM3S库的工程并点亮LED的更多相关文章

  1. [STM32F10x] 从零开始创建一个基于标准库的工程

    硬件:STM32F103C8T6 平台:MDK-AMR V4.70 1.创建一个Keil uVision 的工程 要点:相同类型的源文件放在一起以便于管理       2.添加标准库源文件 3.添加几 ...

  2. 【GMT43智能液晶模块】基于HAL库的SDRAM和LCD驱动例程(MDK工程&CubeMX工程)

    说明: 1.该工程基于HAL库实现动态存储器SDRAM驱动以及液晶控制器LCD驱动. 2.工程通过STM32CubeMX(Version 4.22.0)配置生成,可直接打开进行配置. 3.KEIL M ...

  3. STM32F1固件库文件讲解与基于固件库新建MDK工程模板

    操作系统:win10 1.文件目录 (在cmd下用"cd 文件夹" 进入到要显示的文件夹,如cd d:\en.stsw-stm32054,然后输入tree 回车就会出现上图的目录结 ...

  4. 手淘架构组最新实践 | iOS基于静态库插桩的⼆进制重排启动优化 抖音研发实践:基于二进制文件重排的解决方案 APP启动速度提升超15% 编译期插桩

    抖音研发实践:基于二进制文件重排的解决方案 APP启动速度提升超15% 原创 Leo 字节跳动技术团队 2019-08-09 https://mp.weixin.qq.com/s/Drmmx5JtjG ...

  5. WebGIS中基于控制点库进行SHP数据坐标转换的一种查询优化策略

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.前言 目前项目中基于控制点库进行SHP数据的坐标转换,流程大致为:遍 ...

  6. 基于 libpcap库的sniffer程序

    基于 libpcap库的sniffer程序 Libpcap库是WireSharek和Tcpdump抓包程序的基础,利用libcap我们自己也可以实现自己的抓包程序,在网络上实时抓包分析,或者利用处理的 ...

  7. 跨平台网络通信与服务器框架 acl 3.2.0 发布,acl_cpp 是基于 acl 库的 C++ 库

    acl 3.2.0 版本发布了,acl 是 one advanced C/C++ library 的简称,主要包括网络通信库以及服务器框架库等功能,支持 Linux/Windows/Solaris/F ...

  8. Docker version 1.12.5建立registry私库

    sudo docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry :前面的是宿主机的地址(/opt/da ...

  9. 建立docker私有库(docker registry)(转)

    建立docker私有库(docker registry) 博客分类: docker   我的目标还是无互联网安装,部署内部的docker私有库,目前docker镜像的获得还是需要互联网,将下载好的do ...

随机推荐

  1. (转)【深入浅出jQuery】源码浅析2--奇技淫巧

    [深入浅出jQuery]源码浅析2--奇技淫巧 http://www.cnblogs.com/coco1s/p/5303041.html

  2. chrome浏览器遇到的异常

    昨天写了一个二进制输出图片的方法,发现在chrome浏览器里面出了异常: (failed) net::ERR_INCOMPLETE_CHUNKED_ENCODING   代码是这样写的: //直接输出 ...

  3. JavaWeb Chapter 7 监听器

    1.  监听器Session.request.context对象属性的变化: 2.  三个对象都有生命周期和属性改变的监听: 3.  Session另外还有会话迁移和对象绑定的监听: 4.  Sess ...

  4. Python基础教程-第一章-变量、函数、字符串

    1.1变量 变量基本上就是代表(或者引用)某个值的名字,举例来说,如果希望用x代表3,只需要执行下面的语句即可: >>>x = 3 这样的操作称为赋值(assignment),值3赋 ...

  5. 转: jdbc连接数据库需要注意和出错的地方

    * 1.数据库登录模式不能只使用windows登录模式,要采取混合模式登录, * 并记住相应的密码和账户: * 2.连接数据库后一定要记得关闭资源,否则就会造成资源浪费. * 关闭的时候也要注意顺序, ...

  6. IT行业的斗争

    有朋友和我说,她希望做一名IT工作者,原因是可以对着机器工作,不需要再面对人与人之间的是是非非. 我真心不想打破她的憧憬,因为无论干任何行业,有人,就有矛盾,就有斗争. 我是那名失败者,仅仅想安安稳稳 ...

  7. linux shell 指令 诸如-d, -f, -e之类的判断表达式

    文件比较运算符-e filename 如果 filename存在,则为真 [ -e /var/log/syslog ]-d filename 如果 filename为目录,则为真 [ -d /tmp/ ...

  8. QT中QWS的含义 (转至 宋金时的专栏

    QT 编程和文档中的术语QWS的全称是Qt windows system,是QT自行开发的窗口系统,体系结构类似X Windows,是一个C/S结构,由QWS Server在物理设备上显示,由QWS ...

  9. 2016 - 1 - 23 json解析

    一: json   1. 什么是json 1.1 json是一种轻量级的数据格式,一般用于数据交互. 1.2 服务器返回给客户端的数据,一般都是JSON或者XML格式(文件下载除外).   2. JS ...

  10. 详解Android功耗分析工具Power Tutor的使用

    简介: PowerTutor 是由美国密歇根大学在谷歌的指导下开发的.它是用来展示google智能手机中主要组件或应用功耗的一种应用程序.例如,CPU,网络链接,LCD显示屏,GPS等.它允许开发者很 ...