大家都很忙

点开电影天堂的网页,发现几天没上来,又更新了不少2009的电影。

世界各地的人都在忙活,拍电影的,搞音乐的,做研究的……为了生活,也为了在世间的一个名。

今天的计划之一是把这几年的工作平台总结一下。

从2004年开始接触这一领域,也有了一些积累,从一开始的intel的pxa255平台,到三星的S3C2410,再到工作以后的Motorola的PQ和PQ2,还有正在写的一个操作系统基于的X86平台。

早期的PXA和S3C2410很久没有去弄了,很多东西都已经淡忘了,这次主要总结一下PQ2,PQ2pro和X86平台。好,趁肚子还没有饿的无法支撑之前先把第一个进行了,差点忘了,今天的家务计划还没有进行呢,午饭后进行。

每部分总结分为这样四个部分进行:1,功能框架结构, 2,硬件接口,3,中断结构,4,汇编

一,PQ

1.1功能框架结构

PQ(Power QUICC(Quad Integrated Communications Controller))系列芯片,是MOTORALA公司将PowerPC内核涉及到SOC芯片之中,RISC,专注于嵌入式通信市场的通信处理器。PQ系列最具代表性的是MPC860芯片。

PQ系列处理器一般有三个功能模块组成,PowerPC核,系统接口单元和通信处理模块。这三个模块之间的内部总线是32位,以DMA方式进行通信。记起我的一个mentor常说,在开会或者写简报时,多用图,图能节省很多阅读者的时间并能提起阅读者的兴趣还能加速他们对你讲述的东西的理解,有很多好处,这里我也上一个图,从别处截过来的,有用就行,英雄不问出处。

MPC860

图片有些不清晰,肚子有些饿了,我想节省时间把这部分结束,清晰的图片稍后再补上。

PowerPC核是主要的处理单元,它包括数据和指令的缓存,存储器管理单元(MMU),在40M时钟时为50MIPS速度。

系统接口单元包括:总线监视器,软件看门狗,中断定时器和实时时钟,复位控制器,JTAG测试口。功能很多也很杂,总起来说,它最最重要的功能主要是提供内部总线和外部总线的接口。

通信处理模块(CPM),她是860内部又一个32位的RISC内核,这里用她来指代,因为对于她太有感情了,我的所有开发调试工作都和她有关,整天有事没事都在翻阅她,抚摸她(有些YY了,过),PowerPC核主要执行高层代码,完成粗粒度的功能操作,而CPM在处理实际通信中的低层通信功能。她包括一个RISC控制器,16个串行DMA通道(SDMA),两个串行通信控制器(SCC),两个串行管理控制器(SMC),一个通用串行总线通道(USB),一个I2C接口和一个串行外围电路(SPI),可以通过灵活的编程方式实现对Ethenet,USB,T1/E1,ATM,HDLC,UART等的支持。

1.2 硬件接口

MPC860存储管理提供了8个存储器的片选信号,它可以与SRAM,EPROM,FLASH,SDRAM等实现无缝连接。与外存储器的接口信号有

1,数据总线:32位

2,地址总线:32位

3,控制总线片选:cs0-cs7

 

1.3 中断结构

MPC860的整个中断体系结构有三个模块:PowerPC核,SIU中断控制器和CPM中断控制器。PowerPC是指令执行单元,使用异常的目的就是要打断它的正常执行,使它转入处理紧急事件的异常处理程序中执行。对于每一类异常,异常发生后PowerPC要跳转到执行的位置是不同的。这些不同的位置组成了一个表-异常向量表,又在补充基本知识了:)。不同类型的异常在异常向量表中的偏移量不同,这些都是在系统启动的时候设置好的。如系统重启异常在表中偏移量是0x100,外部中断在异常向量表中的偏移量是0x500等等。

SIU中断控制器负责管理8个外部中断源(IRQ0-7)和8个内部中断源(Level0-7)。其中IRQ0一般用作不可屏蔽中断,通过NMI想PowerPC内核请求中断,其余15个通过IREQ请求中断。对于8个内部中断源,包括周期性的中断时钟(PIT),实时时钟(RTC),PCMCIA和CPM等,用户可以通过对寄存器的操作,把它们设定为level0-7中的任何一级。这16个中断源之间的优先级SIU中断控制器已经设定了。其中IRQ0的优先级最高,level0其次,IRQ1再次,一次类推,level7的优先级最低。

在SIU中断控制器进行SIU中断处理时,有几个重要的寄存器与之相关:它们是中断pending寄存器SIPEND,中断屏蔽寄存器SIMASK和中断向量寄存器SIVEC。

CPM中断控制器是对SIU中断控制器的下一级扩展。它管理通信处理模块中的各个中断,并向SIU中断控制器申请中断处理。CPIC(CPM中断控制器)接收12个外部中断源和17个内部中断源的中断请求,经过屏蔽和判优处理后,把中断请求送往SIU中断控制器。通过设置CPIC的配置寄存器,CPM在SIU中断控制器中的优先级可以是level0-7中的任何一级,并且所有的CPM中断源都将以这个优先级向SIU申请中断。在CPM中断控制器内部,它也是为每个中断源分配了一个中断向量号,并且分配了不同的优先级,还可以编程设定哪个中断源为最高优先级。

CPM中断控制器提供了一些可编程寄存器,通过对这些寄存器进行设置,可以设定COM中断控制器的工作方式。这些寄存器分别是CPM中断配置寄存器CICR,CPM中断屏蔽寄存器CIMR,CPM中断向量寄存器CIVR,CPM中断彭定寄存器CIPR,CPM中断服务寄存器CISR。

 

1.4 汇编

这一章节有点大,我还真不知道如何能快速有效的介绍,先去吃饭了,边吃边思考一下这个问题!

吃饭归来,味觉盛宴结束。

回到汇编这一块,个人觉得掌握一个平台的汇编主要看两块:一是CPU寄存器,二是操作指令。不同平台的汇编所能产生的差异也只能体现在这两块。

CPU寄存器

PowerPC处理器有32个通用寄存器(GPR),和一些专用寄存器:PC(程序寄存器),LR(链接寄存器),CR(条件寄存器),MSR(机器状态寄存器),XER(定点异常寄存器)。

由于PowerPC拥有如此多的GPR(IA32只有8个),所以传递参数的寄存器从GPR3开始。寄存器GPR3到GPR12是易失型寄存器,如果需要的话,在调用子例程之前必须保存它们并在返回之后回复它们。

GPR1用来作为栈帧指针。

以上内容由应用程序二进制接口(ABI)规定。

PPC32 Linux和NetBSD使用 SVR4 ABI
PPC64 Linux和AIX   使用 PowerOpen ABi

操作指令

所有的PowerPC都是32位指令。PowerPC处理模型要从内存检索数据,在寄存器中对它进行操作,然后将它存储回内存,几乎没有指令(除了装入和存储)是直接操作内存的。

PowerPC汇编需要一个目标寄存器用于所有寄存器到寄存器的操作。

常用的指令举例:

li REG, VALUE
加载寄存器 REG,数字为 VALUE

add REGA, REGB, REGC
将 REGB 与 REGC 相加,并将结果存储在 REGA 中

addi REGA, REGB, VALUE
将数字 VALUE 与 REGB 相加,并将结果存储在 REGA 中

mr REGA, REGB
将 REGB 中的值复制到 REGA 中

or REGA, REGB, REGC
对 REGB 和 REGC 执行逻辑 “或” 运算,并将结果存储在 REGA 中

ori REGA, REGB, VALUE
对 REGB 和 VALUE 执行逻辑 “或” 运算,并将结果存储在 REGA 中

and, andi, xor, xori, nand, nand, and nor
其他所有此类逻辑运算都遵循与 “or” 或 “ori” 相同的模式

ld REGA, 0(REGB)
使用 REGB 的内容作为要载入 REGA 的值的内存地址

lbz, lhz, and lwz
它们均采用相同的格式,但分别操作字节、半字和字(“z” 表示它们还会清除该寄存器中的其他内容)

b ADDRESS
跳转(或转移)到地址 ADDRESS 处的指令

bl ADDRESS
对地址 ADDRESS 的子例程调用

cmpd REGA, REGB
比较 REGA 和 REGB 的内容,并恰当地设置状态寄存器的各位

beq ADDRESS
若之前比较过的寄存器内容等同,则跳转到 ADDRESS

bne, blt, bgt, ble, and bge
它们均采用相同的形式,但分别检查不等、小于、大于、小于等于和大于等于

std REGA, 0(REGB)
使用 REGB 的地址作为保存 REGA 的值的内存地址

stb, sth, and stw
它们均采用相同的格式,但分别操作字节、半字和字

sc
对内核进行系统调用

所有计算值的指令均以第一个操作数作为目标寄存器。在所有这些指令中,寄存器都仅用数字指定。例如,将数字 12 载入寄存器 5 的指令是 li 5, 12。我们知道,5 表示一个寄存器,12 表示数字 12,原因在于指令格式(因为li第一个操作数就是寄存器。这点与IA32不同,intel对每个寄存器都进行了命名。

第一部分到此为止,家庭大扫除要开始了!

来源:smilingjames

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2009年11月5日
下一篇 2009年11月5日

相关推荐