基于ARM920T内核的16/32位RISC嵌入式CPU的解析方案

发布者:泉地水无痕最新更新时间:2018-02-05 来源: eefocus关键字:ARM920T内核  RISC  CPU 手机看文章 扫描二维码
随时随地手机看文章

    1 前言

    在当今后PC时代,嵌入式系统应用得越来越广泛,嵌入式产品充斥着许多领域,日常生活的手机,MP4,PDA等都属于典型的嵌入式系统。在嵌入式系统中,微处理器和操作系统是进行应用开发的基础。在微处理器方面,S3C2410是Samsung公司推出的一款基于ARM920T内核的16/32位 RISC嵌入式CPU,主要面向手持设备以及高性价比、低功耗的应用。在操作系统方面,Windows CE 5.0是由微软提供的一款嵌入式操作系统,在Windows CE 4.2基础上,它又加入了一些新特性以满足市场需求。板级支持包 (Board Support PACkage,BSP)是操作系统的一个组成部分,提供对硬件的支持。BSP的开发在整个产品开发时间上占了很大比例,快速的移植满足产品需求的BSP 在竞争激烈的市场环境里显得很重要。目前已有许多关于S3C2410、Windows CE以及BSP相关的研究报道,文献[1]研究基于s3c2410的GPS通信技术及实现,文献[2]中详尽分析Windows CE的结构,文献[3]中归纳了Windows CE 4.2专用操作系统的定制和裁剪方法,文献[4]则探讨基于DSP嵌入式多媒体应用系统板级支持包的开发。目前关于Windows CE的应用主要采用Windows CE 4.2及以下版本,本文研究基于S3C2410的Windows CE 5.0 BSP移植技术。

    2 Windows CE 5.0及BSP结构分析

    移植基于S3C2410的Windows CE 5.0 BSP,需要分析Windows CE 5.0 及BSP结构。Windows CE 5.0是一款开放的、可升级的32位嵌入式操作系统,具有高可靠性,是一种硬实时嵌入式操作系统,它可以在多种处理器架构(如x86、MIPS、ARM和 SH4)上运行,Windows CE支持ARM体系结构,这是基于S3C2410 处理器进行BSP移植的前提条件。Windows CE 5.0 BSP通常包含以下几部分:Bootloader,OAL(OEM adaptation layer),设备驱动程序,配置文件等。

    BootLoader是加电即运行的一段程序,它初始化硬件,建立系统的内存空间映射,为最终调用系统内核做准备。在Windows CE 5.0系统中,它主要用于下载和启动镜像nk.bin,也就是两种工作模式:启动加载模式:用户最终使用的产品即为该模式;下载模式:镜像首先被bootloader下载到目标机的RAM中,然后被固化到Flash。

    设备驱动程序按照导出的接口不同可分为:本机驱动程序以及流接口驱动程序.本机驱动程序有GEWS.exe加载的鼠标,键盘,触摸屏,显示驱动等。而流接口驱动程序使用一组流函数来实现,通常由DevICe.exe加载,如网卡,声卡,USB等。

    OAL是逻辑上驻留在Windows CE内核与目标设备之间的代码层,在物理上OAL与内核库连接来产生内核可执行文件。OAL简化了操作系统与目标代码之间的通信,OAL代码用来处理中断,记时器,电源管理,通用I/O控制等[5]。

    Configuration File里面包含的是与生成的镜像相关的配置信息。

    移植Windows CE下S3C2410对应的BSP,就是修改Windows CE自带的BSP或者修改硬件平台以前版本的BSP的几个主要组成部分,使得BSP能有效支持硬件系统。

    3 BSP移植

    如果从零开始开发Widows CE 5.0 BSP,则需要相当长的时间。通常的做法是:(1)将自己硬件平台基于Windows CE 4.2及以前版本的BSP移植到Windows CE 5.0系统上;⑵从Windows CE 5.0 BSP中寻找与硬件平台最接近的作为模板,然后再从自己的硬件平台上入手做相应的修改,从而得到可以在自己系统上使用的BSP。本文探讨的BSP移植属于第一种情况。

    本次移植平台采用的是深圳英蓓特公司的EdukitIII实验箱,微处理器是S3C2410,外带64M NAND Flash芯片等相关硬件资源。软件资源有:edukit2410包(Windows CE 4.2版本下的BSP)。

    3.1 bootloader移植

    bootloader的执行流程如下:

    (1)执行startup.s:对CPU,内存控制器,Cache等做一些基本的初始化。

    (2)初始化串口:调用函数OEMInitDebugSerial()来完成。

    (3)初始化平台:调用函数OEMPlatformInit(),主要对所需硬件资源进行初始化,通常包括:以太网控制器(CS8900A)、系统时钟、存储设备以及其他一些外围设备。

    (4)调用函数OEMPreDownload():做一些准备工作如获取IP地址,初始化TFTP连接等。

    (5)执行函数DownloadImage():下载镜像到SDRAM中。

    (6)调用OEMLaunch()函数启动操作映像。

    其中startup.s,OEMInitDebugSerial()可以与OAL共享使用,两函数的修改在OAL移植过程中叙述。

    Bootloader移植主要过程有:

    (1)修改相应的dir,source文件,下面列出部分库路径:

    TARGETLIBS=

    $(_TARGETPLATROOT)lib$(_CPUINDPATH)CSP_arm.lib

    $(_COMMONOAKROOT)lib$(_CPUDEPPATH)eboot.lib

    $(_COMMONOAKROOT)lib$(_CPUINDPATH)cs8900dbg.lib

    其中csp_arm.lib这个库只存在于Windows CE 4.2的$(_PUBLICOAKROOT),是ARM体系结构链接库之一,在Windows CE 4.2系统下位于PUBLIC目录,而在Windows CE 5.0系统下存在于PLATFORM,导致编译系统找不到该库文件,因此,修改这个库的链接路径,使得Platform builder这个编译系统能够找到这个链接库。

    (2)修改makefile.inc,因为该文件指定生成eboot.bin(Ethernet bootloader镜像)所需要的文件以及拷贝eboot.bin到releasedir目录,其中:

    romimage $(_TARGETPLATROOT)ebootoot.bib

    为生成生成eboot.bin所需要的配置文件,否则,系统通过编译却无法生成eboot.bin.

    (3)修改boot.bib,使其不与config.bib中的内存分配造成冲突。

    (4)改进eboot,因为eboot烧写NK.BIN(OS镜像)的时候会查找BINFS分区,然后把下载的image烧写到BINFS分区。如果没有找到现存的BINFS分区,eboot会低格NAND FLASH,并创建MBR(main boot record),在MBR中有分区表。目前最多支持4个分区,而BINFS分区的大小是以NK.BIN展开的大小按bLOCk对齐,所以会出现个问题,当修改过重新生成的NK.BIN比之前写进NAND FLASH的IMAGE大并且超出block对齐的时候,将会导致烧写新的NK.BIN失败,我们可以通过每次下载烧写NK.BIN前先低格NAND FLASH来解决这个问题,但显然这不是妥善的解决方法,增加用户使用复杂度,所以我们可以把BINFS分区的大小固定,而这个固定的大小可以参考生成 NK.BIN的config.bib中定义的ROMSIZE,这样无论NK怎么修改,BINFS一经创建无需更改,eboot把NK写进NAND FLASH之后,会把剩余的FREE空间创建一个FAT分区,如果我们要实现HIVE REGISTRY就可以把这个分区mounts成MountAsBootable。

    3.2 OAL移植

    OAL的移植过程中,OEM主要实现以下几个函数:Startup.s,调试串口函数,OEMInit函数,系统时钟函数,中断处理函数等。

    (1)修改Startup.s,此函数为OS启动时第一个要调用的函数,也是OEM要实现的重要函数之一,主要完成的功能是:将CPU初试化到一种已知的状态;并调用内核初始化函数kernelstart。Startup.s需要修改,修改后的部分代码如下:

    ……

    ldr r0, = 0X4A000008

    ldr r1, = 0xffffffff ; 禁止所有中断

    str r1, [r0]

    ldr r0, = 0X4A00001C

    ldr r1, = 0x7ff ; 禁止所有子中断

    str r1, [r0]

    ……..

    add r0, pc, #g_oalAddressTable - (. + 8)

    bl KernelStart //跳转到KernelStart

    (2)修改串口调试函数。执行完Startup.s,系统就跳转到Kernelstart函数,位于private目录,该函数第一个任务就是初始化串调试口,否则,就无法进行后面的调试工作。其中OEMReadDebugByte, OEMWriteDebugByte, OEMWriteDebugString不用做修改,需要注意的是OEMInitDebugSerial,选UART0,UART1的寄存器配置不一样,若选用UART0,使用配置:

    s2410IOP->rGPHCON &= ~((3 << 4) | (3 << 6));

    s2410IOP->rGPHCON |= ((2 << 4) | (2 << 6));

    而选择UART1,则使用配置的是:

    s2410IOP->rGPHCON &= ~((3 << 8) | (3 << 10));

    s2410IOP->rGPHCON |= ((2 << 8) | (2 <<10));

    (3)实现OEMInit(),该函数将调用以下函数:OALCacheGlobalsInit(),OALIntrInit(),OALTimerInit(),OALKitlStart()来初始化Cache Global,中断,时钟,启动KITL,实现代码如下:

    void OEMInit()

    {

    OALCacheGlobalsInit();// 初试化cache globals

    if (!OALIntrInit()) {

    OALMSG(OAL_ERROR, (

    L"ERROR: OEMInit: faiLED to initialize interrupts "

    ));

    } // 初试化中断

    OALTimerInit(1, S3C2410X_PCLK/2000, 0); // 初始化时钟

    OALKitlStart();// 初始化KITL

    }

    (4)实现OALTimerInit(),该函数用于初始化OS TIMER,设置每毫秒产生一个System tick,为系统计数,触发进程调度。由CPU的运行主频和硬件定时器资源来确定,执行过程有:初始化时钟状态全局变量,初始化高分辨率时钟函数指针,使能TIMER。

    (5)实现中断处理处理函数:OALIntrInit(),该函数通常先初始化中断映射表,因为WINCE为了模块化,把平台相关物理中断号和系统中断号建立映射。然后清除外部中断,内部中断等。

    3.3 驱动移植

    以触摸屏为例,来探讨Windows CE 5.0系统驱动程序移植。这里以三星公司ARM9内核芯片S3C2410触摸屏接口为基础,通过外接4线电阻式触摸屏构成硬件基础,整个触摸屏由横向电阻线和纵向电阻线组成。触摸屏驱动的主要函数组成有:

    TSP_Poweron 该函数将执行触摸屏的一些初始化,主要是寄存器的配置。

    DdsiTouchPanelEnable:使能DDSI接口,使得硬件能将流数据提供给DDSI接口,就可以实现触摸的操作了。

    DdsiTouchPanelSetMode:模式设置函数,设置触摸屏是高采样率还是低采样率

    DdsiTouchPanelGetPoint :触摸屏进行采样函数

    TSP_CalibrationPointGet:坐标转换函数,该函数实现将从AD采样植转换成坐标。

    移植主要过程:

    (1)修改source文件,要添加如下库文件:

    TARGETLIBS=$(_COMMONSDKROOT)lib$(_CPUINDPATH)coredll.lib

    SOURCELIBS=

    $(_COMMONOAKROOT)lib$(_CPUINDPATH) ch_cal.lib

    $(_COMMONOAKROOT)lib$(_CPUINDPATH) chmdd.lib

    因为这个驱动在Windows CE 4.2下面是在Public目录,而这里将该触摸屏移到了Platform下面,在Windows CE4.2下面是没有以上三条链接库,但Platform,Public编译路径,先决条件都不同。因此引用的库不一样。

    (2)删除如下库文件:

    $(_TARGETPLATROOT)lib$(_CPUINDPATH)drvlib.lib

    该库在Windows CE 4.2系统下为触摸屏与音频共用库,但在Windows CE5.0系统下,这个库已经不是必要的并且已经不存在了,所以删除掉,否则系统会出编译错误。

    (3)修改platform.bib,将我们移植过来的驱动dll包含到nk.bin中

    (4)修改platform.reg,其中CalibrationData是触摸屏的一个参数:

    [HKEY_LOCAL_MACHINEHARDWAREDEVICEMAPTOUCH]

    "MaxCalError"=dword:7

    portrait

    "CalibrationData"="517,610 897,934 142,936 129,290 891,285 "

    其他驱动的过程与触摸屏类似。

    3.4 移植小结

    此次移植是升级BSP,而硬件上基本没有变化,因此很多代码不需做修改即可使用,通过以上移植,不难发现此类移植BSP过程中所要做的工作主要在以下几个方面:

    (1)修改dir文件,在dir文件中指定了当前目录哪些文件夹被系统编译,编译器根据dir层层搜索,而移植BSP不可避免的带来了目录的变化,通过修改dir来指定新的编译路径。

    (2)修改sources文件,在sources文件中,指定了编译类型有PLATFORM,OAK;编译的时候引用的库sourcelib,targetlib不一样,移植的时候一定得注意。目标文件类型有Library,Dynlink,program;include字段包含的则是编译时候所需要的头文件目录。有个比较特殊的sources是位于Platform(例如SMDk2410)下的sources.cmn,它包含了该平台的通用库,头文件路径,这个文件在移植过程中需要修改的,否则,编译出错。

    (3)修改platform.bib,platform.reg等文件,因为这两个文件决定了镜像中包含哪些模块(dll)以及注册表相关信息,驱动移植的过程中,每个模块的改动都需要修改这两个配置文件。

    (4)驱动源文件中的头文件的修改以及函数,变量修改等,这些依据编译时候出现的错误来确定。

    除此之外,各部分的移植还需特别注意的地方有:

    Bootloader部分:因为bootloader下载,烧写,启动镜像过程会涉及到内存地址的问题,各种入口地址不能出错误,以及内存超出范围,冲突都需要特别小心。尤其是g_oalAddressTable这个表,这个表定义了物理地址虚拟地址之间的转换以及内存的大小,如果设置不正确,将出现校验错误,下载失败或者镜像无法启动等错误。

    OAL部分:startup.s以及OEMInitDebugSerial两函数需要特别注意,这两个主要是初始化硬件及串口,这是系统运行及驱动调试的基础,如果硬件配置以及调试串口有改变,则需要适当的修改。此次BSP移植,因硬件平台没有变化,因此OAL部分很多代码无须修改即可使用。

    驱动部分:Windows CE4.2与Windows CE5.0的结构,库有了很大的改变,因此需要修改引用库路径,以及头文件的引用路径,大部分驱动都将会遇到这样的问题。

    4 结束语

    本文创新点:通过对BSP结构分析,将具体平台的Windows CE 4.2 BSP移植到Windows CE 5.0版本,包括移植bootloader,OAL,驱动程序,使之能够通过编译并生成镜像,已经能在平台上成功运行。通过这次移植,使笔者体会到BSP 移植是一个挺复杂,烦琐的过程,因Windows CE 5.0跟Windows CE 4.2 BSP包的组织结构不同,导致很多链接库无法找到或者是这些库已经被替换,删除,只有耐心的根据这些错误提示来定位,有时候也需要去makefile里去找答案。不过移植BSP比重新开发BSP更加节省开发时间,从而缩短产品的研发。


关键字:ARM920T内核  RISC  CPU 引用地址:基于ARM920T内核的16/32位RISC嵌入式CPU的解析方案

上一篇:基于S3C2410的串行外围设备接口SPI及Linux下嵌入式驱动的实现
下一篇:基于LPC22EB06I实验平台上的BootLoader改进方法

推荐阅读最新更新时间:2024-03-16 15:54

珠海昇生微推出采用RISC-V的面向多节电池管理用MCU
日前,在第二届滴水湖RISC-V论坛上,珠海昇生微电子有限责任公司创始人、CEO 阳昕介绍了昇生微的新款MCU SS26L1X,这是一款面向多节电池移动设备控制管理的MCU。 阳昕介绍道,昇生微的RISC-V一共规划两个系列,一个是全自研的低功耗/高能耗比系列AndRISC-V0内核,另外一个则是合作开发的高算力特色指令系统AndRISC-V4。通过这两大系列,“把RISC-V“向上向下”的可拓展性优势利用好”。 他坦承的表示,如今在Arm一统天下的局面下,客户对于RISC-V的迁移会存在顾虑,但是昇生微经过了反复权衡,认为RISC-V是在生态普适性和国产自主可控之间非常好的平衡。考虑到昇生微在消费电子产品落地、客户群以及
[物联网]
珠海昇生微推出采用<font color='red'>RISC</font>-V的面向多节电池管理用MCU
信产部明确发展通用CPU和千万亿次计算机系统
根据近日信产部公布的《信息产业“十一五”规划》,在“重大工程”项目明确指出,“研究先进的计算机体系结构,设计开发具有自主知识产权的高性能通用CPU,研制千万亿次高性能计算机系统,实现万亿次高性能计算机产业化。” 龙芯为我国首枚通用CPU验证芯片,龙芯2E为我国第一个通过科技部863项目鉴定的高性能通用CPU。在中国自主芯片的道路上,曾经呈现多家争鸣的格局,但是上海交大汉芯造假、方舟科技搁置承接的863项目、挪用科研资金的事件严重打击了民众和舆论对于自主研发的信心。 目前比较有代表性的国产超级计算机系统均使用国外CPU,如上海超级计算机中心使用的曙光4000A超级计算机,采用2560颗AMD皓龙CPU,运算速度达10万亿次;荣获2
[焦点新闻]
Arm老乡UltraSoC获融资,携RISC-V等架构的分析技术来华
  与 ARM 一样发源于英国剑桥,这家做SoC嵌入式分析的IP公司尽管只有二十几人,但刚刚获得了600万美元的风投。不久前,该公司信心满满地来中国,参加了中国系列活动,例如在一年一度的ICCAD(中国集成电路设计业年会)2017上露面。下面就随嵌入式小编一起来了解一下相关内容吧。   这家公司就是 UltraSoC ,首席执行官Rupert Baines先生在ICCAD期间向电子产品世界记者介绍了RISC-V及该公司的产品。    RISC-V是CPU界的Linux    UltraSoC 的一大亮点是支持RISC-V,也是RISC-V联盟的活跃成员。据悉,现在RISC-V发展很快,已有一些客户用RISC-V做服务器、分布
[嵌入式]
13-HAL库DMA系统总结
1.间接 DMA:Direct Memory Access,直接存储访问,实现数据在外设与存储器或存储器之间高速访问,数据移动过程无需CPU操作控制,因此可以大大解放CPU负担。 外设(ADC、SPI、I2C、DCMI等外设的数据寄存器),存储器(片内SRAM、外部存储器、片内Flash等等)。外设到存储器,例如将AD转换的数据转移到所定义的存储区中。存储器到外设多用于外设的发送通信,例如串口不定长数据的输入输出。 STM32F7xx系列有2个DMA控制器,每个控制器具有8个数据流(stream),每个数据流有8个通道(channel),对应如下: 每个外设请求占用一个数据流通道,相同外设请求可以占用不同数据流通
[单片机]
13-HAL库DMA系统总结
关于STM32的CPU的使用率~裸机不带系统
1. 如果你不跑操作系统,CPU肯定一直都是100%使用的,哪怕你里面是延时等待,CPU也是一直在执行空语句nop,因为STM32里面是有一个CPU。 2.对于stm32总是百分百。只是有多少时间空闲,多少时间干活! 3. 楼主的意思是实际CPU用来干正事的时间,在整个时间里的比例,打个比方,如果工作50mS,再等待200mS,完成一个大循环,那么CPU的使用率就是20%。 如果楼主的程序是以大循环方式做的,那么在进入等待前把一个IO口拉低,等待结束,开始工作,把IO口拉高,那么占空比就是使用率,当然这是在各种中断不是很频繁,而且中断里处理的事情很少的情况下有用,我经常这么估算MCU的速率富余度的,然后据此设置一个
[单片机]
比特币「挖矿」强过CPU 高端显示适配器疯涨40%
虚拟货币比特币 价格暴涨,却意外让高端显示适配器价格疯涨,近 2 个月上涨了 25-40%,主因是有人大量购买显示适配器用来「挖矿」比特币,因为显示适配器「挖矿」的效果强过 CPU。 中新网 21 日援引《北京青年报》报导,市场上的主流显示适配器主要来自 AMD(AMD-US) 和 NVIDIA(NVDA-US),分别被称为 A 卡和 N 卡。 但供不应求导致价格狂飙。 从 6 月份开始,A 卡几乎断货,N 卡价格飙高,NVIDIA1070 型号 8G 显示适配器已卖到 3700 元 ,比 2 个月前涨了 1000 多元;NVIDIA1060 型号的显卡现在售价为 2600 元 ,比 2 个月前涨了 600 多元。 目前市面
[手机便携]
多核编程的几个难题及其应对策略
随着多核CPU的出世,多核编程方面的问题将摆上了程序员的日程,有许多老的程序员以为早就有多CPU的机器,业界在多CPU机器上的编程已经积累了很多经验,多核CPU上的编程应该差不多,只要借鉴以前的多任务编程、并行编程和并行算法方面的经验就足够了。 我想说的是,多核机器和以前的多CPU机器有很大的不同,以前的多CPU机器都是用在特定领域,比如服务器,或者一些可以进行大型并行计算的领域,这些领域很容易发挥出多CPU的优势,而现在多核机器则是应用到普通用户的各个层面,特别是客户端机器要使用多核CPU,而很多客户端软件要想发挥出多核的并行优势恐怕没有服务器和可以进行大型并行计算的特定领域简单。 串行化方面的难题 1)加速系数 衡
[单片机]
多核编程的几个难题及其应对策略
英特尔采取措施阻挠Nvidia收购VIA
  3月21日消息,据台湾媒体报道,来自主板业界的消息人士透露,英特尔将不向Nvidia开放下一代产品的相关技术信息,以此阻止Nvidia收购X86架构通用CPU厂商威盛(VIA)。   AMD收购了ATi之后,拥有了CPU、芯片组与显示芯片等完整的平台,Nvidia虽然显示芯片很不错,但由于没有处理器,在技术规格上受制于处理器厂商,虽然现在Nvidia的财务状况还不错,但不少人士预计2009年Nvidia将面临前所未有的瓶颈。   基于自身发展的考量,Nvidia开始同威盛谈判,希望能收购或者合并。据国外媒体报道,双方目前洽谈中的方案包括三种:Nvidia与威盛结成战略同盟;Nvidia收购威盛的处理器业务;Nvidia完全
[焦点新闻]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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