地址重映射在ARM系统中的实现
近年来,随着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所示。
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成功的关键。两种途径可以实现搬
- 使用MMU进行地址重映射的启动代码结构探讨(11-10)
- ARM地址重映射的通俗解释(11-09)
- 基于ARM的嵌入式BootLoader设计与启动过程(05-21)
- 和弦芯片C520的结构与典型应用方案(04-17)
- 基于uCLinux和ARM7的网络通信设计(04-12)
- 嵌入式系统flash接口电路的实现(03-30)