历史上的今天
返回首页

历史上的今天

今天是:2025年02月14日(星期五)

正在发生

2018年02月14日 | ARM7启动代码编写的分析与设计

2018-02-14 来源:eefocus

    前 言

    随着生活水平的提高和IT技术的进步,8位处理器的处理能力已经不能满足嵌入式系统的需要了;而16位处理器在性能和成本上都没有很大的突破。并且在8位机的开发中,大多使用汇编语言来编写用户程序。这使得程序的可维护性、易移植性等都受到了极大的挑战。正是基于此,ARM公司适时的推出了一系列的32位嵌入式微控制器。目前广泛使用的是ARM7和ARM9系列,ARM7TDMI内核的ARM7处理器广泛应用于工业控制、仪器仪表、汽车电子、通讯、消费电子等嵌入式设备。本文主要以philips公司ARM7TDMI核的LPC2119为例来分析如何编写ARM7的启动代码。

 

    1、启动代码

    在嵌入式系统软件的开发中,应用程序通常是在嵌入式操作系统的开发平台上采用C语言编写的。然而,在ARM系统上电复位后,需要设置中断向量表、初始化各模式堆栈、设置系统时钟频率等,而这些过程都是针对ARM内部寄存器结构的操作,用C语言编程是很难实现的。因此在转到应用程序的c/c++编写之前,需要用ARM的汇编语言编写启动代码,由启动代码完成系统初始化以及跳转到用户C程序。在ARM设计开发中,启动代码的编写是一个极重要的过程。然而启动代码随具体的目标系统和开发系统有所区别,但通常包含以下部分:

    ·向量表定义

    ·地址重映射及中断向量表的转移

    ·堆栈初始化

    ·设置系统时钟频率

    ·中断寄存器的初始化

    ·进入C应用程序

    下面就结合PHILIPS的LPC2119的启动代码来分析与说明ARM7处理器的启动代码的编写。

    1.1向量表定义

    ARM芯片上电或复位后,系统进入管理模式、ARM状态、PC(R15)指向0x00000000地址处。中断向量表为每一个中断设置1个字的存储空间,存放一条跳转指令,通过这条指令使PC指针指向相应的中断服务程序入口,继而执行相应的中断处理程序。LPC2219的中断向量表和其它基于ARM核的芯片中断向量表较类似,只要注意LPC2219要使向量表所有数据32位累加和为零(0x00000000-0x0000001C的8个字的机器码累加), 才能使用户的程序脱机运行。

    1.2 地址重映射及中断向量表的转移

    ARM7处理器在复位后从地址0读取第一条指令并执行,因此系统上电后地址0必须是非易失的ROM/FLASH,这样才能保证处理器有正确可用的指令。为了加快对中断的处理以及实现在不同操作系统模式下对中断的处理,这就需要重新映射中断向量表、BootbLOCk和SRAM空间的一小部分。ARM具有非常灵活的存储器地址分配特性。ARM处理器的地址重映射机制有两种情况:

    ①由专门的寄存器完成重映射(Remap),只需对相应的Remap寄存器相应位设置即可。

    ②没有专门的Remap控制寄存器需要重新改写用于控制存储器起始地址的块(Bank)寄存器来实现Remap。在LPC2119上的重映射,可以通过存储器映射控制器来实现。实现REMAP操作的程序实现如下:

    MOV R8,#0x40000000; /设置新向量表起始地址/

    LDR R9,=Interrupt_Vector_Table; /读原向量表源地址/

    LDMIA R9!,(R0-R7); /复制中断向量表及中断处理程序的入口地址到RAM中(64字节)/

    STMIA R8!,(R0-R7)

    LDMIA R9!,(R0-R7)

    STMIA R8!,(R0-R7)

    LDR R8,=MEMMAP ; /REMMAP操作/

    MOV R9,#0x02

    STR R9, [R8]

    1.3 堆栈初始化

    启动代码中各模式堆栈空间的设置是为中断处理和程序跳转时服务的。当系统响应中断或程序跳转时,需要将当前处理器的状态和部分重要参数保存在一段存储空间中,所以对每个模式都要进行堆栈初始化工作,给每个模式的SP定义一个堆栈基地址和堆栈的容量。堆栈的初始化有两种方法:第一种方法是结合ADS开发套件中的分散加载文件来定义堆栈。第二种方法是最简单也是最常用的一种就是直接进入对应的处理器模式,为SP寄存器指定相应的值。下面给出了用第二种方法初始化管理模式和中断模式堆栈的程序:

    MSR CPSR_c, #0xD3 ; /切换到管理模式,并初始化管理模式的堆栈/

    LDR SP, Stack_Svc

    MSR CPSR_c, #0xD2 ; /切换到IRQ模式,并初始化IRQ模式的堆栈/

    LDR SP, Stack_Irq

    …

    1.4 系统部分时钟初始化

    时钟是芯片各部分正常工作的基础,应该在进入main()函数前设置。部分ARM7片子内部集成有PLL(锁相环)电路,用户可以用低频率的晶振通过PLL电路获得一个较高频率的时钟。LPC2119内部的PLL电路接受的输入时钟频率范围为10~25MHz,输入频率通过一个电流控制振荡器(CCO)倍增到范围10~60MHz。同时为了使高速的ARM处理器与低速的外设正常通讯和降低功耗(降低外设运行速度使功耗降低),LPC2119又集成了一个额外的分频器。PLL的激活是由PLLCON寄存器控制。PLL倍频器和分频器的值由PLLCFG寄存器控制。对PLLCON或PLLCFG寄存器的更改必须遵循严格的顺序,否则所作更改是无法生效的(在连续的VPB周期内向PLLFEED寄存器写入0xAA、0x55,在此期间中断必须是被禁止的。)

    1.5 中断初始化

    ARM7的向量中断控制器(Vectored Interrupt Controller)可以将中断编程为3类:FIQ、向量IRQ、非向量IRQ。FIQ中断请求的优先级最高,其次是IRQ中断请求,非向量IRQ的优先级最低。VIC具有32个中断请求输入,但在LPC2219中只占用了17个中断输入。对于这17个中断源的IRQ/FIQ选择,由VICIntSelect寄存器控制,当对应位设置位1时,则此中断为FIQ中断,否则为IRQ中断。若再将IRQ中断设置到向量控制寄存器(VICVectCntIn)中,则此中断为向量IRQ中断,否则为非向量IRQ中断。FIQ中断是专门用来处理那些需要及时响应的特殊事件,尽可能地只给FIQ分配一个中断源。

    1.6 进入C应用程序

    至此,系统各部分的初始化基本完成,可以直接从启动代码转入到应用程序的main()函数入口。从启动代码转入到应用程序的实例代码如下:

    IMPORT main

    LDR R0,=main

    BX R0

    2、总结

    一个优秀的启动代码将给应用程序的开发提供一个良好的开发平台。本文中较详细的讨论了启动代码的编写及难点。其中在堆栈初始化过程中要特别的注意两点:

    ①要尽量给堆栈分配快速和高带宽的存储器。

    ②尽量避免过早将处理器切换到用户模式,一般在系统初始化的最后阶段才切换到用户模式(用户模式没有权限通过修改CPSR来进行模式切换)。

    嵌入式系统的迅猛发展,使启动代码的编写成为嵌入式系统开发人员应该具备的能力。本文有助于正在从事嵌入式ARM开发的读者理解启动代码的内涵与编写出适合自己的启动代码。


推荐阅读

史海拾趣

Hi-Tech Resistors Pvt Ltd公司的发展小趣事

机顶盒,全称为数字视频变换盒,是现代家庭娱乐不可或缺的重要设备。从广义上讲,任何与电视机连接的网络终端设备均可视为机顶盒,它们不仅限于接收和转换电视信号,还承载着丰富的娱乐与信息服务功能。

机顶盒的核心功能在于接收并转换来自有线电缆、卫星天线、宽带网络及地面广播的数字电视信号,将其转换为电视机可识别的视频和音频流。这一转换过程确保了观众能够享受到高清乃至4K超高清的画质和震撼的音效,极大地提升了观看体验。此外,机顶盒还集成了诸如电子节目指南、因特网网页浏览等增值服务,让电视机不再仅仅是单向接收信息的设备,而是成为一个能够与用户进行互动的智能终端。

随着技术的发展,机顶盒的种类日益丰富,按主要功能可分为数字卫星机顶盒、有线电视数字机顶盒、IPTV机顶盒等。这些机顶盒不仅满足了用户多样化的观看需求,还通过连接互联网,提供了在线购物、视频点播、游戏娱乐等多元化服务。未来,随着高清、超高清技术的普及以及人工智能、云计算等技术的应用,机顶盒将向智能化、多功能化方向发展,为用户提供更加便捷、个性化的使用体验。

总之,机顶盒作为连接电视与互联网的桥梁,在丰富家庭娱乐生活、提升观看体验方面发挥着重要作用。随着技术的不断进步和市场需求的持续增长,机顶盒行业将迎来更加广阔的发展前景。

Actel公司的发展小趣事

Actel Corporation 是一家曾经在可编程逻辑器件(FPGA)领域有所建树的公司。以下是该公司发展的五个相关故事:

  1. 公司创立与初期发展: Actel Corporation成立于1985年,总部位于美国加利福尼亚州。公司创始人包括Bernard Vonderschmitt等人,致力于研发和生产可编程逻辑器件。最初,Actel专注于开发用于航空航天和国防应用的高可靠性FPGA芯片,以满足对于高度可靠性和耐辐射性的需求。

  2. 技术创新与产品推出: Actel在FPGA技术领域取得了一系列创新成果。公司引入了基于非挥发性技术(NVCM)的可编程逻辑器件,该技术使得FPGA芯片能够在断电后保持配置状态,具有低功耗、高可靠性等优点。Actel的产品涵盖了不同规模和功耗要求的市场,广泛应用于航空航天、通信、工业控制等领域。

  3. 市场拓展与国际化发展: 随着产品线的不断完善和市场认可度的提升,Actel逐步开拓了国内外市场。公司在美国设立了销售和技术支持中心,并与全球各地的合作伙伴建立了合作关系,进一步拓展了国际业务。Actel的产品远销至欧洲、亚洲等地区,赢得了广泛的市场认可。

  4. 并购与重组: 随着FPGA市场竞争的加剧和市场需求的变化,Actel在发展过程中进行了一系列并购和重组。其中最重要的一次是2010年,Actel被Microsemi Corporation收购,成为其子公司。这一并购使得Actel能够借助Microsemi的资源和实力,进一步提升产品竞争力和市场地位。

  5. 终止品牌: 尽管Actel曾经在FPGA市场取得一定成就,但随着时间的推移和市场竞争的加剧,Actel品牌逐渐退出市场。2012年,Microsemi宣布停止使用Actel品牌,并将其产品线整合到Microsemi旗下,标志着Actel品牌的终结。

Chiplus Semiconductor Corp公司的发展小趣事

在快速发展的同时,Chiplus也积极履行社会责任,关注环境保护和可持续发展。公司采用环保材料和节能技术,降低生产过程中的能耗和排放。同时,Chiplus还积极参与社会公益活动,支持教育事业和科技创新,为社会进步贡献自己的力量。

这五个故事从不同角度展现了Chiplus Semiconductor Corp公司的发展历程和成就。作为一家技术领先的IC设计公司,Chiplus始终坚持以客户为中心,以技术创新为动力,不断推动半导体行业的发展。未来,Chiplus将继续秉承初心和使命,为全球客户提供更优质的产品和服务。

Armel Electronics Inc公司的发展小趣事

Armel Electronics Inc公司的创立,源于几位电子工程领域的先驱者对于技术创新和市场前景的敏锐洞察。在创立初期,公司面临资金紧张、市场竞争激烈等多重挑战。然而,凭借对技术的热爱和对市场趋势的准确把握,Armel团队成功研发出了一系列具有竞争力的电子产品,奠定了公司的市场地位。

Avalon Photonics公司的发展小趣事

Avalon Photonics的创立源于一次技术突破。创始人Dr. Smith在光子学领域有着深厚的学术背景,他成功研发出了一种新型的光子探测器,具有极高的灵敏度和稳定性。这一创新技术迅速引起了业界的关注。Dr. Smith看到了商业化的潜力,于是决定成立Avalon Photonics,将这项技术转化为实际产品。初创期的Avalon面临着资金短缺和市场认知度低的挑战,但凭借着技术优势和团队的努力,逐渐在市场上站稳脚跟。

Herley New York公司的发展小趣事

Avalon Photonics深知技术创新是公司发展的核心动力。因此,公司每年都将大量资金投入研发领域,不断推动技术创新。公司研发团队积极探索新技术、新材料,在光子学领域取得了多项重要突破。这些技术创新不仅提升了Avalon产品的竞争力,也为公司在市场上赢得了良好的声誉。

问答坊 | AI 解惑

单片机在熨烫机自动控制系统的应用

 我国有12亿人口的服装消费市场,同时又是服装出口大国,随着近年来成衣市场的需求不断增加,小型的服装生产企业发展非常迅速,对小型熨烫系统的需求量越来越多。原有的小型熨烫机多为手动控制设备,对操作人员的操作经验要求较高,由于操作人 ...…

查看全部问答>

机器人技术

20世纪50年代,为代替人工从事单调、重复的体力劳动或危险的工作,提高产品质量,工业机器人应运而生。从那以后,机器人作为生产自动化的典型代表,在制造业领域获得了巨大成功。 那么什么是机器人呢?从人们一般的理解来看,机器人是具有一些类似 ...…

查看全部问答>

磁保持继电器原理

磁保持继电器,在激磁线圈加电(DC)后吸上, 激磁线圈断电后,在剩磁的作用下,依然保持吸上状态, 如果给激磁线圈加适当的反向电流,消除剩磁的作用,继电器方可释放。 在实际应用中,如只有一线圈很不方便,所以磁保持继电器通常有两个线圈, ...…

查看全部问答>

TMS320LF2407上实现快速傅里叶变换

TMS320LF2407上实现快速傅里叶变换…

查看全部问答>

VxWorks虚拟网卡的疑问

我编写了一虚拟的网卡,通过FPGA实现内存池的分配,通过ifShow()和muxShow()都可以查看到虚拟的网卡设备,此外还有一实际的网卡设备。可是当用socket向虚拟网卡中发送数据时,还是调用的实际网卡的发送和接收函数,没有调到虚拟设备的发送和接收函 ...…

查看全部问答>

如何获取气泡通知的超链接(SHNN_LINKSEL)

刚刚接触MFC 现在要做个气泡通知 ,点击里面的HTML文本超链接可以访问URL 参照MSDN 我写了以下代码 HICON hIcon = NULL; CString myHTML=L\"This is a List Item1 Item2   Clickhereto go to MSNBC. \"; SHNOTIFICAT ...…

查看全部问答>

proteus能当开发板用吗

proteus能当开发板用吗?…

查看全部问答>

求助 我想把传真传来的内容放到本地的数据库中

我想把传真机传来的内容放在本地的数据库中,应该怎么做,没有思路,请各位大侠指点。…

查看全部问答>

请过来人推荐一下

我是单片机初学者,自己学习了MCS-51系列单片机,主要是学习理论,没有实践经验。现在想自己买块开发板先玩玩。主要是实践一下学过的内容,比如串口、定时、计数、键盘、显示等等。请过来人推荐一款合适的51开发板。…

查看全部问答>