历史上的今天
返回首页

历史上的今天

今天是:2024年12月05日(星期四)

正在发生

2019年12月05日 | 【AT91SAM3S】建立基于SAM3S库的工程并点亮LED

2019-12-05 来源:elecfans

习惯了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的。比如变量定义不再函数的最前面等等

image

设置输出目录如下:

image

image

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.12sam3s-eklibrarieslibboard_sam3s-ek下的两个文件夹include、source已经board.h拷贝到at91lib目录E:at91sam3s4cat91lib

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

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

image

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

image

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

image

(8)向工程添加文件

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

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

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

  E:at91sam3s4c;.chipcmsis;.at91lib;.at91libinclude;.chip;.chipinclude

image

(10)编辑sct文件:

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

image

(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的原理图如下:

image

即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哦。

推荐阅读

史海拾趣

AMS公司的发展小趣事

AMS(Austria Microsystems)公司是一家总部位于奥地利的半导体制造商,专注于开发和生产高性能的模拟半导体解决方案。以下是 AMS 公司发展的五个相关故事:

  1. 创立与早期阶段:AMS 公司成立于1981年,最初是一家从事晶圆制造的小型企业。公司创始人团队以其对半导体技术的深刻理解和创新能力,在短时间内取得了一定的成就。早期产品主要包括模拟集成电路(IC)和传感器,为医疗、汽车、工业等领域提供解决方案。

  2. 技术创新与产品扩展:随着市场需求的不断变化和技术的进步,AMS 公司不断进行技术创新,并扩展了产品线。公司致力于开发具有高性能、低功耗和小尺寸的模拟半导体产品,以满足智能手机、消费电子、工业自动化等领域的需求。公司的产品涵盖了光学传感器、环境传感器、声学传感器等多个领域。

  3. 全球化发展与市场拓展:AMS 公司通过不断拓展全球市场,加强与客户和合作伙伴的合作关系,实现了快速的业务增长。公司在欧洲、亚洲和美洲设立了多个销售办事处和生产基地,建立了完善的全球供应链和销售网络。公司的产品销售网络覆盖了全球范围,得到了国内外客户的广泛认可。

  4. 收购与合并:随着公司规模的扩大和市场竞争的加剧,AMS 公司通过收购和合并等方式不断强化自身实力。公司先后收购了一些技术领先的公司,扩大了产品线和市场份额。此举进一步提升了公司在模拟半导体领域的竞争优势,加速了公司的业务增长。

  5. 持续创新与未来展望:AMS 公司将继续致力于技术创新和产品研发,不断提升产品性能和品质水平。公司将关注新兴技术和市场趋势,积极布局未来的发展方向,包括人工智能、物联网、汽车电子等领域。同时,公司还将加强与客户和合作伙伴的合作,共同推动行业的发展和进步。

Amptek Inc公司的发展小趣事

Amptek Inc 是一家专注于放射性测量和分析仪器的公司,提供各种 X 射线和伽马射线探测器以及相关的测试设备和软件。以下是 Amptek 公司发展的五个相关故事:

  1. 公司成立与早期发展:Amptek 公司于1987年成立,总部位于美国马萨诸塞州贝弗利市。公司成立初期,主要从事于放射性测量仪器的研发和生产。创始人团队在核物理和仪器设计领域拥有丰富的经验,致力于提供高性能、高精度的测量和分析解决方案。

  2. 技术创新与产品升级:随着技术的不断进步,Amptek 公司持续进行技术创新和产品升级。公司引入先进的探测器技术和数据处理算法,不断提升产品的性能和精度。公司的 X 射线和伽马射线探测器在放射性测量和分析领域具有很高的声誉,被广泛应用于科学研究、医学诊断、工业检测等领域。

  3. 全球市场拓展:Amptek 公司在全球范围内建立了广泛的销售网络和服务体系。除了在美国设立销售和服务中心外,公司还在欧洲、亚洲等地设立了分支机构和代理商,为全球客户提供及时的技术支持和售后服务。公司的产品远销全球,赢得了国内外客户的信赖和好评。

  4. 科研合作与应用推广:Amptek 公司与世界各地的科研机构、大学和实验室保持着紧密的合作关系,共同开展科研项目和应用研究。公司的产品被广泛应用于粒子物理、天体物理、材料科学、核医学等领域的实验和研究中,为科学家和研究人员提供了强大的实验工具和数据支持。

  5. 持续发展与未来展望:Amptek 公司将继续致力于技术创新和产品研发,不断提升产品的性能和功能,满足客户不断增长的需求。公司将继续拓展国际市场,加强与客户的合作关系,进一步巩固在放射性测量和分析领域的领先地位。同时,公司还将关注新兴市场和新技术的发展趋势,积极布局未来的发展方向。

EG & G Inc公司的发展小趣事

随着电子技术的不断发展,EG & G Inc公司不断进行技术创新和产品升级。公司投入大量资源进行研发,成功推出了一系列具有竞争力的电子产品。其中,某款高精度测量仪器在市场上获得了广泛认可,成为了公司的明星产品。此外,公司还积极开拓新的应用领域,将电子技术应用于医疗、环保等多个领域,为公司带来了新的增长点。

Amulet Technologies公司的发展小趣事

近年来,电子行业面临着诸多变革和挑战,如技术更新换代加速、市场需求变化等。为了应对这些变革,EG & G Inc公司不断进行战略调整和业务优化。公司加大了对新技术和新产品的研发力度,同时注重提高生产效率和降低成本。此外,公司还积极探索新的商业模式和市场机会,以保持其在行业中的领先地位并实现持续发展。

以上五个故事概述了EG & G Inc公司在电子行业中的重要发展历程和关键事件。这些故事不仅展示了公司的实力和成就,也反映了其在不断变革的市场环境中保持竞争力和持续发展的能力。

Alliance Memory公司的发展小趣事

随着市场竞争的加剧,EG & G Inc公司意识到通过并购和整合来提升自身竞争力的重要性。公司先后收购了多家具有技术优势和市场潜力的企业,将其纳入自己的业务体系。这些并购不仅增强了公司的技术实力和市场地位,也为其未来的发展奠定了坚实的基础。

Goldstar Electron Co Ltd公司的发展小趣事

EG & G Inc公司成立于20世纪早期,最初专注于电子设备的研发和生产。公司凭借其技术优势和创新能力,在电子行业中逐渐崭露头角。在成立初期,EG & G Inc就与多家知名企业和研究机构建立了合作关系,共同推动电子技术的发展和应用。这些合作关系不仅为公司带来了技术上的支持,也为其在市场上的扩张奠定了基础。

问答坊 | AI 解惑

DSP编程的几个关键问题!!!(经典!!!)

找到一份好资料,跟大家分享一下,顺便挣点钱!!o(∩_∩)o...…

查看全部问答>

转载:多种传感器书籍大集锦

刚在网上看到的,迫不及待的与大家分享,转自OURAVR [ 本帖最后由 绿茶 于 2009-4-9 13:21 编辑 ]…

查看全部问答>

有没有纯数字的精确测量信号时间间隔的方法?

十个ns左右的误差范围啊,疯了都,目前我想到两个方法,一个是精确扩展计数时间,一个是多测几次,牺牲测量速度,不好弄…

查看全部问答>

HI-TECH C V9.70 和谐文件

HI-TECH C Compiler for PIC10-12-16 MCUs V9.70 已经测试过,破解成功! 1,先安装HI-TECH C Compiler for PIC10-12-16 MCUs V9.70  安装路径为默认路径 \"C 盘下\" 激活PICC 45天试用版! 2,破解,先写入注册文件,运行破解文件, ...…

查看全部问答>

DDRAW程序问题,在全屏方式下,用创建程序的方式打开一个程序后,程序的界面显示不出来,LCD上显示的还是DDRAW的画面

请问如何解决这个问题 // // Copyright (c) Microsoft Corporation.  All rights reserved. // // // Use of this source code is subject to the terms of the Microsoft end-user // license agreement (EULA) under which you l ...…

查看全部问答>

wince usb 驱动问题

我在看wince5.0 usb从驱动源代码具体位置是:/%wince500boot%/public/common/oak/usbfn 这个文件下有3个文件夹: 1.CLASS文件: RNDIS,SERIAL, STORAGE三个文件夹 2.CONTROLLER文件: MDD,NET2280 3.UFNCLIENLIB文件 请问这三个文件都有什 ...…

查看全部问答>

usb拔掉了,如何判断呢

在usb中断中有这个类别的处理吗? (没有多余管脚来判断Vusb)…

查看全部问答>

国产FPGA助学计划

国产FPGA助学计划          自打去年12月中旬开始接触AgateLogic这家本土FPGA器件制造商,不到四个月的时间,虽然手头上总是多个项目齐头并进,真正花在研究琢磨这个国产FPGA项目上的时间或许不会超过 ...…

查看全部问答>

有木有CH4浓度传感器啊,急求资料,帮忙呀

最还好有单片机程序代码,电路图等等,越全越好.谢谢啊 …

查看全部问答>

4-20ma转换成0-5V

各位高手,本人摸电只是懂点基本的.想请教大家个问题.传感器输出的4-20ma如何转换成0-5V.我以前一直就是用250欧电阻将4-20ma转换成1-5V,再进行A/D转换,感觉这样处理没有0-5V方便.比如4-20ma表示0-50度的温度,0V的时候就表示温度是0度,5V的时候就表示 ...…

查看全部问答>