嵌入式系统基础之:ARM处理器硬件开发平台
扫描二维码
随时随地手机看文章
ARM是一类嵌入式微处理器,同时也是一个公司的名字。ARM公司于1990年11月成立于英国剑桥,它是一家专门从事16/32位RISC微处理器知识产权设计的供应商。ARM公司本身不直接从事芯片生产,而只是授权ARM内核,再给生产和销售半导体的合作伙伴,同时也提供基于ARM架构的开发设计技术。世界各大半导体生产商从ARM公司处购买其设计的ARM微处理器核,根据各自不同的应用领域,加入适当的外围电路,从而形成自己的ARM微处理器芯片进入市场。
ARM公司从成立至今,在短短几十年的时间就占据了75%的市场份额,如今,ARM微处理器及技术的应用几乎已经深入到各个领域。采用ARM技术的微处理器现在已经遍及各类电子产品,汽车、消费娱乐、影像、工业控制、海量存储、网络、安保和无线等市场。到2001年就几乎已经垄断了全球RISC芯片市场,成为业界实际的RISC芯片标准。图4.3列举了使用ARM微处理器的公司名称。
图4.3ARMIP核用户
ARM的成功,一方面得益于它独特的公司运作模式,另一方面,当然来自于ARM处理器自身的优良性能。ARM处理器有如下特点。
n 体积小、低功耗、低成本、高性能。
n 支持ARM(32位)/Thumb(16位)/Thumb2(16/32位混合)指令集,能很好地兼容8位/16位器件。
n 大量使用寄存器,指令执行速度更快。
n 大多数数据操作都在寄存器中完成。
n 寻址方式灵活简单,执行效率高。
n 指令长度固定。
小知识
常见的CPU指令集分为CISC和RISC两种。
CISC(ComplexInstructionSetComputer)是“复杂指令集”。自PC机诞生以来,32位以前的处理器都采用CISC指令集方式。由于这种指令系统的指令不等长,因此指令的数目非常多,编程和设计处理器时都较为麻烦。但由于基于CISC指令架构系统设计的软件已经非常普遍了,所以包括Intel、AMD等众多厂商至今使用的仍为CISC。
RISC(ReducedInstructionSetComputing)是“精简指令集”。研究人员在对CISC指令集进行测试时发现,各种指令的使用频度相当悬殊,其中最常使用的是一些比较简单的指令,它们仅占指令总数的20%,但在程序中出现的频度却占80%。RISC正是基于这种思想提出的。采用RISC指令集的微处理器处理能力强,并且还通过采用超标量和超流水线结构,大大增强并行处理能力。
4.2.2ARM体系结构简介1.ARM微处理器工作状态ARM微处理器的工作状态一般有三种,并可来回切换。
n 第一种为ARM状态,此时处理器执行32位的字对齐的ARM指令。
n 第二种为Thumb状态,此时处理器执行16位的、半字对齐的Thumb指令。
n 第三种为Thumb2状态,此时处理执行16/32位混合的、多类型对齐的指令。
2.ARM体系结构的存储格式n 大端格式:在这种格式中,字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。
n 小端格式:与大端存储格式相反,在小端存储格式中,低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节。
3.ARM处理器模式ARM微处理器支持7种运行模式,分别如下。
n 用户模式(usr):应用程序执行状态。
n 快速中断模式(fiq):用于高速数据传输或通道处理等快速中断处理。
n 外部中断模式(irq):用于通用的中断处理。
n 管理模式(svc):特权模式,操作系统使用的保护模式。
n 数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。
n 系统模式(sys):运行具有特权的操作系统任务。
4.2.3ARM9体系结构1.ARM微处理器系列简介ARM微处理器系列主要特点如表4.2所示。
表4.2 ARM微处理器系列
ARM核
主要特点
ARM7TDMI
•使用v4T体系结构
•最普通的低端ARM核
•3级流水线
•冯·诺依曼体系结构
•CPI约为1.9
T表示支持Thumb指令集(ARM指令是32位的;Thumb指令是16位的)
DI表示“EmbeddedICELogic”,支持JTAG调试
M表示内嵌硬件乘法器
ARM720T是具有cache、MMU(内存管理单元)和写缓冲的一种ARM7TDMI
ARM9TDMI
•使用v4T体系结构
•5级流水线:CPI被提高到1.5,提高了最高主频
•哈佛体系结构:增加了存储器有效带宽(指令存储器接口和数据存储器接口),实现了同时访问指令存储器和数据存储器的功能。
•一般提供附带的cache:ARM922T有2X8KB的cache、MMU和写缓冲;ARM920T除了有2×16KB的cache之外,其他的与ARM922t相同;ARM940T有一个MPU(内存保护单元)
ARM9E
•ARM9E是在ARM9TDMI的基础上,增加了一些功能:支持V5TE版本的体系结构,实现了单周期32×16乘法器和EmbeddedICELogicRT
•ARM926EJ-S/ARM946E-S:有可配置的指令和数据cache、指令和数据TCM接口以及AHB总线接口。ARM926EJ-S有MMU,ARM946E-S有MPU
•ARM966E-S:有指令和数据TCM接口,没有cache、MPU/MMU
ARM11系列
•ARM1136JF-S:使用ARMV6体系结构,性能强大(8级流水线,有静态/动态分支预测器和返回堆栈),有低延迟中断模式,有MMU,有支持物理标记的4-64k指令和数据cache,有一些内嵌的可配置的TCM,有4个主存端口(64位存储器接口),可以集成VFP协处理器(可选)。
•ARM1156T2(F)-S:有MPU,支持Thumb2ISA。
•ARM1176JZ(F)-S:在ARM1136JF-S基础上实现了TrustZone技术。
Cortex系列
•Cortex-A8:使用v7A体系结构,支持MMU、AXI、VFP和NEON。
•Cortex-R4:使用v7R体系结构,支持MPU(可选)、AXI和DualIssue技术。
•Cortex-M3:使用v7M体系结构,支持MPU(可选)、AHBLite和APB
因为本书所采用的FS2410开发板的S3C2410X是一款ARM9核处理器,所以下面重点学习ARM9核处理器。
2.ARM9主要特点ARM处理器凭借它的低功耗、高性能等特点,被广泛应用于个人通信等嵌入式领域,而ARM7也曾在中低端手持设备中占据了一席之地。然而,ARM7的处理性能逐渐无法满足人们日益增长的高性能处理的需求,它开始退出主流应用领域,取而代之的是性能更加强大的ARM9系列处理器。
新一代的ARM9处理器,通过全新的设计,能够达到两倍以上于ARM7处理器的处理能力。它的主要特点如下所述。
(1)5级流水线。
ARM7处理器采用的3级流水线设计,而ARM9则采用5级流水线设计,如图4.4所示。
通过使用5级流水线机制,在每一个时钟周期内可以同时执行5条指令。这样就大大提高了处理性能。在同样的加工工艺下,ARM9处理器的时钟频率是ARM7的1.8~2.2倍。
图4.4ARM7与ARM9流水线比较
(2)采用哈佛结构。
首先读者需要了解什么叫哈佛结构。在计算机中,根据计算机的存储器结构及其总线连接形式,计算机系统可以被分为冯·诺依曼结构和哈佛结构,其中冯·诺依曼结构共用数据存储空间和程序存储空间,它们共享存储器总线,这也是以往设计时常用的方式;而哈佛结构则具有分离的数据和程序空间及分离的访问总线。所以哈佛结构在指令执行时,取址和取数可以并行,因此具有更高的执行效率。ARM9采用的就是哈佛结构,而ARM7采用的则是冯·诺依曼结构。如图4.5和图4.6分别体现了冯·诺依曼结构和哈佛结构的数据存储方式。
图4.5冯·诺依曼结构 图4.6哈佛结构
由于在RISC架构的处理器中,程序中大约有30%的指令是Load-Store指令,而采用哈佛结构大大提升了这两个指令的执行速度,因此对提高系统效率的贡献是非常明显的。
(3)高速缓存和写缓存的引入。
由于在处理器中,一般处理器速度远远高于存储器访问速度,那么,如果存储器访问成为系统性能的瓶颈,则处理器再快都毫无作用。在这种情况下,高速缓存(Cache)和写缓存(WriteBuffer)可以很好地解决这个问题,它们存储了最近常用的代码和数据,以供CPU快速存储,如图4.7所示。
(4)支持MMU。
图4.7ARM9的高速缓存和读缓存
MMU是内存管理单元,它把内存以“页(page)”为单位来进行处理。一页内存是指一个具有一定大小的连续的内存块,通常为4096B或8192B。操作系统为每个正在运行的程序建立并维护一张被称为进程内存映射(ProcessMemoryMap)的表,表中记录了程序可以存取的所有内存页以及它们的实际位置。
每当程序存取一块内存时,它会把相应的虚拟地址(virtualaddress)传送给MMU,而MMU会在PMM中查找这块内存的实际位置,也就是物理地址(physicaladdress),物理地址可以在内存中或磁盘上的任何位置。如果程序要存取的位置在磁盘上,就必须把包含该地址的页从磁盘上读到内存中,并且必须更新PMM以反映这个变化(这被称为pagefault,即“页错”)。MMU的实现过程如图4.8所示。
图4.8MMU的实现过程
只有拥有了MMU才能真正实现内存保护。例如当A进程的程序试图直接访问属于B进程的虚拟地址中的数据,那么MMU会产生一个异常(Exception)来阻止A的越界操作。这样,通过内存保护,一个进程的失败并不会影响其他进程的运行,从而增强了系统的稳定性,如图4.9所示。ARM9也正是因为拥有了MMU,所以比ARM7具有更强的稳定性和可靠性。
图4.9内存保护示意图
4.2.4S3C2410处理器详解本书所采用的硬件平台是深圳优龙科技有限公司的开发板FS2410(如图4.10所示),它的中央处理器是三星公司的S3C2410X。S3C2410X是使用ARM920T核、采用0.18mm工艺CMOS标准宏单元和存储编译器开发而成的。由于采用了由ARM公司设计的16/32位ARM920TRISC处理器,因此S3C2410X实现了MMU和独立的16KB指令和16KB数据哈佛结构的缓存,且每个缓存均为8个字长度的流水线。它的低功耗、精简而出色的全静态设计特别适用于对成本和功耗敏感的领域。
S3C2410X提供全面的、通用的片上外设,大大降低系统的成本,下面列举了S3C2410X的主要片上功能。
n 1.8VARM920T内核供电,1.8V/2.5V/3.3V存储器供电;
n 16KB指令和16KB数据缓存的MMU内存管理单元;
n 外部存储器控制(SDRAM控制和芯片选择逻辑);
n 提供LCD控制器(最大支持4K色的STN或256K色TFT的LCD),并带有1个通道的LCD专用DMA控制器;
n 提供4通道DMA,具有外部请求引脚;
n 提供3通道UART(支持IrDA1.0,16字节发送FIFO及16字节接收FIFO)/2通道SPI接口;
n 提供1个通道多主IIC总线控制器/1通道IIS总线控制器;
n 兼容SD主机接口1.0版及MMC卡协议2.11版;
n 提供2个主机接口的USB口/1个设备USB口(1.1版本);
n 4通道PWM定时器/1通道内部计时器;
图4.10优龙FS2410开发板实物图
n 提供看门狗定时器;
n 提供117个通用I/O口/24通道外部中断源;
n 提供不同的电源控制模式:正常、慢速、空闲及电源关闭模式;
n 提供带触摸屏接口的8通道10位ADC;
n 提供带日历功能的实时时钟控制器(RTC);
n 具有PLL的片上时钟发生器。
S3C2410X系统结构图如图4.11所示。
下面依次对S3C2410X的系统管理器、NandFlash引导装载器、缓冲存储器、时钟和电源管理及中断控制进行简要讲解,要注意,其中所有模式的选择都是通过对相关寄存器特定值的设定来实现的,因此,当读者需要对此进行修改时,请参阅三星公司提供S3C2410X用户手册。
1.系统管理器S3C2410X支持小/大端模式,它将系统的存储空间分为8个组(bank),其中每个bank有128MB,总共为1GB。每个组可编程的数据总线宽度为8/16/32位,其中bank0~bank5具有固定的bank起始地址和结束地址,用于ROM和SRAM。而bank6和bank7是大小可变的,用于ROM、SRAM或SDRAM。这里,所有的存储器bank都具有可编程的操作周期,并且支持掉电时的SDRAM自刷新模式和多种类型的引导ROM。
2.nandflash引导装载器S3C2410X支持从nandflash存储器启动,其中,开始的4KB为内置缓冲存储器,它在启动时将被转载(装载or转载)到SDRAM中并执行引导,之后该4KB可以用作其他用途。
图4.11S3C2410X系统结构图
小知识
Flash是一种非易失闪存技术。Intel于1988年首先开发出NorFlash技术之后,彻底改变了原先由EPROM和EEPROM一统天下的局面。紧接着,1989年东芝公司发布了NandFlash结构,强调降低每比特的成本、更高的性能,并且像磁盘一样可以通过接口轻松升级。
NorFlash的特点是芯片内执行(ExecuteInPlace),这样应用程序可以直接在Flash闪存内运行,而不必再把代码读到系统RAM中。NorFlash的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。
Nandflash结构能提供极高的单元密度,可以达到高存储密度,NAND读和写操作采用512字节的块,单元尺寸几乎是nor器件的一半,同时由于生产过程更为简单,大大降低了生产的成本。NAND闪存中每个块的最大擦写次数是100万次,是NorFlash的10倍,这些都使得NandFlash越来越受到人们的欢迎。
同时,S3C2410X也支持从外部nGCS0片选的Norflash启动,如在优龙的开发板上将JP1跳线去掉就可从NorFlash启动(默认从NandFlash启动)。在这两种启动模式下,各片选的存储空间分配是不同的,如图4.12所示。
图4.12S3C2410两种启动模式地址映射
3.缓冲存储器S3C2410X是带有指令缓存(16KB)和数据缓存(16KB)的联合缓存装置,一个缓冲区能够保持16字的数据和4个地址。
4.时钟和电源管理S3C2410X采用独特的时钟管理模式,它具有PLL(相位锁定环路,用于稳定频率)的芯片时钟发生器,而在此,PLL又分为UPLL和MPLL。其中UPLL时钟发生器用于主/从USB操作,MPLL时钟发生器用于产生主时钟,使其能以极限频率203MHz(1.8V)运行。
S3C2410X的电源管理模式又分为正常、慢速、空闲和掉电4种模式。其中慢速模式为不带PLL的低频时钟模式,空闲模式始终为CPU停止模式,掉电模式为所有外围设备全部掉电仅内核电源供电的模式。
另外,S3C2410X对片内的各个部件采用独立的供电方式。
n 1.8V的内核供电。
n 3.3V的存储器独立供电(通常对SDRAM采用3.3V,对移动SDRAM采用1.8/2.5V)。
n 3.3V的VDDQ。
n 3.3V的I/O独立供电。
由于在嵌入式系统中电源管理非常关键,它直接涉及功耗等各方面的系统性能,而S3C2410X的电源管理中独立的供电方式和多种模式可以有效地处理系统的不同状态,从而达到最优的配置。
5.中断控制中断处理在嵌入式系统开发中非常重要,尤其对于从单片机转入到嵌入式的读者来说,与单片机中简单的中断模式相比,ARM中的中断处理要复杂得多。如果读者无相关基础,建议先熟悉相关的基础概念再进行下一步学习。
首先给出了一般的中断处理流程,如图4.13所示。
图4.13一般中断处理流程
S3C2410X包括55个中断源,其中有1个看门狗定时器中断、5个定时器中断、9个通用异步串行口中断、24个外部中断、4个DMA中断、2个RTC(实时时钟控制器)中断、2个USB中断、1个LCD中断和1个电池故障。其中,对外部中断源具有电平/边沿两种触发模式。另外,对于非常紧急的中断可以支持使用快速中断请求(FIQ)。
S3C2410X的中断处理流程(该图摘自S3C2410X用户手册)如图4.14所示。
图4.14S3C2410X中断处理流程
图中的SUBSRCPND、SRCPND、SUBMASK、MASK和MODE都是与中断相关的寄存器,其中SUBSRCPND和SRCPND寄存器用来表示有哪些中断被触发了和是否正在等待处理(pending);SUBMASK(INTSUBMSK寄存器)和MASK(INTMSK寄存器)用于屏蔽某些中断。
图中的“Requestsources(withsub–register)”表示的是INT_RXD0、INT_TXD0等11个中断源,它们不同于“Requestsources(withoutsub–register)”的操作如下:
(1)“Requestsources(withoutsub–register)”中的中断源被触发之后,SRCPND寄存器中相应位被置1,如果此中断没有被INTMSK寄存器屏蔽、或者是快中断(FIQ)的话,它将被进一步处理。
(2)对于“Requestsources(withsub–register)”中的中断源被触发之后,SUBSRCPND寄存器中的相应位被置1,如果此中断没有被SUBMSK寄存器屏蔽的话,它在SRCPND寄存器中的相应位也被置1。在此之后的两者的处理过程是一样的。
接下来,在SRCPND寄存器中,被触发的中断的相应位被置1,等待处理。
(1)如果被触发的中断中有快中断(FIQ)——MODE(INTMOD寄存器)中为1的位对应的中断,则CPU的FIQ中断函数被调用。注意:FIQ只能分配一个,即INTMOD中只能有一位被设为1。
(2)对于一般中断IRQ,可能同时有几个中断被触发,未被INTMSK寄存器屏蔽的中断经过比较后,选出优先级最高的中断,然后CPU调用IRQ中断处理函数。中断处理函数可以通过读取INTPND(标识最高优先级的寄存器)寄存器来确定中断源是哪个,也可以读INTOFFSET寄存器来确定中断源。