ARM菜鸟成长记--之三

发布者:莫愁前路最新更新时间:2016-01-12 来源: eefocus关键字:ARM  菜鸟成长记 手机看文章 扫描二维码
随时随地手机看文章
提起启动代码,我就嗷嗷郁闷,IAR下的程序都死在了这里,Keil中出现的问题很多都是通过对启动代码的修修补补才解决的,一句话:成也启动代码,败也启动代码。
启动代码应该是刚接触ARM的新手必须面对而又很头痛的问题吧,刚开始我也很纳闷,为什么搞个这玩意,学51的时候咋就没见过呢。而且还都是汇编写的,俺的汇编还停留在“MOV”阶段,其他的不是很懂,没办法,谁让汇编的效率高呢。提到启动代码还不得不老生常谈一下其中要完成的任务:
1、建立异常中断向量表,ARM从0X0开始给每个异常中断分配4个字节的空间,一般存放一个跳转指令(B)或PC的装载指令(LDR PC,X_Vector),当发生异常时,ARM从此处取得相应异常中断处理程序入口地址,再跳转执行;
2、ARM都是高速处理器,而在高速下启动很可能会不稳定,所以在启动代码从慢时钟开始运行,在适当的位置,从32.768K切换到高速运行;
3、ARM一般带有片外存储器,Flash、SDRAM等,这些存储器都需要初始化才能使用,这都是在启动代码中完成,但是Norflash的初始化要在时钟初始化之前;
4、ARM有不同的模式,每种模式都需要相应的堆栈;
5、Copy异常中断向量表到RAM,并实现REMAP,具体请参照上一节;
6、Copy可执行映像的数据段到RAM,并将ZI区清零。这个一般都是由编译器完成的,IAR下是?main来实现,Keil中由__main实现。
现在启动代码可以看懂一些,不过自己写启动代码还是很遥远的事情。如果开始对启动代码很抵触,可以考虑使用Keil,因为Keil由启动代码的图形化配置,直接点击鼠标操作就可以实现自己的启动代码。下面结合我们at91sam9260的板子,说说Keil中的启动代码。
 
打开Keil生成的SAM9260.S,点击左下角的“Configuration Wizard”进入图形化配置向导,根据你的需要选择参数,全部选择完毕后,再点击"Text Editor",将会看到生成的启动代码。
我靠,不是吧,将近2000行,开始你可能会很泄气,但仔细一看,前面不都是些宏定义嘛,跟图形化配置向导一一对应的,只有从1200多行的这一句开始的才是真正的启动代码部分。
;----------------------- CODE --------------------------------------------------
 
                PRESERVE8 
开始是8个PC装载指令,注意第六个向量,即地址0X14处,存放可执行映像的大小,||Image
ERROM1
RO
Length||+||Image
RW_RAM1
RW
Length||

接下来是SMC、PMC的初始化,我们的板子外扩了Norflash,如果在未初始化Norflash前,切换到快时钟,系统起不来,所以应该先初始化SMC,再初始化PMC,而Keil自带的启动代码中默认PMC在前,怎么办,可以将前面PMC的宏定义部分和初始化部分剪切,然后分别粘贴在SMC宏定义部分和初始化部分的后面,然后再看“Configuration Wizard”中,PMC自动放到了SMC的后面了。
接下来是关闭看门狗(默认是打开的),拷贝异常中断表到RAM中,然后REMAP,建立缓存,建立各个模式的堆栈指针。
最后进入__main进行数据段和代码段的拷贝以及初始化C语言库函数,然后跳转到main执行。
 
Keil中有详细的注释,理解起来应该不是很难,具体的语句无需明白,知道个大致意思就行了。无非是将某个外设的基地址装载(LDR)到一个寄存器R0,将要向这个外设的某个寄存器赋的值装载到另一个寄存器R1,然后加载(STR)。一般的模式就是这样:
LDR   R0,=Periphral_BASE     ;某外设的基地址
LDR   R1,=0XFFFF0000         ;向寄存器要赋的值
STR    R1,[R0,#Periphral_Register_OFS] ;向外设Peripheral基地址偏移OFS的寄存器Register赋值0xFFFF0000
 
Keil的启动代码部分有两个注意的地方:
1、启动代码中有很多IF语句,如:IF      :DEF:RAM_INTVEC。这就可以通过在Options/Asm对话框中的Define中填入RAM_INTVEC就可以实现中断向量从Flash到RAM的拷贝。同理,还有IF      :DEF:REMAP等等;
2、带有Keil特色的MICROLIB,通过在Options/Target中选择“Used MICROLIB”,比不使用微库相比生成的代码较小。不过除此之外,应该还有其他的关系,因为我们的程序如果选择不使用微库的话,就执行不成功。对于微库只有这些很片面的理解,还请老手指教。
 
总而言之,Keil中的启动代码还是比较好理解的,而且借助图形化配置向导,可以更快的上手,以实现自己的启动代码。
 
下面要说说Keil下,怎样实现程序在片外Norflash运行、片外SRAM调试、片外SRAM运行。
关键字:ARM  菜鸟成长记 引用地址:ARM菜鸟成长记--之三

上一篇:linux下内存管理学习心得(二)
下一篇:ARM菜鸟成长记--之二

推荐阅读最新更新时间:2024-03-16 14:43

ARM9嵌入式系统在励磁调节装置的应用
前 言   励磁系统是发电机组重要的辅助装置,它对发电厂的自动化、发电机组运行的可靠性有着重要作用。随着科学技术发展,励磁方式已从直流电机励磁系统发展到可控硅励磁,自动调节器从原来的模拟式发展到微机数字式。   本文所研究的励磁调节装置,它是以经典和现代控制理论与数字信号处理器DSP技术与嵌入式技术相结合的微机励磁调节器。它继承了过去的微机励磁调节器的全部调节、控制及限制保护功能,同时在计算速度、抗电磁干扰、可靠性等方面有了极大的改进,有效保证整个系统调节、控制功能的实现; 外围采用先进的大规模可编程逻辑器件,以提高整个系统的可靠性,并形成对用户开放的逻辑系统。 1、励磁调节器的组成原理 图1 励磁调节系统原理图   所示
[单片机]
<font color='red'>ARM</font>9嵌入式系统在励磁调节装置的应用
ARM紧致内存TCM的解释
  TCM简介   TCM :TIghtly Coupled Memory的缩写。为了弥补Cache访问的不确定性,而增加的OnChip Memory.有的CPU含有分立的InstrucTIon TCM / Data TCM.TCM包含在存储器的地址映射空间中,可以作为快速存储器来访问。TCM使用物理地址,对TCM的写访问,受到MMU内部保护信息的控制。向TCM中的内存位置写入时,不会发生任何外部写入。   TCM用于向处理器提供低延迟内存,它没有高速缓存特有的不可预测性。 可以使用 TCM 来存放重要例程,如中断处理例程或者极需要避免高速缓存不确定性的实时任务。此外,可以使用 TCM 来保存暂时寄存器数据、局部属性不适合高速
[单片机]
基于ARM Linux的图像采集与蓝牙传输
嵌入式Linux系统具有可移植性好、网络功能强、优秀的GNU编译工具、免费的开放源代码等优点。S3C2410处理器是一款采用ARM920T结构,内部资源非常丰富的32位嵌入式处理器。USB摄像头具有低廉的价格,良好的性能,加上Linux下有V4L支持对其编程,很容易集成到嵌入式系统中。蓝牙技术是目前被认可的短距离无线通信技术,广泛应用于手机、电脑以及汽车免提系统。 本文介绍基于嵌入式Linux的USB图像采集系统,并通过构建好的嵌入式Linux下的蓝牙环境将采集到的图片传送到蓝牙手机上,实现监控功能。 1 软硬件平台概述 系统硬件平台如图1所示。该平台软件上采用嵌入式Linux操作系统;硬件上采用Samsung公司的S3C2
[应用]
ARM推动物联网设备生态链创新
在亚洲,中国科技界的几家领导品牌正陆续借助ARM mbed 物联网设备平台推出许多实际应用的解决方案。上海世界移动大会 (MWC Shanghai)正是一个绝佳时机,让我们可以开始看到商业可用的IoT设备如何将智能创新元素带入品牌体验。 两大关键趋势: 家用安全启用语音人工智能 协议栈认证让创新者迅速将产品推向市场 领先的安全技术,用于语音AI的智能家庭IoT体验 当前物联网时代最重要的趋势之一,是能针对消费电子产品及服务型企业提供更具价值的新客户接触点,便是在物联网设备中扩展语音AI功能。亚太区是该趋势很重要的一个市场,到2021年,在亚洲和大洋洲地区,预估将有超过47%具有声音AI功能的设备。ARM mbe
[网络通信]
Cadence优化全流程数字与签核及验证套装
楷登电子(美国Cadence公司,NASDAQ: CDNS)今日宣布,其全流程数字签核工具和Cadence®验证套装的优化工作已经发布,支持最新Arm® Cortex®-A75和Cortex-A55 CP,基于Arm DynamIQ™技术的设计,及Arm Mali™-G72 GPU,可广泛用于最新一代的高端移动应用、机器学习及消费电子类芯片。下面就随手机便携小编一起来了解一下相关内容吧。 为加速针对Arm最新处理器的设计,Cadence为Cortex-A75和Cortex-A55 CPU量身开发全新7nm快速应用工具(RAK),包括可实现CPU间互联和3级缓存共享的DynamIQ共享单元(DSU),以及专为Mali-G72 GP
[手机便携]
基于μC/OS-II嵌入式操作系统的TCSC实验控制器前置单元设计
可控串联补偿( TCSC) 是柔性交流输电系统( FACTS)概念提出后的第一个FACTS装置。由于TCSC直接串入输电线路,可以连续、快速、大范围地调节线路阻抗(本身的阻抗从容性到感性变化) ,和其自身的数据采集与监控( SCADA)系统相配合,可以实现远方阻抗和功率潮流调节,平息地区性功率振荡,提高系统暂态稳定性,抑制次同步谐振。本文通过一个在研项目——福建-华东电网互联的可控串补研究,详细介绍了可控串联补偿( TCSC)实验控制器的前置单元部分设计,以便于为实际决策提供完整准确的实验数据。 TCSC的稳态特性分析电路模型 TCSC的基本结构是固定的串补电容C并联一个由双向晶闸管(实际也可把两个单向晶闸管并联反接在一起
[嵌入式]
ARM芯片的地址重映射
映射就是一一对应的意思。重映射就是重新分配这种一一对应的关系。 ​ 我们可以把存储器看成一个具有输出和输入口的黑盒子。如下图所示,输入量是地址,输出的是对应地址上存储的数据。当然这个黑盒子是由很复杂的半导体电路具 现的,具体的实现的方式我们现在不管。存储单位一般是字节。这样,每个字节的存储单元对应一个地址,当一个合法地址从存储器的地址总线输入后,该地址对应 的存储单元上存储的数据就会出现在数据总线上面。 图1 普通的单片机把可执行代码和数据存放到存储器中。单片机中的CPU从储器中取指令代码和数据。其中存储器中每个物理存储单元与其地址是一一对应而且是不可变的。如图1,CPU读取0x00000000地址上存储单元的过程。
[单片机]
<font color='red'>ARM</font>芯片的地址重映射
ARM新推出高效能Cortex-M7处理器
   ARM推出最新的32位元Cortex-M处理器Cortex-M7。(取自www.computerworld.com) ARM宣布推出最新的32位元Cortex-M处理器Cortex-M7,相较于现今效能最强的ARM架构微控制器(MCU),其运算及数位讯号处理(DSP)效能均提升了两倍之多。ARM Cortex-M7处理器锁定高阶嵌入式应用,适用于新世代的汽车、连网装置以及智慧家庭和工厂应用。首批获得ARM Cortex-M7处理器授权的厂商包括Atmel、飞思卡尔与意法半导体。 ARM处理器部门负责人Noel Hurley指出:「Cortex-M7加入Cortex-M系列处理器后,ARM与合作伙伴将能为连网世界提供最具扩
[手机便携]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved