32回答

0收藏

献给ARM初学者

其他 其他 13332 人阅读 | 32 人回复 | 2007-02-02

?献给ARM初学者

ARM简介与编程?
?
?
1.ARM简介(摘录)?

  ARM(Advanced?RISC?Machines)是微处理器行业的一家知名企业,设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软件。技术具有性能高、成本低和能耗省的特点。适用于多种领域,比如嵌入控制、消费/教育类多媒体、DSP和移动式应用等。
  ARM将其技术授权给世界上许多著名的半导体、软件和OEM厂商,每个厂商得到的都是一套独一无二的ARM相关技术及服务。利用这种合伙关系,ARM很快成为许多全球性RISC标准的缔造者。
  目前,总共有30家半导体公司与ARM签订了硬件技术使用许可协议,其中包括Intel、IBM、LG半导体、NEC、SONY、菲利浦和国民半导体这样的大公司。至于软件系统的合伙人,则包括微软、升阳和MRI等一系列知名公司。
  ARM架构是面向低预算市场设计的第一款RISC微处理器。
  2.产品介绍
  ARM提供一系列内核、体系扩展、微处理器和系统芯片方案。由于所有产品均采用一个通用的软件体系,所以相同的软件可在所有产品中运行(理论上如此)。典型的产品如下。
  ?①CPU内核
  ?--ARM7:小型、快速、低能耗、集成式RISC内核,用于移动通信。
  --?ARM7TDMI(Thumb):这是公司授权用户最多的一项产品,将ARM7指令集同Thumb扩展组合在一起,以减少内存容量和系统成本。同时,它还利用嵌入式ICE调试技术来简化系统设计,并用一个DSP增强扩展来改进性能。该产品的典型用途是数字蜂窝电话和硬盘驱动器。
  --ARM9TDMI:采用5阶段管道化ARM9内核,同时配备Thumb扩展、调试和Harvard总线。在生产工艺相同的情况下,性能可达ARM7TDMI的两倍之多。常用于连网和顶置盒。
  ②体系扩展
  --?Thumb:以16位系统的成本,提供32位RISC性能,特别注意的是它所需的内存容量非常小。
  ③嵌入式ICE调试
  由于集成了类似于ICE的CPU内核调试技术,所以原型设计和系统芯片的调试得到了极大的简化。
  ④微处理器
  --ARM710系列,包括ARM710、ARM710T、ARM720T和ARM740T:低价、低能耗、封装式常规系统微型处理器,配有高速缓存(Cache)、内存管理、写缓冲和JTAG。广泛应用于手持式计算、数据通信和消费类多媒体。
  ?--ARM940T、920T系列:低价、低能耗、高性能系统微处理器,配有Cache、内存管理和写缓冲。应用于高级引擎管理、保安系统、顶置盒、便携计算机和高档打印机。
  --StrongARM:性能很高、同时满足常规应用需要的一种微处理器技术,与DEC联合研制,后来授权给Intel。SA110处理器、SA1100?PDA系统芯片和SA1500多媒体处理器芯片均采用了这一技术。
  --ARM7500和ARM7500FE:高度集成的单芯片RISC计算机,基于一个缓存式ARM7?32位内核,拥有内存和I/O控制器、3个DMA通道、片上视频控制器和调色板以及立体声端口;ARM7500FE则增加了一个浮点运算单元以及对EDO?DRAM的支持。特别适合电视顶置盒和网络计算机(NC)。

Windows?CE的Pocket?PC只支持ARMWindows?CE可支持多种嵌入式处理器,但基于Windows?CE的Pocket?PC则只支持ARM一种。微软在对SH3、MIPS、ARM等嵌入式处理器做了评估后认为,ARM是一种性价比较好的选择。由于目前ARM在手持设备市场占有90%以上的份额,只支持ARM,可以有效地缩短应用程序开发与测试的时间,也降低了研发费用。由于ARM开放其处理器授权,因此,用户在市场上可以在多家整机厂商中进行选择,从而保证了这一市场的竞争性。

2.?ARM芯片CL-PS7111主要特点
 
电平2.7v/3.3v.相对应CPU工作频率13MHz/18MHz.?13MHz位节电模式,?性能相当于33MHz?Inter?486?PC
ARM710A内核
ARM7?CPU?
8K?4向缓存(cache)?
MMU?带有64入口TLB(Transition?Look-aside?Buffer)?
DRAM控制器
支持16位和32位DRAM?
ROM/SRAM/Flash?Memory?控制
可译码4,5或6个独立的256M存储空间段?
每个存储段支持8位,16位和32位操作,并支持分页模式?
可编程ROM/SRAM/Flash?Memory?
支持两个低功耗CL-PS6700?PC卡(PCMCIA)控制器
2K?片内?SRAM用于程序快速执行
片内Boot?ROM?(128Byte)
两个同步串行接口
支持SPI,或Microwire2兼容?
音频解码器(Audio?Codec)?
27位通用接口GPIO(general-purpose?I/O?port)
3个8位和1个3位GPIO?port?
支持键盘阵列扫描(Scanning?keyboard?matrix)?
两个异步串口?UARTs
支持高达115.2K?波特率?
内有两个接收发送(TX,RX)?16Bytes?FIFOs缓冲?
支持MODEM控制信号?
DC-to-DC转换器接口
提供两个96KHz时钟输出,通过编程duty?ratio(1/16---15/16)操作?
LCD控制器
直接信号扫描板接口,单色LCD?
面板的大小可编程从16到1024个像素,16个像素为一个单位?
视频帧大小可编程到128K?byte?
每个像素点的位数可编程1,2,4位?
计时器和实时时钟
两个16位计时器(Timer?counter)和一个32位实时时钟(RTC)?
 
3.?调试工具及调试方法
ARM?Project?Manager?(APM)?include?ARM?Debuger:?这个工具由ARM提供主要是开发程序,?编程调试ARM芯片,?有相当不错的开发环境和远端调试功能,?支持汇编和C.?它带有一个ARM自己的嵌入式操作系统ARM?Angel,?用户可以在它的上面开发自己的嵌入式软件,?不过这个操作系统不是实时多任务的.?
通过计算机串口与处理器UART相连,设置计算机的超级终端?(?Hyper?Terminal?),?通过超级终端察看硬件情况(寄存器设置,数据等)和程序运行情况,当然程序重要加入向UART送出数据的指令,?用Beep报警也是经常用的.?这种调试方法是用于底层调试硬件,找出硬件存在的问题.?
VxWorks?在Shell?不能正常运行前,也是采取这种方法来调试程序,不过一般不是硬件问题,而是BSP中存在的问题,需要根据硬件,修改BSP.?
需要说明的是:上述方法是在没有硬件仿真器的情况下采用的,仿真器是底层调试硬件程序最好,最简便直观的办法。
 
4.?ARM7?编程要点及示例?
ARM编程可参考程序示例?ARM_Boot?Flash?ROM驱动?
VxWorks?image?装入ARM的过程:?
ARM7?有两种运行模式,?Boot?模式和?Normal?模式,?Boot模式主要是把程序装入(down?load?或load?)Flash?ROM中用的,?Normal模式是一般运行程序用的.
ARM7?Boot?模式时,?Flash?的地址是0x70000000片选型号是CS0?(Normal模式下,Flash地址为0x00000000)
ARM7内部有128byte的BootROM和2K的SRAM,当需要Download?VxWorks?image时,ARM启动采用Boot方式启动运行存在128byte?BootROM中的程序初始化ARM内部的COM口,从COM口接受数据到2K的SRAM,这2K程序是用来真正Load?VxWorks的,2K程序Load完毕后系统自动跳转到这2K程序执行,它的作用是再次初始化内部的COM口,通过COM口接受VxWorks到DRAM,然后由DRAM写入FLASH。在主板2K?SRAM运行的Boot?Load程序执行过程,可参看程序示例中ARM?Boot?Load程序

写入完毕后,切换到Normal模式重新启动系统,系统自动跳到FLASH?0X00000000开始运行VXWORKS。?
用PC机上的COM1与ARM内部的UART1(COM)通信来Download?VxWorks。

主要管脚定义?
32条数据线:?D0-------D31
28条地址线:?A0-------A27?little?endian?定义,?相对应数据排列?0?1?2?3?4?5?6--------27
6条片选信号脚:?CS0-------CS5,?其实作用相当于地址线?A28------A31
4个8位的PORT口:?PORT?A,?PORT?B?,?PORT?D主要用于外围芯片信号的控制.?PORT?E有双作用.
例如?PORT?A?控制键盘的行信号,?PORT?B?用于RS232,?PORT?D?用于控制MODEM,?FPGA..
外部中断信号EINT,?EXTFIQ.?
编程时要根据主板原理图和硬件手册进行.?
看硬件图纸,?该芯片和CPU的那些管脚连结.?特别是?PORT?口和片选线.?
查CPU手册,?得到PORT?口和该片选的硬件地址.?
编程:?用PORT口直接对芯片操作,如开,关,RESET等,?用片选地址和芯片内地址结合对该外围芯片操作.?
 ?
Exception?vectors,?中断向量表及中断分配?

Vector?地址?Exception
Exception?Mode?Priority(1=High)?
0x0?Reset
Svc?1?
0x4?Undefined?Instruction
Undef?6?
0x8?Software?Interrupt
Svc?6?
0xC?Prefetch?Abort
Abort?5?
0x10?Data?Abort
Abort?2?
0x14?Reserved
Not?applicable?Not?applicable?
0x18?Interrupt?(IRQ)
irq?4?
0x1C?Fast?Interrupt?(FIQ)
Fiq?3?
 
这个向量表必须要放置在系统地址0x00000000?(一般是逻辑地址,?即经过MMU映射后的地址)处.
一般是在这些地址上放跳转指令?BL,?跳到相应的地址空间执行相应的程序.
如系统执行从0x00000000?Reset开始,?Reset?跳转到某一地址开始运行操作系统.
 
程序示例,中断向量表?(ARM?asm):
 
__VectorStart??Start?of?ARM?processor?vectors
LDR?pc,ResetV??00?-?Reset
LDR?pc,UndefV??04?-?Undefined?instructions
LDR?pc,SWIV??08?-?SWI?instructions
LDR?pc,PAbortV??0C?-?Instruction?fetch?aborts
LDR?pc,DAbortV??10?-?Data?access?aborts
LDR?pc,UnusedV??14?-?Reserved?(was?address?exception)
LDR?pc,IRQV??18?-?IRQ?interrupts
LDR?pc,FIQV??1C?-?FIQ?interrupts
 
 
中断号分配?(FIQ,?IRQ)
中断类型?中断号?Name
说明
FIQ?0?外部中断?EXTFIQ?管脚?NEXT?FIQ?
…?…?…?…?
IRQ?5?外部中断?EINT1?管脚?NEINT1?
IRQ?6?外部中断?EINT2?管脚?NEINT2?
IRQ?7?外部中断?EINT3?管脚?NEINT3?
…?…?…?…?
IRQ?12?内部中断?UTXINT1?UART1?TX?FIFO?为空?
…?…?…?…?
 
中断号也是寄存器INTMR和INTSR的位,所以在ARM中中断的编程要点是
看硬件图纸,?该外设和CPU的那一个管脚连结.?
查CPU手册,?得到中断号及INTMR,INTSR的地址.?
编程?
注:?如果不是写底层driver,?只是在系统上层编程(如VxWorks,?Linux)?知道中断号即可.
程序示例(VxWorks):?
//登记中断号?5,?和相应的中断例程?ComISR.
intConnect?(?(?VOIDFUNCPTR?*?)?5,?ComISR,?0?)??
//使能这中断
intEnable?(?(?VOIDFUNCPTR?*?)?5?);
……
ARM?Interrupts:?ARM?processors?implement?fast?and?normal?level?of?interrupt,signalled?externally,?synchronise?interrupts?before?an?exception?is?raised.?A?fast?interrupt?requst?(FIQ)?will?desable?subsequent?normal?and?fast?interrupt?by?setting?the?I?and?F?bit?in?CPSR,and?a?normal?interrup?request(IRQ)?will?disable?subsequent?normal?interrupt?by?setting?I?bit?in?CPSR.
 
计时器中断编程过程
ARM7一般内部有两个16位计时器(Timer?counter)和一个32位实时时钟(RTC),计时器中断属于IRQ中断,这里以计时器1为例叙述一下中断的编程过程
设置interrup?mask?INTMR1寄存器?0x80000240?第8位TC1OI计时器1为使能.?在0x800000300?计时器?1?的数据寄存器TC1D写入指定数据,这样数据开始从这个给定的数开始递减计数,计数递减至?0?后,会产生一个溢出underflow?IRQ中断请求,中断状态寄存器INTSR1?0x80000240?第8位TC1OI置位.系统会跳到中断向量表地址?0x00000018?处,执行相应的中断程序,中断程序通过判断中断的类型(判断中断状态寄存器的位),来执行相应的中断服务程序ISR.?中断状态寄存器标志位复位,计时器开始重新开始计时.

 
存储空间管理单元(MMU)?
物理地址映射?
重点在于片选地址CS的选取,另外MMU映射需要参考这个物理地址
 
ARM7?物理地址映射表
地址?内容
大小
备注
0xF000.0000?Unused?256Mbytes?
0xE000.0000?Unused?256Mbytes?
0xD000.0000?DRAM?Bank?1?256Mbytes?
0xC000.0000?DRAM?Bank?0?256Mbytes?外接DRAM?
0x8000.2000?Unused?--1Gbytes?
0x8000.0000?内部寄存器地址?8Kbytes?主要的I/O和控制?
0x7000.0000?Boot?ROM?128?bytes?片内,封有Boot程序?
0x6000.0000?On-chip?SRAM?2?Kbytes?片内,存放Load程序?
0x5000.0000?PCMCIA-1(NCS[5])?4*64?Mbytes?
0x4000.0000?PCMCIA-0(NCS[4])?4*64?Mbytes?
0x3000.0000?外部扩展(NCS[3])?256Mbytes?
0x2000.0000?外部扩展(NCS[2])?256Mbytes?
0x1000.0000?ROM?Bank?1(NCS[1])?256Mbytes?
0x0000.0000?ROM?Bank?0(NCS[0])?256Mbytes?外接Flash?ROM?
 
MMU?虚拟(逻辑)地址和物理地址的映射实例
Vxworks支持的ARM架构的处理器,一般是RAM的起始位置为0x0,而实际上ARM的物理地址0x0是ROM的起始地址,RAM在高位地址.这就需要系统在Boot过程中,执行MMU程序,重新映射RAM和ROM的地址.即RAM起始地址为0x0.
MMU主要有ARM7中协处理器coprocessor?15控制,coporocessor主要控制:
片内的MMU?
指令和数据缓存(IDC)?
Write?Buffer(WB)?
MMU有两层页表(two-level?page?table)用来进行虚拟地址向物理地址转换,CP15定义16个寄存器,只有MRC和MCR指令才能对它们操作.
在VxWorks系统中,MMU表分成两部分:boot?up?table和final?table.在文件ramAtHigh.h中定义.该表在文件romInit.s中初始化,语句为:?
BL?_ramAtHigh_1(2)
MMU映射实例
虚拟(逻辑)地址(VxWorks系统)?硬件物理地址
RAM?首地址?0x0000.0000?
Low?Address?0x0000.1000?
High?Address?0x0060.0000?
ROM? ?0x0100.0000?
 
 
 
其他的地址逻辑地址和物理地址映射地址不变?
0x8000.0000?内部寄存器?
..................?
.................?
相同的颜色映射对应的地址
 
 
 
 
 
 
ROM?0x0000.0000?VxWorks?image和文件系统?
RAM?首地址?0xC000.0000?存放LCD,MMU表等?
0xC004.0000?中断向量表等?
0xC004.1000?VxWorks运行位置?
0xC064.0000?VxWorks从ROM解压后Copy的位置?
其他的地址映射地址不变?
0x8000.0000?内部寄存器?
..............?
..............
分享到:
回复

使用道具 举报

回答|共 32 个

倒序浏览

沙发

dearyyh

发表于 2007-2-9 14:40:01 | 只看该作者

RE:献给ARM初学者

好!长了见识了!
回复 支持 反对

使用道具 举报

板凳

dearyyh

发表于 2007-2-9 15:00:28 | 只看该作者

RE:献给ARM初学者

学到很多以前不知道的知识!
回复 支持 反对

使用道具 举报

地板

天才的悲剧

发表于 2007-2-9 15:18:52 | 只看该作者

RE:献给ARM初学者

顶就一个字,我只说一次~~~~
回复 支持 反对

使用道具 举报

5#

dearyyh

发表于 2007-2-9 15:55:17 | 只看该作者

RE:献给ARM初学者

现在我了解的,ARM11是最新的了,主频可以达到近600MHZ!
回复 支持 反对

使用道具 举报

6#

wwee12333

发表于 2007-2-12 23:33:42 | 只看该作者

RE:献给ARM初学者

真是好心情 真是好心情
回复 支持 反对

使用道具 举报

7#

allentsai

发表于 2007-3-23 09:05:35 | 只看该作者

RE:献给ARM初学者

更加瞭解了!!Thanks very much !!!
回复 支持 反对

使用道具 举报

8#

liukliuk

发表于 2007-4-3 16:20:08 | 只看该作者

RE:献给ARM初学者

真长了不少见识。
回复 支持 反对

使用道具 举报

9#

tedquan

发表于 2007-6-9 16:27:43 | 只看该作者

RE:献给ARM初学者

回复 支持 反对

使用道具 举报

10#

Anrogon

发表于 2007-7-17 17:24:53 | 只看该作者

RE:献给ARM初学者

学习学习
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条