ARM7TDMI-S在嵌入式系统中的Bootloader代码设计

时间:2020-10-07 15:48:38 理工毕业论文 我要投稿

ARM7TDMI-S在嵌入式系统中的Bootloader代码设计

摘要:ARM7TDMI-S是ARM公司设计的一款32位精简指令集处理器内核,LPC210x系列是飞利浦半导体公司生产的基于ARM7TDMI-S内核的芯片。在嵌入式系统设计中,针对嵌入式处理器和操作系统的Bootloader代码的设计是一个难点。本文根据用LPC2106进行嵌入式系统设计的实际经验,总结出基于ARM7TDMI-S内核的嵌入式处理器芯片的Bootloader代码设计的一般流程;给出LPC2106芯片在基于μC/OS-II操作系统的嵌入式应用中,BootLoader程序的详细设计流程及其中的一些关键技术和代码。

引言

芯片的Bootloader代码(即启动代码)就是芯片复位后进入操作系统之前执行的一段代码,主要是为运行操作系统提供基本的运行环境,如初始化CPU堆栈、初始化存储器系统等。Bootloader代码与CPU芯片的内核结构、具体芯片和使用的操作系统等因素有关。其功能有点类似于PC机的BIOS(Basic Input/Output System,基本输入输出系统)程序,但是由于嵌入式系统的软硬件都要比PC机的简单,所以它的`Bootloader代码要比BIOS程序简单得多。

嵌入式系统被定义为:以应用中为心,以计算机技术为基础,软件硬件可裁剪,适用于系统对功能、可靠性、成本、何种、功耗有严格要求的专用计算机系统。嵌入式系统的核心部件是嵌入式处理器。随着嵌入式系统在人们日常生活中的广泛运用,嵌入式处理器得到前所未有的飞速发展。基于ARM核的嵌入式处理器芯片种类繁多。由于ARM公司只设计内核的不生产具体的芯片,即便是基于同一种内核,不同厂家生产的芯片差别很大,因此不易编写出统一的Bootloader代码。ARM公司针对这一问题而采取的策略是,不提供完事的Bootloader代码(ARM公司的开发工具ADS提供了一些功能代码),Bootloader代码不足的部分由芯片厂商提供或者由用户自己编写。飞利浦公司没有提供LPC210x系列的Bootloader代码,所以用户只能自己编写Bootloader代码。

1 ARM7TDMI-S和LPC210x

ARM7TDMI-S是目前比较低端的ARM核—ARM核不是芯片,它与其它部件如RAM、ROM、片内外设组合在一起才构成实际的芯片。ARM7是用于对成本和功耗都非常敏感的消费应用的低价位、低功耗的32位核。其主要特点如下:冯.诺依曼结构、3段流水线、0.9MIPS/MHz;非常低的功耗;嵌入式ICE-RT(In Circuit Emulation-Real Time,实时在线仿真)逻辑。

LPC2104/2105/2106基于一个支持实时仿真和跟踪的ARM7TDMI-S内核,并带有128KB的高速Flash存储器,128位宽度的存储器接口和独特的加速结构,使32位代码能够在最大时钟速率下运行。由于LPC2104/2105/2106具有非常小的尺寸和极低的功耗,它们非常适合于那些将小型化作为主要要求的应用,例如存储取控制和POS机。带有宽范围的串行通信接口、片内多达64KB的SRAM,由于具有大的缓冲区和强大的处理器能力,它们非常适合于通信网关和协议转换器、软件调制解调器、声音识别以及低端的图像处理。而多个32位定时器、PWM输出和32个GPIO,使它们特别适用于工业控制和医疗系统。LPC2106是LPC210x系列的一种,其它两种为LPC2104/2105。它们都基于ARM7TDMI-S内核。三种芯片唯一的区别就是SRAM的容量大小:LPC2106是64KB,而LPC2104是16KB,LPC2105是32KB。

2 Bootloader代码

2.1 Bootloader代码的作用

嵌入式系统的资源有限,应用程序通常都是固化在ROM中运行。ROM中的程序执行前,需要对系统硬件和软件运行环境进行初始化。这些工作是用汇编语言和C语言编写的Bootloader代码完成的。在ARM处理器的嵌入式系统中,Bootloader代码的作用主要有以下几点:

*初始化CPU各种模式的堆栈和寄存器;