历史上的今天
返回首页

历史上的今天

今天是:2025年02月01日(星期六)

2018年02月01日 | 玩转ARM基本功能

2018-02-01 来源:eefocus

     我是稀里糊涂的走上了嵌入式开发的道路,回想起来,多亏了身边的几位朋友,是在与他们的闲侃中慢慢的走上了这条道路:从最早的电路设计,PCB打板,电路调试,模拟仿真,单片机开发到后来的ARM开发,回想起来,心里也是诚惶诚恐,如履薄冰。

    我开始做电子是用的AVR单片机,从I/O、按键…到内存、外设玩了一通。工作之后,才开始玩ARM。在项目中逐渐对ARM开发有了一些感悟。

 

    学习ARM有两个目的,看你是那种:1、长见识,顺便玩玩;2、工作需要,从事ARM开发。这就要分开对待了。

    如果是长见识,随便玩玩,为日后的工作做准备,那么就应该挑选市场上很成熟的ARM7、ARM9等资料比较多,玩的人比较多,出现问题容易解决;如果是工作需要,就没有这么多选择,必须按照功能要求,开始征服特定的片子。

    不管哪种目的,学习起来步骤我感觉差不多,先裸板,后上操作系统:

1.gif?imageView2/2/w/550

    之所以这么安排,是因为听了很多大牛的建议和意见。正所谓“万丈高楼平地起”,基础很重要。在上操作系统之前,一定要对底层代码特别是裸板程序有一定的认识。这样,对于操作系统中涉及底层的问题就会少很多。

    现在以我学习ARM11(s3c6410-1176JZF)的经历介绍写一些基本功。

    首先:要有一定的电子基础。

    这不是废话吗,既然玩ARM当然都是懂电子的呀。其实不然!电子基础可深可浅,怎么是个头?会IC放大器,搭建信号处理电路,这是信号处理中的基本功。对于ARM开发来说,我感觉重点在信号走线、滤波、稳压和保持片子性能稳定上(分析一个ARM板子就会明白这些道理)。

    我谈下我的见解:明白ARM板子中除集成IC之外的元器件的作用,最常见的是电容作用、驱动LED呀、扬声器呀、串口连接、存储器连接、LCD屏幕连接等等。看到串口,想起怎么连接;看到按键,想起怎么识别……基本上在硬件上可以将整个系统连接起来。

    其次,有一定的英文阅读能力。

    我在开发的时候以Linux应用完全开发手册、6410手册和ARM1176jzf内核手册为基础。这三个文档一个中文,两个英文,页数总和有2500页。如果没有耐心,想尽快完成开发,这无异于缘木求鱼。6410的手册是对ARM11芯片的介绍和寄存器的总体介绍:包括GPIO设置,相机接口、Nandflash控制器、DRAM控制器等。1176jzf是对1176jzf处理器的设置的介绍。

2.jpg?imageView2/2/w/550

    对于简单的GPIO设置,我们可以查阅6410的GPIO章节,

3.jpg?imageView2/2/w/550

    从中可以看出各组管脚的功能:各组管脚是混合复用(除了GPI和GPJ两组),依据单片机知识,如果是管脚复用,必须通过相应寄存器设置才能达到相应要求,这时,我们需要看GPIO的寄存器设置章节:

    对于GPA组,

4.jpg?imageView2/2/w/550

    可以看出端口A具有读写功能,并且有相应的地址,从存储器映射图中可以看出,端口A可以通过配置相应寄存器(也就是相应的地址)为合适的数值,就能完成相应的操作。

5.gif?imageView2/2/w/550

    对于GPA0管脚来说,通过配置其为0000或者0001或者0010将其定义为输入、输出或者串口模式,具体操作及分如下:

6.jpg?imageView2/2/w/550

    通过三个操作,可以讲GPA0设置为输出功能,如果外界LED,可以实现LED灯的控制。

    此外,还有数据寄存器,上拉控制寄存器,配置休眠和上拉休眠等寄存器,其操作原理一样,将相应的寄存器地址放入一寄存器,写入数值,即完成相应配置。

    第三、要有一点汇编和c语言的基础。

    为什么这么说呢,首先看下配置I/O口为简单输入输出的ARM的启动代码:

7.gif?imageView2/2/w/550

    在6410的启动代码中,需要以汇编语言的形式设置、配置寄存器,现在将这部分进行简单的分析:

    在写裸板程序的起始,需以 .globl 为开始,通过

8.jpg?imageView2/2/w/550

    将外设地址映射到外设地址,通过

9.jpg?imageView2/2/w/550

    将存储器大小设置为256M,具体怎么实现的呢,查看1176jzf手册:

10.jpg?imageView2/2/w/550
11.jpg?imageView2/2/w/550

    有此可见,6410手册和1176jzf手册对于裸板程序是一利器。

    第四、举一反三,融会贯通,利用网络。

    一个6410手册有1378页,一个1176jzf有972页,看完是一项可望不可及的任务,因此善于举一反三,融会贯通是必须的。另外还需要有Google大神的帮助。在开发过程中,如果碰到新功能,新接口没有使用过,这时,Google大神就可以发挥其大神的作用,带领你完成任务。

    如在写堆栈操作中,需要将各寄存器的数值进行保存,需要使用stmdb指令,如果不熟悉,可以用Google大神进行帮助。

    通过介绍,可以明白具体的操作。

    虽然ARM更新速度很快,但是也不是出来一个新产品就让我们从头开始学习新技术,只要熟悉掌握了一种MCU,通过举一反三,可以将技术扩大到应有的领域。


推荐阅读

史海拾趣

Delta Electronics Manufacturing Corp公司的发展小趣事

技术创新一直是Delta的核心竞争力。多年来,公司不断投入研发资源,推动技术创新和产品升级。Delta的工程师团队致力于电源技术的研发,成功推出了一系列具有领先技术水平的电源产品,如高效能转换器、智能电源管理系统等。这些产品不仅满足了市场的多样化需求,也推动了电源行业的技术进步。

乔光电子(FTR)公司的发展小趣事

技术创新一直是Delta的核心竞争力。多年来,公司不断投入研发资源,推动技术创新和产品升级。Delta的工程师团队致力于电源技术的研发,成功推出了一系列具有领先技术水平的电源产品,如高效能转换器、智能电源管理系统等。这些产品不仅满足了市场的多样化需求,也推动了电源行业的技术进步。

台湾丰宾(CapXon)公司的发展小趣事

面对日益激烈的市场竞争,CapXon公司始终坚持以技术创新为驱动,不断推动产业升级。公司投入大量资金用于研发新的技术和产品,以满足市场对高品质、高性能电容器的需求。通过不断的努力,CapXon成功研发出了一系列具有自主知识产权的高性能电容器产品,这些产品不仅具有更高的稳定性和可靠性,而且能够满足更广泛的应用场景需求。

遨格芯微(AGM)公司的发展小趣事

作为电子行业的领先企业之一,AGM始终坚持以创新为核心竞争力。公司不断投入研发资源,加强与国际先进企业的合作与交流,积极引进和吸收新技术、新工艺和新材料。同时,AGM还注重人才培养和团队建设,打造了一支高素质、专业化的研发团队。这些努力为AGM在未来的发展中保持领先地位提供了有力保障,也为公司实现可持续发展奠定了坚实基础。

以上五个故事从不同角度展示了遨格芯微(AGM)公司在电子行业中的发展历程和取得的成就。通过不断的技术创新和市场拓展,AGM逐渐在可编程逻辑技术领域崭露头角,成为电子行业的佼佼者。未来,随着科技的不断进步和市场需求的不断变化,AGM将继续保持创新精神和敏锐的市场洞察力,为电子行业的发展贡献更多力量。

Galil Motion Control Inc公司的发展小趣事

在Intel收购Altera后,中低端FPGA市场出现了新的发展机遇。AGM抓住这一机会,加快了在中低端市场的布局和拓展。公司凭借先进的技术和优质的产品,成功赢得了大量客户的青睐,并加速了对Altera在中低端FPGA市场份额的蚕食。到2016年伊始,AGM已经在一些垂直领域如LED多彩控制等取得了显著的市场份额,成为FPGA市场的重要参与者。

Aplus Flash Technology Inc公司的发展小趣事

Aplus Flash Technology Inc公司自成立以来,一直致力于闪存技术的研发与生产。在电子行业的激烈竞争中,公司凭借对技术的深入理解和持续创新,成功研发出了一款高性能、低成本的闪存芯片,迅速占据了市场份额。这款芯片不仅满足了消费者对电子设备存储容量和速度的需求,还因其出色的稳定性和耐用性赢得了客户的广泛好评。Aplus Flash Technology Inc公司因此成为了闪存市场的佼佼者,为公司的进一步发展奠定了坚实基础。

问答坊 | AI 解惑

FPGA高手经验谈DOC文档

FPGA高手经验谈DOC文档…

查看全部问答>

资源该不该整合?

坛子正处于发展的阶段,或许越来越多的子版块都会相继的建立,然而这个里面原来很多这个板块需要的精华支柱,需要收录过来吗,需要移动吗?不知道各位管理者和网友怎么看法? 以dsp里面的为例,2000系列的在dsp板块里面好东西的确很多,但是实际用 ...…

查看全部问答>

关于xilinx IP核

我请教一下,对于同样功能的IP核,有分ASIC IP Core 与FPGA IP Core吗~ 如果有,都是用Core Generater生成吗~ 比如我想生成8b\\10b核,为什么Core Generater里就一个,没有ASIC与FPGA的区别呢~ …

查看全部问答>

oemaddrtab_cfg.inc修改后编译错误

现在修改oemaddtab_cfg.inc后出现编译错误 错误        115        error A0092: no immediate rotate operand can be created: -1068        D:\\WINCE600\\PLATFORM\\SMDK6410\\SR ...…

查看全部问答>

问一个简单的问题:关于如何获取键盘值

在windows CE下,要判断在按下某键盘值时作出相应处理.不知道如何获取已被按下的键盘值.…

查看全部问答>

真心请教

   AT91PS_AIC     pAic;     //* Load System pAic Base address         pAic = AT91C_BASE_AIC;    请问这段什么意思?    AT91F_PMC_EnablePer ...…

查看全部问答>

LED发光字制作中的常见问题解决方法

replyreload += \',\' + 690021;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

常用大功率LED芯片制作方法汇总

    要想得到大功率LED器件,就必须制备合适的大功率LED芯片。国际上通常的制造大功率LED芯片的方法有如下几种:   ①加大尺寸法。通过增大单体LED的有效发光面积和尺寸,促使流经TCL层的电流均匀分布,以达到预期的光通量。但是,简单 ...…

查看全部问答>

2011全国电子设计大赛基本仪器和主要元器件清单

本帖最后由 paulhyde 于 2014-9-15 09:44 编辑 1、基本仪器清单 20MHz普通示波器(双通道,外触发输入,有X轴输入) 60MHz双通道数字示波器 低频信号发生器(1Hz~1MHz) 标准高频信号发生器(1MHz~30MHz,可输出1mV小信号) 函数发生器(10 ...…

查看全部问答>

使用LM3S8962感受

以前只是听过TI的Stellaris系列ARM好用,外设丰富,因此最近也在学习,经过接触之后确实比较好用,很多现成的库可以直接调用使用,不用自己再编写许多库函数了,希望能接着深入学习下去!…

查看全部问答>