地址重映射在ARM系统中的实现

发布者:中原读书客最新更新时间:2013-04-12 来源: dzsc关键字:地址重映射  S3C4510B  异常中断 手机看文章 扫描二维码
随时随地手机看文章

近年来,随着32位芯片制造技术的不断完善,制造成本不断降低,国内的32位MCU市场也开始火爆起来。越来越多的工程师开始将开发目光从8位转移到32位微处理器上,基于32位MCU的产品如雨后春笋般层出不穷,应用领域涵盖了掌上设备、家用电器、网络设备、无线通信、工业控制等。在32位微控制芯片领域,ARM架构的芯片占了近70%的市场。本文中所用到的处理器正是Samsung公司生产的基于ARM架构的S3C4510B。

1 S3C4510B简介

S3C4510B是一款基于以太网系统的高性价比、高性能的16/32位RISC微处理器。芯片部集成了8KB的Cache/SRAM和Ethernet控制器,减少了整个系统的成本。片外可扩展ROM、Flash、SDRAM等存储芯片,可以移植μClinux等复杂的操作系统。利用操作系统完善的TCP/IP协议栈充分发挥芯片的网络功能

S3C4510B芯片内部没有程序存储器,所有程序都被存储在片外扩展的ROM和Flash中。开始启动时,存有启动代码的ROM或Flash将被映射为0x00地址,系统从此开始运行。但在实际应用中,为提高系统的实时性,加快代码的执行速度,系统启动后程序往往要被搬移到RAM中,因为RAM的存取速度要比ROM快得多,这样大大提升系统的性能。由于S3C4510B芯片中的异常中断入口地址被固定在0x00开始的8个字中,系统只能将地址空间重新分配,把RAM映射到0x00地址处,这正是Remap的原因所在。

S3C4510B内部有几个特殊寄存器,用于实现地址空间和芯片内外存储介质的映射。这几个寄存器的简介如下:

SYSCFG:设置特殊寄存器的起始地址和片内SRAM的起始地址。

EXTDBWTH:设置各Bank寄存器所映射芯片的数据线宽度。

ROMCON0~ROMCON5:设置系统内片扩展ROM和Flash的起始和终止地址。

DRAMCON0~DRAMCON3:设置系统内片外扩展RAM的起始和终止地址。

S3C4510B芯片内特殊寄存器段的物理地址为0x3ff0000,各特殊寄存器的偏移地址详见S3C4510B的技术手册。

2 S3C4510B系统中Remap的实现

地址空间的重新分配,与处理器的硬件结构紧密相关。总体来说,32位系统中的地址重映射机制可以分为两种情况:一类是处理器内部专门的寄存器可以完成Remap,这样只需将Remap寄存器的相应位置1,由硬件逻辑来完成地址的重新映射,如Atmel AT91xx系列;另一类没有专门的Remap控制寄存器,需要重新改写处理器内部用于控制Memory起止地址的Bank寄存器,来实现Remap过程。S3C4510B属于第二种情况。

2.1 硬件系统结构及地址分配

为例于对地址重映射的过程进行分析,图1给出了本人用于测试的基本S3C4510B的系统硬件结构。文中给出的所有流程及代码都经过了测试。

此系统是以Samsung公司给出的测试板为参考建立的,其中ROM的容量为512KB,8位数据总线,Remap前的地址范围为0x0000000~0x0100000,Remap后的地址范围为0x1000000~0x1100000;RAM的容量为16MB,32位数据总线,Remap前的地址范围为0x0100000~0x100000,Remap后的地址范围为0x0000000~0x1000000;Flash的容量为2MB,16位数据总线,Remap前后地址不变,均为0x1100000~0x1300000。Remap前后的地址映射关系如图2所示。[page]

2.2 系统启动过程及Remap实现

系统的地址重映射应该在系统的启动中完成,以下是S3C4510B的Remap启动过程。

①系统特殊寄存器的设置。主要是配置如上所述的用于实现地址空间和芯片内外存储介质映射的寄存器,在本系统中配置如下:

SYSCFG=0x87ffff90

EXTDBWTH=0x3001

ROMCON0=0x01000060

ROMCON1=0x13044060

DRAMCON0=0x11004060

②初始化系统堆栈。在ARM7的体系结构中共有七种工作模式,不同的模式有不贩堆栈指针,互不干扰。各模式对应于不贩异常中断,至于哪些模式的堆栈需要初始化取决于用户使用了哪些中断,以及系统需要处理些异常类型。一般来说,管理者(SVC)堆栈必须设置,如果使用了IRQ中断,则IRQ堆栈也必须设置。有一点需要注意的是,为保证Remap后程序运行正常,所有堆栈应设置在RAM的高端地址中。

③初始化I/O口、UART、定时器、中断控制器以及系统中所用到的其它资源。在初始化异常向量表或修改异常向量表中的入口地址前,要关掉所有中断。


④异常向量表的初始化。将民常中煌怛处理程序的入口地址写入RAM中相应的异常向量。必须保证的是,异常向量表绝对不会被从ROM搬移到RAM中的代码和数据所覆盖,为此,异常向量表一般被定义在RAM中的高端地址中。

⑤程序代码及数据的搬移。Remap后,RAM被映射到0x0000的地址空间,ROM则被移到高端地址上。为保证Remap后程序能够瞠运行,ROM中的代码和数据必须地址不变地被移到RAM中。这是Remap成功的关键。两种途径可以实现搬移。

一种是不管实际的代码空间有多大,直接将ROM地址空间整个搬移到RAM中。当然,这种方法并不适合在真正的启动代码中使用,但在做初步的Remap测试时,可以用来检验堆栈及异常中断的设置是否合理。

另一种方法较复杂,它使用了SDT链接器ARMLink产生的定位信息,仅把RO风吹草动的有效代码和数据段到RAM中。ARMLink将编译后的程序链接成ELF文件。映像文件内部共有三种输出段:RO段、RW段和ZI段。这三种输出段分别包含了只读代码及包含在代码段中的少量数据、可读写的数据、初始化为0的数据,ARMLink同时还产生了这三种输出段的起始和终止定位信息:Image$$RO$$Base、Image$$RO$$Limit、Image$$RW$$Base、Image$$Limit、Image$$Linit和Image$$ZI$$Limit。可以在程序中使用这些定位信息。将ROM中的代码和数据搬移到RAM中,其实现代码如下:

数据定义:

BaseOfROM DCD Image$$RO$$Base

TopOfROM DCD Image$$RO$$Limit

BaseOfBSS DCD Image$$RW$$Base

BaseOfZero DCD Image$$ZI$$Base

EndOfBSS DCD Image$$ZI$$Limit

源程序:

;将ROM中的程序搬移到RAM中,重映射后的地址不变

adr r0,ResetEntry ;ROM中程序起始地址

mov r3,#(RamBaseAddr<<16) ;RamBaseAddr=0x100

Idr r1,BaseOfROM

Idr r2,TopOfROM

Add r1,r1,r3

Add r2,r2,r3

0

Idmia r0!,{r4-r11}

Stmia r1!,{r4-r11}

Cmp r1,r2

Bcc%B0

;将RW段中预初始化的变量搬移到RAM中

sub r1,r1,r2

sub r0,r0,r1 ;将r0指向RO段的结束,即RW段的开始

ldr r1,BaseOfBSS

Idr r2,BaseOfZero

Add r1,r1,3

Add r2,r2,r3

1 ;基于局部标号的相对跳转,PC+偏移地址,产生与位置无关的代码

cmp r1,r2

ldrcc r4,[r0],#4

strcc r4,[r1],#4

bcc %B1[page]

;接着把ZI段搬移到RAM中,并其将初始化为0

mov r0,#0

Idr r2,EndOfBSS

Add r2,r2,r3

2

cmp r1,2

strcc r0,[r1],#4

bcc%B2

⑥地址的重新映射。S3C4510B中的Remap过程其实很简单,只需重新设置ROMCON0~ROMCON5和DRAMCON0~DRAMCON3。在本系统中只需重新设置ROMCON0和DRAMCON0。

源代码:

;/*内存控制寄存器重新设置-存储空间重新映射地址空间*/

EXPORT RemapMemory

RemapMemory

mov r12,r14

adr r0,RemapMem

ldmia r0,{r1-r11}

ldr r0,=ROMCON0 ;ROMCON0为Bank寄存器的起始地址

stmia r0,{r1-r11}

bl ExceptionTalbeInit ;中断向量表重新初始化

mov pc,r12

RemapMem

DCD &11040060 ;/*ROMCON0 0x1000000~0x1100000*/

DCD &10000398 ;/*DRACON0 0x0~0x1000000*/

⑦进入C代码空间,开始主程序的运行。此时代码应该运行于RAM中。


上面的步骤可以根据实际需要进行适当的添加或删节。值得注意的是:汇编生成的代码应该是与位置无关的代码,即代码在运行期间可以被映射到不同的地址空间,其中的跳转指令都是基于PC寄存器的相对跳转指令。基于PC的标号是位于目标指令前或者程序中数据定义伪操作前的标号,这种符号在汇编时将被处理成PC值加上或减去一个数字常量。

3 异常中断的处理

在Remap的启动代码中,需要特别注意的是异常中断的处理。在S3C4510B中,异常中断的入口地址是固定的,按表1次序排列。

表1

异常类型 工作模式 正常地址
复位 管理 0x00000000
未定义指令 未定义 0x00000004
软件中断(SWI) 管理 0x00000008
预取中止 中止 0x0000000
数据中止 中止 0x00000010
预留 - 0x00000014
IRQ(中断) IRQ 0x00000018
FIQ(快速中断) FIQ 0x0000001

地址重新映射之后,入口地址被映射到RAM中,中断处理代码也被搬移到RAM地址空是。此时,中断响应和中断处理的速度都将大大加快,这将有利于提高整个系统的实时性。异常中断向量表的设计结构如图3所示。

下面是各部分的源代码(以IRQ异常中断为例)。

异常向量表的定义:(系统初始化时,将异常处理代码入口地址写入异常中的向量表)

_RAM_END_ADDR EQU 0x01000000 ;重映射后RAM的终止地址

MAP (_RAM_END_ADDR-0x100)

SYS_RST_VECTOR # 4

UDF_INS_VECTOR # 4

SWI_SVC_VECTOR # 4

INS_ABT_VECTOR # 4

DAT_ABT_VECTOR # 4

RESERVED_VECTOR # 4

IRQ_SVC_VECTOR # 4

FIQ_SVC_VECTOR # 4

异常初始化代码:

b IRQ_SVC_HANDLER ;0x18

IRQ_SVC_HANDLER

SUB sp,sp,#4 ;满递减堆栈

STMFD sp!,{r0}

LDR r0,=IRQ_SVC_VECTOR ;读取中断向量,

;IRQ_SVC_VECTOR=SystemrqHandle

LDR r0,[r0]

STR r0,[sp,#4]

LDMFD sp!,{r0,pc};跳转到异常中断处理代码入口

异常处理入口代码:

SystemIrqHandler

IMPORT ISR_IrqHandler

STMFD sp!,{r0-r12,lr}

BL ISR_IrqHandler ;跳转到C代码中异常中断处理程序ISR_IrqHandler

LDMFD sp!,{r0-r12,lr}

SUBS pc,lr,#4

在如上的结构中,不管系统是否进行了地址的重映射,异常中断向量都可以在运行时动态改变,大大提高了中断处理中的灵活性。中断向量可以在运行时指向不同的异常处理代码入口。

结语

面对实时性要求越来越高的各种应用,不管应用中有没有嵌入式操作系统,Remap都已经成为启动代码中必不可少的一部分。Remap的实现对于操作系统的移植也有重要的意义。Remap决定了系统启动的效率,并对整个系统的实时性和稳定性产生很大影响。因而,对Remap过程的理解和设计,对于那些嵌入式系统的开发人员来说是非常重要的,它从一开始就决定了整个开发过程的最终成败。

关键字:地址重映射  S3C4510B  异常中断 引用地址:地址重映射在ARM系统中的实现

上一篇:采用S3C2410和Linux系统的指纹识别管理系统
下一篇:S3c2410的触摸屏及模数转换

推荐阅读最新更新时间:2024-03-16 13:21

ARM S3C4510B系统的异常中断机制解析
本文介绍了ARM S3C4510B系统的异常中断机制,包括异常中断的分类,响应与返回;中断处理程序的安装与调用;SWI,IRQ中断的实例与关键代码。 随着人们对于电子产品的要求越来越高,以80C51系列为代表的8位处理器系统开始面临越来越多的局限和挑战,人们对于高性能芯片和嵌入式功能的呼声也越来越高。16/32 位的处理器系统得到了前所未有的关注和重视。32位ARM体系系列处理器便是其中的代表。S3C4510B处理器是基于ARM7体系16/32位RISC处理器,内部集成了8KB的CACHE/SDRAM,内嵌EARTHNET控制器,拥有7种处理器模式和内部多线程和外部多处理器的处理器结构。在嵌入式系统中具有重要意义的异常中断技术
[单片机]
ARM <font color='red'>S3C4510B</font>系统的<font color='red'>异常中断</font>机制解析
ARM S3C4510B系统中的异常中断技术
引言   随着人们对于电子产品的要求越来越高,以80C51系列为代表的8位处理器系统开始面临越来越多的局限和挑战,人们对于高性能芯片和嵌入式功能的呼声也越来越高。16/32 位的处理器系统得到了前所未有的关注和重视。32位ARM体系系列处理器便是其中的代表。S3C4510B处理器是基于ARM7体系16/32位RISC 处理器,内部集成了8KB的CACHE/SDRAM,内嵌EARTHNET控制器,拥有7种处理器模式和内部多线程和外部多处理器的处理器结构。在嵌入式系统中具有重要意义的异常中断技术在S3C4510B系统中也体现了ARM体系独有的一些的特点。本文根据S3C4510B系统的特点,分析了该系统中七种异常中断的功能及特点。并给
[单片机]
ARM <font color='red'>S3C4510B</font>系统中的<font color='red'>异常中断</font>技术
基于S3C4510B系统的启动流程及重映射的实现过程
近年来,随着32位芯片制造技术的不断完善,制造成本不断降低,国内的32位MCU市场也开始火爆起来。越来越多的工程师开始将开发目光从8位转移到32位微处理器上,基于32位MCU的产品如雨后春笋般层出不穷,应用领域涵盖了掌上设备、家用电器、网络设备、无线通信、工业控制等。在32位微控制芯片领域,ARM架构的芯片占了近70%的市场。本文中所用到的处理器正是Samsung公司生产的基于ARM架构的S3C4510B。 1 S3C4510B简介 S3C4510B是一款基于以太网系统的高性价比、高性能的16/32位RISC微处理器。芯片部集成了8KB的Cache/SRAM和Ethernet控制器,减少了整个系统的成本。片外可扩展ROM、Fl
[单片机]
基于<font color='red'>S3C4510B</font>系统的启动流程及重<font color='red'>映射</font>的实现过程
【ARM】arm异常中断处理知识点
ARM处理器7种类型异常   按优先级从高到低的排列如下:   复位异常(Reset)   数据异常(Date Abort)   快速中断异常(FIQ)   外部中断异常(IRQ)   预取异常(Prefetch Abort)   软件中断异常(SWI)   未定义指令异常(Underfined instruction) 当异常发生时   处理器会把PC设置为一个特定的存储器地址。   这一地址放在被称为向量表(vector table)的特定地址范围内。   向量表的入口是一些跳转指令,跳转到专门处理某个异常或中断的子程序。   当异常发生时,分组寄存器r14和SPSR用于保存处理器状态。 ARM异常处理器模式   每一种异
[单片机]
基于ARM7核处理器VxWorks系统BSP设计
1 介绍 S3C4510B是三星公司推出的针对嵌入式应用的16/32 位嵌入式处理器,该微控制器专为以太网通信系统的集线器和路由器而设计,具有低成本和高性能的特点, S3C4510B中内置了ARM公司设计的16/32位ARM7TDMI处理器, 可以执行32位的arm指令,也可执行16位的THUMB指令, 并集成了多种外围部件,主要有: ● 时钟频率50MHz ● 内核/IO电压3.3V ● 8KB的Cache/SRAM ● 一个10/100Mbps 以太网控制器,MII接口 ● 两个HDLC通道,每个通道可支持10Mbps ● 两个UART通道 ● 两个DMA通道 ● 两个32位定时/计数器 ● 18个可编程I
[单片机]
基于ARM7核处理器VxWorks系统BSP设计
基于S3C4510B的系统设计
1991 年ARM 公司成立于英国剑桥,主要出售芯片设计技术的授权。目前,采用ARM 技术知识产权(IP)核的微处理器,即我们通常所说的ARM 微处理器,已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场,基于ARM 技术的微处理器应用约占据了32 位RISC 微处理器75%以上的市场份额,ARM 技术正在逐步渗入到我们生活的各个方面。 ARM(Advanced RISC Machines),既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。 ARM 公司是专门从事基于RISC 技术芯片设计开发的公司,作为知识产权供应商,本身不直接从事芯片生产,靠转让设计许可由合
[单片机]
基于S3C4510B的USB主控器驱动设计
在现代社会,嵌入式系统逐渐深入到人们生活的方方面面,各类嵌入式系统产品之间往往通过某种接口进行交互或数据传递。而现在,USB已经成为嵌入式数据交换的最主要的方式,可是各种USB接口的设备都是基于PC机系统的,所以,基于嵌入式系统的USB接口的研究具有实用的价值和意义,特别是起Master作用的HOST端接口的研究。 解决这一问题的根本办法就是在需要使用USB设备的嵌入式系统中扩展USB Host功能模块,使之具有与USB设备进行数据传输的能力。 USB协议按功能分为2部分,USB HOST(USB主协议)和USB SLAVE(USB从协议)分别应用于USB HOST CONTROLLER(USB主控制器)和USB DEVICE(US
[应用]
三星ARM处理器S3C4510B的HDLC通道使用及编程
摘要 三星16/32位ARM处理器S3C4510B是目前在国内应用非常广泛的一种性价比很高的ARM处理器,本文在介绍S3C4510B中HDLC通道结构特点的基础上,详细说明了4510中HDLC通道在DMA收发方式下的工作过程,使用方法和编程中的一些注意事项。 1:S3C4510B简介 S3C4510B(以下简称4510)是韩国三星公司开发的一款基于ARM7TDMI架构的16/32位高性能微处理器。具用丰富的外围接口,如以太网,HDLC等,可灵活配置,适用于多种应用。4510具有以下性能特点: ◆ 8K字节的内部CACHE,也可用作内部SRAM ◆ 两线IIC接口,作为IIC主器件使用 ◆ 以太网控制
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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