MPC860中文资料上

更新时间:2024-03-20 02:45:02 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

W-1 欢迎

Motorola欢迎各位使用MPC860培训光盘,我们希望这张光盘成为各位在学习使用时的有用工具。各位可以在开始自已的设计之前,利用这个培训光盘进行学习,但在各位的设计进行当中,也可以随时利用这光盘作为参考。这个培训教程为新的设计者提供一个非常有用的信息,同时也可以帮助有经验的设计者增加理解。 W-2

我们有多种方法使用这个光盘,所有的资料都以顺序排列,如果你愿意,你可以象实际听课一样,从头到尾完成培训。如果在看资料时遇到问题,你也可以利用目录或关键字目录来随意选择你所需的部分。

在使用此教程时,你应该多利用回放控制等附加功能。你是否在上次培训时有一些地方不清楚?现在你可以利用回放控制功能去重复所需的部分,你甚至可以回到几个部分之前直至到自已完全掌握。如果你认为进行得太慢,你可以向前跳过你认为已掌握的部分;如果你愿意,你可以无数次地重复有关的部分;你如果认为需要一些时间来理解当前的内容,你可以暂停来重复当前的内容直到理解为止,然后再继续。

我们为每章都提供了参孝资料,如果当前讨论的内容你需要了解更多,你可以利用参孝资料了解有关的用户手册部分及应用指南。

另一个有用的功能是你可以打印当前息内容,光盘提供了所有资料的pdf文件,如果你需要将打印出的资料带到实验室作参孝的话,你可以打印出来。

当然这有许多我们没有介绍的功能。请一定仔细了解所有的命令和所有的文件来熟悉对你有用的功能。

在培训开始之前我们先介绍一些对各位设计有用的方法。在MPC860入门这一章中,各位将了解到怎么来得对设计应用有用的各种资源,而且一步一步指导大家如何开始设计。 W-3

我们忠心希望各位能通过这个光盘更好地使用MPC860。希望各位设计顺利,并感谢使用Motorola器件。现在培训开始。

GS-1 开始MPC860的培训

再一次感谢各位使用MPC860设计产品,我们首先感谢各位选择Motorola公司的处理机。Motorola公司知道在集成通信处理机领域中,各位有很多选择,所以我们很自豪与各位合作。

在我们开始培训之前,我们将介绍一些有关设计的有用资源,然后我们会一步一步的介绍硬件和软件开发,并介绍对各位有助的资料。

GS-2 网站

互联网可以作为一种最有效向客户提供所需资料的工作。我们欢迎各位访问我们的网站。 http://www.mot.com/netcomm

这是主页,它提供这个站点的其他连接地址和指出了其他新内容。作为设计者,你可能认为下面三个网址更有用;工程师工具、出版资料、支持和常见问题解答。

工程师工具:从这里可以得到示范代码、电路图、监控包、器件号、初始化工具等。文件是以zip压缩格式或pdf格式提供。

出版资料;这里你可以得到用户手册、技术总结、应用指南和用户手册更正,在此部分你还可以找到我们软件的用户手册,可下载的微码和开发系统。

支持和常见问题:在这部分你可得到最新的器件更正,了解怎样得到定期发布的器件消息。这个主页有搜索工具可以便你方便查找对你有用的产品信息。你不必再花宝贵的时间去发问其他人已经发问的器件问题上,如果你不明白,请迸入faq。

http://www.mot.com/netcommfaq

GS-3 可提供的资料

MPC860用户手册。用户手册提供了最详细的器件和应用说明。从I/O的功能力到接口,又或者是编程模式,对各位来说这是最必要的。

手册的订货编号为MPC860UM/AD,你可以在互联网的出版物主页下载电子文件及通过资料发送中心得到手册。

我们很高兴地宣布在本培训光盘中已经包括了最新版的用户手册,这个版本中更新了图表和图例,改进了材料的结构,对读者来说更容易理解各部分内容。

PowerPC 32位微处理机手册:这一手册作为用户手册的补充,它更加详细地介绍了的寄存器、非 正常处理和PowerPC指令。而用户手册的订货编号为MPCFPE32B/AD。

Netcomm通用资料光盘。如果你不想在网站上下载资料,利用这个光盘可以得到用户手册和有关的软件包,如部分的初始化工具。尽管此光盘所有内容都在网上,但对接入互联网较慢的用户来说,此光盘便非常的有用。你可以用申请号CDROMNETCOM/D在Motorola资料发送中心得到。利用网络更可下载一些小的文件及到经常变更的文件。

GS-4 资料发放中心

我们的印刷资料和光盘都可以从半导体部的资料发送中心得到。发送中心的网址为

http://www.mot-sps.com/sps/General/sales.html

下面介绍一些其它信息。

GS-5 MPC860设计循序渐进指南

860是否可以应用在你的设计中?(1-5)

在如今如此复杂的芯片中,你可能要花很多的时间来评价一个芯片是否可以用在你的板上。你可以利用下面的方法来证明MPC860是否适合于你的应用上。

1、了解MPC860的变化种类

在网站 http://www.mot.com/netcomm 上 选 择 PRODUCTS 标识。 在 PRODUCTS 页 面 中,你可以看到MPC860的变化种类,选择任意一个变种你可以看到有关不同种类区别的图表。

2、得到正确的用户手册。

所有MPC860系列产品都需要MPC860UM/AD手册,你可以从网上或光盘或资料发送中心得到,如果你想得到MPC860MH,MPC860DH资料,你就需要QMC用户手册补充。如果你需要MPC860SAR,你也需要补充手册,如果你需要MPC860T,你就需要说明基本MPC860和这一特殊型号的比较的补充说明。

如果你正在研究MPC850系列,你应该从MPC850手册开始而不应看MPC860手册。

3、阅读用户手册的指南部分。

这部分将会给你一个芯片功能的介绍。如果你在学习MPC860DC(双通道器件)或MPC860DE(双以太网)器件,MPC860的基础也适用。但只有SCC1和SCC2可以使用,SCC3和SCC4管脚还可以用于并行I/O口,但是SCC3和SCC4功能不可用。

GS-6 860是否可以应用在你的设计中?(2-5)

4、选择功能正确型号

下面介绍MPC860上的通信功能是否适合于你的应用。决定同时需要进行什么串行口功能,举例说,你需要以太网、HDLC 和 UART。

你可以分配以太网在SCC1,HDLC在SCC2、UART在SCC3

因为以太网为选择方式之一,这里适用于MPC860,MPC860DC,MPC860DE,MPC860DH,MPC860EN和MPC860MH。

如果HDLC支持的是24或32时分复用通道或多个ISDNBRI,就会减少MPC860DH和MPC860MH的选择方式。在我们的文件中,这种协议称为QUICC多通道控制(QMC).

现在的选择为:

MPC860MH在SCC1上为以太网,SCC2上多通道HDLC(QMC),SCC3上为UART。

但是,MPC860DH只有2个通道,它可以使用吗?对,因为它还有2个SMC,SMC可以支持低速的UART!所以MPC860DH同样可以支持SCC1的以太网,多通道HDLC的SCC2和在SMC1或SMC2上的UART。

最后,应该强调在MPC860MH和MPC860DH的支持多通道以太网的型号中SCC1和SCC2的功能是可以对换的。

能否使用MPC850?MPC850DH的CPU能力和通信功能都低于MPC860,而且只有2个SCC: SCC2和SCC3,因为SCC1为一个专用的USB控制器,另外,MPC850只有一个连接到它本身管脚的SMC,所以它只有一个SMC1。

结论:到目前为止,MPC860DH和MPC850DH为最适用应用的型号。两者都能用吗?这决定于有关CPU的处理能力。现在我们用MPC860DH作为举例。

GS-7 860是否可以应用在你的设计中?(3-5)

5.检查器件的管脚。

在我们的举例中,我们认为MPC860DH允许所有的管脚同时工作支持我们的分配,阅读以太网部分,给出了以下的以太网在SCC1上的管脚分布。

TXD1

TENA为RTS1的映像。

TCLK必须映像在CLK1,CLK2,CLK3或CLK4。

RXD1

RENA为CD1映像

RCLK必须映像为CLK1,CLK2,CLK3,CLK4,但必须不用于同一TCLK的管脚。 CLSN映像为CTS1。

现在,进入手册的信号描述并找到这些信号作标记。

对于多通道HDLC支持,需要时隙分配器A或B。你可以选择任意一个并使其它管脚的分配更简单。在本例中,假设发送和接收部分完全独立工作,发送和接收需要各自的时钟和同步管脚,这样,我们所需的管脚如下。

选择1为TDMA:

L1TXDA/L1RXDA/L1TCLKA/L1RCLKA/L1TsyncA/L1RsyncA 选择2为TDMB:

L1TXDB/L1RXDB/L1TCLKB/L1RCLKB/L1TsyncA/L1RsyncB

注意,这些管脚非常容易与其它SCC功能区分,因为他们全都以L1(第一层)开始,如果只需要一个时钟和同步,就只需要L1RCLKX和L1RsyncX。

现在去手册中的信号描述部分找到这些信号。在本例中我们选择TDMA,你会发现,L1RCLKA是CLK1的另外一个功能,L1TCLKA为CLK3的另外一个功能,这样,我们就要回到以太网的部分,选择没有冲突的CLK2和CLK4。

另外一个有趣的是L1TsyncA和L1RsyncA在器件的2个地方可选择。你可以用任意一个,在你的软件初始化时选择。为什么这样做?在一些场合,我们发现有些应用需要这样的灵活应用,要不然我们就不会有这样的功能。

最后,我们来选择一个SMC作为UART,SMC1和SMC2都可以,我们的选择为SMTXD1和SMRXD1,或者SMTXD2和SMRXD2,注意使用了SMC就意味着不可使用RTS,CTS和CD功能,(如果你一定要有这些功能,软件中断又不够,你就必须使用SCC,一定要用MPC860MH而不是MPC860DH) 观察管脚分布发现,所有功能在MPC860DH上可以实现,SMC和TDM任意选择,在你开始用多个通道时,有更多的选择机会。

GS-8 860是否可以应用在你的设计中?(4-5)

6、选择双端口RAM。

现在我们知道MPC860DH支持所有我们所需的管脚应用。下一个问题在哪里?那应该是双端口RAM。每一种协议都需要在双端口RAM中存入一定参数。在一些复杂协议中,如以太网,多通道HDLC所需的参数RAM非常大,要使用其它协议所需的所有参数RAM,在我们的例子中,SCC1的以太网占用 I2C 区,SCC2的QMC占用SPI区。

为解决这一问题,我们有一些可下载的微码可以将I2C和SPI参数RAM移到其它位置来解决,它称为“重定位 I2C 和SPI参数微码补充”。并可以在工程师工具网页上得到。

7、检查CPM能力。

现在管脚和双端口RAM已没有问题,下面就要检查通信处理机(CPM)能力是否足够以适用于应用。

决定此能力的方法在用户手册的附录A中,有一个基于MPC860系统时钟速度,以及所需的协议和它们速度的区,这一附录中,列举了各种MPC860功能在25兆赫兹MPC860上的最大能力,这张表为线性,作为举例,如果你要用50兆赫兹MPC860,就可以在上面的能力上加倍计数即可。

我们同样提供一个EXCEL文件为“CPM性能表”可以完成CPM能力计算,它在工程师工具网页。这是一个非常有用的工具,如用手工来计算,简单地用所需协议的带宽除以最大值,重复你使用的所有其它功能,将所有功能相加,不要超过1。

在培训中还会详细介绍这部分,但让我们做一个例子来说明我们所讲的,如果MPC860为25兆赫兹,我们有10兆来计算半双以太网通道和2兆bitHDLC通道,你可以使用这些带宽除以每个协议的最大值,然后相加为:

10/22+2/8 = 0.70

非常接近但小于1。所以此处理机不会超负荷。

如果你在25兆赫兹MPC860上想用64KBit的32QMC通道和一个2兆Bit通道,公式如下, (32 x 0.064)/2.1+2/8=1.22

这样就不能工作,你可以维持分配不变但增加MPC860速度到了33兆赫兹,如下: 1.22+25/33=0.92 现在CPU可以工作了。

GS-9 860是否可以应用在你的设计中?(5-5)

8、检查PowerPC CPU性能。

最后一个关心的问题为CPU核心的性能,我们的CPU提供如下的性能。

这些数字来源于Diab Compiler。

可选择多种处理机的性能是一个好消息,但坏的一面在于,它只适于内部2K指令 CACHE或更高的情况。这样,这些数字在4K/4K(指令缓冲和数据缓冲大小)MPC860系列与同样的2K/1K MPC860系列相同。

实际上,MPC860系列在同样的时钟下比MPC850系列性能高 10 - 35% , 另 一 个 常用的MPC860性能比较为MPC860在同样的时钟速度下(在4K/4K缓冲时)比 68040 快10%。

最后,我们的工程师工具提供一个“SHELL”可以使你在我们的CPU上检查你的代码,这个SHELL代码初始化芯片,开动MMU和缓冲,开始时钟,它同样指出你应将你的测试代码放在什么地方并检查多长时间完成。这个代码为Dhrystone代码。

9、价钱和购买。 这部分不在网页中,你必须与本地代理商或Motorola联系,Motorola主要的代理商为Arrow,Future,HamiltonHallmark和Wyle,我们网站有一些器件发布中提供的“直接从MOTOROLA”输出的价格,但价格是由时间和订货量决定的。

GS-10 硬件设计者循序渐进指南 (1/2)

下面的步骤在你决定开始MPC860设计时非常有用。

1、决定你所需的存储系。

MPC860为猝发性器件,所以如果所连接的存储器有猝发性的话就可以发挥更好的性能,MPC860猝发性是由4个32位字组成。如果猝发的长度写为4-2-2-2,那么前 32 位在4个时 钟周期读/写,其它32位在2个周期,这样完成整个猝发为10个时钟,下面的表举例说明了猝发读操作的猝发长度。(猝发写通常更好些)。

注意,快速存储器可以得到更好的结果,同样注意对66兆赫兹器件(或任何在半速总线模式工作的器件),真正的总线速度只能为处理机速度的一半,这样,一个66兆赫兹的器件只能有33兆赫兹的外部总线,决定66/33兆赫兹(内部/外部)器件是否快于50/25兆赫兹器件的因素在於缓存命中率和外部存储器速度。

有关不同存储器类型的更多资料可以在下面的应用指南得到。 MPC860与高速页模式DRAM接口。 MPC860与EDO DRAM接口。 MPC860与同步DRAM(SDRAM)接口。

GS-11 硬件设计者循序渐进指南 (2/2)

2、得到电路图举例。

从网页上可以得到ORCAD格式的电路图例子,最有用的为SAMBA电路图,它说明了MPC860系列如何与存储器:FLASH,EPROM,DRAM和SDRAM的连接。另外,他还说明了MPC860T与外部10/100BASET接收器连接。另外,你可以得到MPC860FADS板的电路图。但是这个板是为通用应用设计的,所以并不代表最有效的系统设计。

MPC860 PART SYMBOL:网上有ORCAD格式的一个MPC860电子器件符号。

BGAFOOTPRINT:AN1231和AN1232文件详细讨论了MPC860的BGA封装和FOOTPRINT。

3、得到用户手册和器件的错误更正。

在出版物和支持/常用问题解答中分别可以找到。

4、记住5V允许度。

尽管MPC860为3.3V器件,但它可以允许与5VTTL器件工作。

5、关注时钟问题。

尽管MPC860可以使用晶振和振荡器,我们建议如果可能仅用振荡器,振荡器可以减少操作变化或操作减少引起的时钟电路停止工作的危险。

对必须使用晶振情况时,我们建议设计者咨询晶振工厂来决定最优外围电容和晶振参数,厂家最知道使用什么样的参数。

我们也提供“302,360和8xx系列的晶振应用”应用指南,这个指南帮助工程师在使用MPC860,MC360和MC302及其系列产品时设计可靠的时钟电路,它大致讨论了产生系统时钟的几种方法。

6、关注管脚匹配。

一个普遍关注的问题是管脚匹配,这就是为什么MPC860板不在加电时工作的一个普遍原因,什么管脚需要上拉或下拉以使MPC860工作正常?我们提供了3个文章讲解这个问题,它们可以在出版物网页找到。

7、关注管脚时序。

当使用MPC860设计你的电路时,你当然要考虑时序问题来满足MPC860的要求。除了MPC860手册中的时序图表,我们同样提供了一些有用的工具来使各位理解时序需要。

在出版物网页上有MPC860电气参数表格。这个EXCEL文件根据工作速度和负载来动态计算时序需要。你可以确定你的系统总线频率,利用这个工具为你设计时序系统。另外,你可以定义管脚的负载,这个工具为你优化时序。

我们也提供可以用于ChronologyTimerTOOL的MPC860时钟电子数据书,这个软件可以帮助你看到信号和时序。

8、仔细检查硬件配置中的寄存器。

MPC860有几种不同的可编程的硬件工作模式。你在复位时对数据总线管脚加上一定电压值时选择模式,任何你没有加电的数据总线管脚将会处于缺省配置,在15个管脚中,你只需要加电4到5个,其余的处于缺省,请仔细阅读手册中的这个部分来决定你的工作模式。

9、阅读设计检查表。

如果你认为所有事情已解决,再回去阅读MPC860设计检查表,它在出版网页部分,这个表提供了有用的技巧和一些常见错误。

10、启动器件运行。

当你得到设计好的板时,第一件事就是将器件置为调试模式。在调试模式,你可以通过调试口控制,而不需器件执行任何软件。调试管脚应接至专用的连接头,这在MPC860用户手册中的

应用部分描述过。这样就可以允许许多标准的调试器来访问器件,事实上,如果你买了MPC860FADS板,你可以利用MPC8bug在主控PC上通过MPC860FADS板控制目标板,你可以在MPC860FADS手册上找到更多信息。

11、有问题?

不要忘记看FAQ找到技巧和问题

在网址:http://www.mot.com/netcommfaq

12、进入MPC860产品升级服务器。

在网页的支持和FAQ部分可以提交MPC860的实时最新消息。

GS-12 机械和器件设计

下面为必须考虑的一些步骤。

1、阅读封装应用指南。

MPC860系列为357脚塑封球网(PBGA)封装。有关应用PBGA封装的应用指南可以在下列的网址找到:

http://www.mot.com/pbga

2、关注温度范围

NETCOMM在出版物网页有一个MPC860温度范围和测量的应用指南。

如果需要扩展温度(负40到正85),就不能在所有速度上提供,要考虑热量补偿。 3、关注功耗。

MPC860功耗根据工作频率从0.4到0.8瓦。在特定频率下的功耗称随器件减小而减小,但是频率不断增加,这样的结果是对最高频率MPC860来说功耗最大为0.8瓦.

最初的MPC860内部电路工作在2.2V(而不是3.3V)下的省电模式。这种情况在MPC860或MPC850系列中不再适用.

4、批准日期。

器件批准报告可以在MOTOROLA销售办公室得到。

GS-13 软件设计的循序渐进指南。

1、决定你的工具。

越来越多外部公司提供更多的支持,这些公司的名字和联系信息可以在我们的网站得到,在我们网站的不同网页上你都可以找到MPC860第三方支持网页。

支持项目有:板测试咨询、期件驱动(软件),编译工具,外围支持器件、开发系统、仿真器、硬件模块、网络软件、操作系统和封装和插件转换器。

我们希望各位了解这些公司的产品来更好地支持你们产品设计。

2、MOTOROLA应用开发系统资料。

MPC8xx系列应用开发系统(8xxFADS)是客户最重要的支持工具。这个工具是MPC860系列器件的软件/硬件开发的平台,使用这个开发板和有关的MPC8Bug调试/监控器,设计者可以下载自己的代码,运行代码,设置断点,显示存储器和寄存器内容和通过扩展连接头将开发板连接到用户自己的板上。FADS不只是一个有效的测试工具而且是一个演示工具,你可以与MOTOROLA销售办公室联系怎样购买这个系统,在网页可以找到有关销售办公室资料。 MPC8Bug

MOTOROLA提供自己的称为MPC8Bug的测试/监控程序。这个程序提供非常简单的方法来观察和调试你的代码并完成诊断。你也可以利用新版1.5的软件编写你自己的诊断程序,你也可以在网页中找到这个程序。

3、下载MCU初始化。

你若多使用图化的接口工具进行860初始化代码的设计,你可以使用MCUINIT,这是一种菜单式的初始化代码产生器,可以运行在32位WINDOWS计算机,这个软件在网站和NETCOMM光盘上。

4、研究例外处理和中断。

MPC860EPPC例外处理应用指南详细介绍怎样处理例外情况。另外,中断处理也有2个应用指南,一个为SIU,另一个为CPM。

5、得到基本器件初始化代码。 从工程师工具箱网页,你可以得到最新的MPC860初始化代码,这代码说明了怎样编程时钟模式和芯片选择来使器件工作。

6、得到器件驱动软件和示例代码。

工程师工具箱是各位得到MOTOROLA860免费应用软件的最有效资源,在网页上,你可以找到简单的教学式示例和一些复杂的驱动程序,演示了各种协议和工作模式的应用。这些代码随时修改,所以请多进入网页查找。我们现有的例子和代码有HDLC,以太网,UART,TRANSPARENT,实时时钟, I2C 、PowerPC时钟基础,ATM SAR等。

第三方公司如AISYS,Inverness和Trillium也可以得到收费的驱动软件,它们有MPC860的RTOS。

7、阅读CPU性能应用指南。

MPC860核心有2个存储器单元和2个缓存,一个为数据另一个为指令用,我们建议从N etComm的出版物网页上研究这些缓冲和MMU应用指南来了解更好地使用缓存和MMU,它包括指南,一个特殊的缓存仿真器的调试和监控说明,和一些可以与调试器使用的代码,这个应用指南为“MPC8xx缓存和MMU性能驱动优化”。

8、了解性能检查表。

在出版物中有MPC860CPU性能检查表。这个资料基本上是一些性能应用指南中重要因素的总结。其中有DRAM处理,中断和处理核心互作模式和其它,如果你没有得到你所期待的性能,你应该从这里查找问题,MPC860有许多调试模式,它可以帮助客户得到2位和3位的性能提高。

9、有问题吗?

如果你对串行口工作有问题,请查询“CPM调试的技巧”应用指南,帮助你查找从系统存储器到管脚,从管脚到系统存储器的数据流,从中你可以找到问题在那里。

同样,不要忘记访问FAQ网页:http://www.mot.com/netcommfaq

10.进入MPC860产品升级服务器。

从SUPPORT和FAQ的网址当中,你可以找得到最新有关MPC860产品的资料,以便用户可以作出产品升级。 1-1

在这章中,你将学习。

1、了解MPC860的基本模块和功能。 2、描述每个模块的功能。 3、描述内部数据流动。 4、了解管脚。

5、描述举例应用。

1--2 MPC860基本模块

这是MPC860结构图,它包括3个主要模块:PowerPC核心,系统接口单元(SIU),通信处理模块(CPM)

PowerPC是主要的处理机单元。它通常称为 Embedded PowerPC核心 (或EPPPC) 。 它包括缓存和存储器管理单元(MMU),它在40兆时钟时为50 MIPS 指令速度。

第二个主要的模块为系统接口单元。它的一个主要功能是提供内部总线和外部总线的接口。它还提供其它几种功能。

最后,第三个主要模块为通信处理机模块,CPM在到个不同的通信设备如SCC和SMC上发送接收数据,所有的设备可以独立工作。

SCC和SMC也可以用于时分复用总线。

注意到CPM模块中有一个32位RISC微处理机。MPC860有2个CPU;PowerPC和32位RISC。

PowerPC执行高层代码,RISC处理实际通信的低层通信功能。当然,2个处理机相互配合工作。主要的方法是通过内部存储空间配合。在存储器区,每个处理机都可以设置控制位,读状态位。

同样,在这张图中,有16个串行DMA单元。每一个通信设备都有一个发送DMA和接收DMA,32位RISC控制这16个串行DMA在通信设备和存储器之间传送数据。当MPC860接收数据时,串行DMA从通信设备接收数据并放入存储器中.发送数据顺序相反,存储器中取数据,串行DMA把数据送到通信设备,串行DMA只服务CPM的RISC,但是2个虚拟的IDMA可以为用户DMA需要所用。

1-3 数据怎样流动?

这张图说明了860中数据的主要流动路线,第一路为1到3;数据从PowerPC到SIU,当指令不在缓存中或不可以缓存时,核心利用这个路线进行冲刷和存入指令操作。 PowerPC中的缓存也利用这个路线冲刷和装入缓存,MMU处理这线路上的地址。

第二条路成为1到2,数据从PowerPC到内部存储器;当存取寄存器和内部存储器中的双口RAM时使用这个线路,MMU处理这些地址,但由于2个处理机都对这个存储器写入,这段数据不应缓存。

第三条线路为4到2,数据从外设到内部存储器。当外设和双口RAM交换数据时使用这个路线。它不经常使用,但你有时会想用它。通常,数据缓存在外部存储器中,但是也有可能将数据缓存在内部存储器中的双口RAM中,它受内存不够大的限制,MMU不处理这些地址,数据不能缓存。

1-4 管脚分布

这是MPC860的管脚分布图,在用户手册中有这样详细的介绍,这里有32位地址总线,32位数据总线和总线控制管脚,因为总线控制管脚可以为任何器件提供直接的接口,大多数用户可以利用它来支持他们的存储器和I/O接口要求.但如果所有片选管脚都用上了,用户就应该使用总线控制管脚做为器件的接口,用户在使用总线控制管脚时要设计一定的逻辑来实现接口功能。

有8个中断管脚,8个存储器控制管脚.也有与硬和软复位有关的管脚,另外,也有提供用户时钟的管脚,用户可以使用晶振或振荡器或两种都用。

MPC860支持2个PCMCIA。PCMCIA管脚是独立的;也即是 PCMCIA A的管脚是专用的, PCMCIA B的管脚是与开发支持和程序跟踪功能共用的,你可以称图的右 边为系统 部分,图的左边为通信部分,对大多数端口,通信口有4个;A,B和C,D。每个管脚都可以做为通用I/O或支持至少一个与通信设备有关的选择功能如接收和发送,设计者的任务之一是决定如何选择共用的管脚,还有一些与JTAG有关的管脚,它们与开发支持共用。

1-5 应用举例

这张图说明了用户可以怎样使用MPC860的设备。

SCC可以支持多种协议,这里在左上边,SCC1连接以太网作为以太网收发器,任何一个 SCC都支持以太网协议,但在这里SCC2支持LOCAL TALK网络接口。

更进一步,可以提供支持一个或多个时分复用总线的接口,TDMA和TDMB。在这里连接了T1/E1线路和一个ISDN接口,在这种情况下,分配器将数据分配到任何一个SCC数据线上或任一个SMC数据线上,最大有6个设备可以分配。

串行管理控制器没有SCC功能强大,SMC最普谝的应用是作为终端控制器。

串行外设接口可以用与多种外设通信,它有多个收发器,可以通过SPI总线进行编程。这里说明了SPI与2个E2PROM接口。

I2C控制器也提供与外设的接口,如果用户想使用SIMM时可以利用I2C,使用I2C接 口完成 在线检测功能,以使用 E2PROM。

另外,PCMCIA控制器支持PCMCIA板。

PCMCIA外部总线和收发器必须在系统总线和插座上有电气隔离,MPC860为3.3V器件但外部时钟输入可以为5V,这样不用为时钟提供电压转接。

在前面我们介绍过有2个IDMA设备,它们可以实现外设的数据传送和存储器到存储器之间的数据传送。

最后,是存储器控制器,利用对存储器控制器编程可以实现从8位,16或32位RAM引导启动,存储器控制器可提供DRAM的SIMM接口或一个多用途的存储设备接口,存储器控制器也可以利用第三方器件接到PCI总线上。

1-6 PowerPC核心的主要部件

现在我们看一下MPC860中PowerPC核心的部分,这里有一个模块图,重点在一个指令顺序发生器,这个指令顺序发生器着重在流动到执行单元的指令,它们在模块图的下半部分。地址发生器单元利用从指令顺序发生器和转移预测单元中的信息提估下一个指令的地址,转移预测单元从指令顺序发生器中取出转移指令,在没有判决的条件转移中利用静态转移预测以使指令单元取出指令。指令队列中保留下一个分发的指令。

转移预测单元决定指令是否为转移指令:转移预测单元然后将指令放入指令队列中,指令队

列将转移预测来的指令放入指令队列的头部,然后分配到有关的执行单元。

如果不是转移指令,转移预测单元将不动作,如果是一个转移指令,转移预测单元将进行静态预测以决定是否要有转移,根据转移预测单元决定,地址产生模块生成一个或是从下一个指令地址中产生的地址或是预测转移去的指令地址,静态转移预测是根据用户编写的转移指令完成的,如果有几种错误预测,指令队列将刷新,另外的指令将进入指令队列。

这里有三个执行单元。一个执行单元支持通用的寄存器,寄存器用作临时指针和内容数据几种,有32个32位通用寄存器,它们都工作在同样的方式中,特殊寄存器用于控制和状态数据以及存储和恢复数据,特殊寄存器比通用寄存器多。

还有历史缓存(GPR),在核心发分发一个指令时,这个指令进入历史缓存,核心设置一些指令执行时的状态情况位,如果指令完成,这个指令退出历史缓存,如果指令还在缓存,同时它还在执行或者例外情况发生,MPC860这时将记住例外情况发生时的指令,同时去执行例外情况处理。

整数乘/除单元执行整数乘除指令,有一个包含位域逻辑单元的运算逻辑单元,一个为数据一个为地址,2个单元都有2个32位队列。所有存/取指令共用存/取地址队列。存/取定点数据队列处理定点数据。

2-1

在这章我们将学到

1 编LOOP程序。

2 编子程序。

3 测试和管理I/O设备位。 4 完成符号和无符号数学计算。

2-2 编程模式介绍

这张说明了MPC860大致的编程模式,它分为2个部分:用户态编程模式和监控态编程模式,用户态编程模式是监控态编程模式的子集。

2-3 用户态编程模式

首先,讨论一下用户态编程模式,在我们讨论用户态编程模式时,它与操作的问题状态的工作是一致的。

在用户态编程模式中,有32个通用寄存器,每一个寄存器为32位。所有的寄存器工作方式一样。EPPC计算是寄存器与寄存器之间的。信息是存入和取出寄存器的,在 PowerPC中,没有堆找功能,这样就可实现软件堆找功能,尽管没有堆找指令寄存器,用户可以利用通用寄存器(GPR)作为堆找寄存器。

用户态编程模式中另外一个寄存器为条件寄存器(CR),它有4个,我们将在本章详细讨论。

在用户态编程模式中还有4个特殊用途寄存器,SPR1为整数.用于多精度计算的例外寄存器(XER)有溢出位,进位位和溢出进位位。

下一个是连接寄存器,这里是特殊用途寄存器8(SPR8),它存储一个子程序调用的返回地址。

SPR9是计数寄存器,它通常用于LOOP程序中的计数。另外,编程者也可以利用这个寄存器做GOTO指令.在这里,子程序存储一个地址,并转移到地址指针指向的地址.

剩下的2个特殊用途寄存器为基时钟寄存器SPR268和269,它们为64位时钟值,可以用作时钟标记,它是PowerPC结构中的一部分,用户可以在只读情况下利用这些寄存器读取基时钟。

最后,在用户编程模式中有一个程序计数器,它不能被用户读写。

2-4 监控态编程模式

现在讨论监控态编程模式,我们讨论的监控态编程模式是与特殊状态工作同步的。 在监控态编程模式中有器件状态寄存器,它包含了比如允许例外处理中断这样的器件状态信息,同样也有一组标准的特殊用途寄存器,2个为标准SPR:数据存取DSISR和DAR

下一个寄存器为递减寄存器,这个寄存器是PowerPC结构中功能的一部分,这一寄存器的值不断减少,但值为0时可以设置发生中断。

另外2个寄存器,保存和恢复寄存器0和1(SRRO和SRR1)用于例外情况处理时,例外处理服务程序将器件状态寄存器和程序计数值存入这2个寄存器中。

还有4个用于操作系统的寄存器。

特殊寄存器284和285可用于基时钟,在这种情况下,监控状态可以通过这2个寄存器对基时钟进行读写。

特殊寄存器287保存处理机版号和型号。

还有更多的特殊用途寄存器,包括那些影响器件状态寄存器的寄存器,控制调试和开发支持的寄存器;影响缓存和MMU工作的寄存器,在随后本章将详细介绍这些相关寄存器。

2-5 数据和指令(1/2)

PowerPC有3种数据长度,字节,半字长和全字长,同样我们将介绍PowerPC的位操作,位由左到右,按最重要到最不重要以0到31排列,它非常严格但不是全部这样重要,位0最重

要,除非有特殊的操作。

PowerPC 为BIG ENDIAN。

PowerPC结构不支持动态总线位数,所以它不允许错位存取。

PowerPC中的指令总为字长,指令为字长,所以2个低位的字节地址都不需要或全为0。

2-6 数据和指令(2/2)

有2种基本的指令格式,一种包括指令助记符,下面有3个参数RD,RA和RB,RD为目的寄存器,RA和RB为源寄存器内容,在图中右边的例子中,R3为R4和R6的相加,在逻辑运算中,如“OR”,R3与R2或结果存入R6。

相似的格式为“立即数指令”在这里“I”跟在指令助记符后面,在这种情况下,第三个参数为16位的立即数,在图中的右边举例中,R4与750相加,加上符号位,结果存入R3,在逻辑运算中,R5与Ox100 \,符号扩展,结果存入R4。

记住操作总为32位,写32位到RD。

表中下半部分讲解了参数和操作的顺序,这里说明有3个参数的缩写,在每种情况下,RD是RA和RB操作的结果,在减法操作种,RD为RA减RB。

在“subf”指令种,将RA和RB变换,这样RD为RB减RA,SUSF为一组简化的指令缩写,它们在 PowerPC Environments 书种有详细介绍。

2-7 指令总结

这里总结PPC指令集中几种常用的指令。

首先为运算和逻辑指令,它与通用寄存器有关,源数据来自GPR或16位立即数,目的是GPR寄存器,操作为32位,GPR中存放32位更新数据,大多数都可以望文生义,注意在最后列的“cntlzw”指令“计算字中的第一个0”,在一个字中找到1时将一个指令中的0的数量找出,它在决定例外寄存器中最高优先服务时有用,我们将在例外处理那章讨论。

下面为装入存储指令,它们对数据在存储器中和通用寄存器中传送非常有用,如果数据小于一个字,为半个字或一个字节。指令总是使数据变位32位,将不同位填0或符号扩展.

“lbz”为“存0入字节”。

“lha”为“存半字”,意思为将符号扩展到一个字。

“lhz”为“存半字扩展”。

下一个为“lwz”指令,它为“存字扩展0”它为PPC在64位结构中使用准备,但在32位结构中也可以使用。这个缩写不变。

还有“store byte”指令,“store half word”和\。

下面我们看到\和\。

另外,还有2个指令结尾位“brx\- \和 \它 对 PPC 存 取 小 ENDIAN 格式数据非常有用,有可能是PowerPC与其他使用小ENDIAN格式数据的处理机共用存储器,为使PowerPC可以存取这样的数据,这些指令允许存取这样的数据。如果数据以小ENDIAN顺序进入总线,就把它存为大ENDIAN顺序。

2-8 指令总结

下面介绍支持指令流控制的几个指令,它包括转移指令.这里我们看到转移指令,条件转移指令,它们利用条件寄存器的位来决定是否转移,在指令的右边说明了条件寄存器,它分为4个4位域,在每一域中的位代表小于,大于,等于和总和溢出,这个寄存器提供了8种支持条件转移指令的条件域。

同样还有转移到计数器的指令,SPR9用在用户态编程模式中

特殊用途寄存器8可以完成基于接连寄存器的转移指令,SPR8存储着转向子程序的地址。

还有自陷指令,一个系统调用指令,“rfi”用于例外服务程序,还有许多影响条件寄存器的指令。

下面,我们看到处理机控制指令的表,一个非常重要的因素是这些指令可以完成特殊用途寄存器之间和通用寄存器之间的数据交换,不可以直接对特殊用途寄存器中的值进行处理,但是,可以将一个值先拷贝到一个通用寄存器上再处理,操作后,将信息存到特殊用途寄存器上。

“特殊寄存器移出”指令将特殊寄存器中的数据移到通用寄存器上,“移入特殊寄存器”指令将通用寄存器上的数据移道特殊寄存器上。

举例说,如果用户要初始化计数寄存器,就要将数据装入通用寄存器,这里“装入立即数”指令装入R13和计数寄存器,然后,移入特殊寄存器指令将R13中的值装入计数寄存器。

2-9 指令总结。

下面介绍同步指令,它用于I/O控制和多处理机同步。第一个指令为“eieio ”让我们在下张 图中详细了解。

2-10 什么是“eieio”指令。

“eieio”为加强I/O的顺序操作,“eieio”指令提供了对I/O设备操作时影响存/取指令的顺序功能,当在取指令后对I/O使用存指令时,编程者要利用“eieio”指令。

举例说明,让我们考虑一个I/O设备处于一个外部存储器空间,它包括发送线和发送数据寄存器,这里还有TDRE状态位,它指示什么时候发送数据寄存器为空,在本例中,用户希望发送2个参数,首先,程序包括一个检查TDRE值的指令,在TDRE为1之前指令向前工作,当TDRE等于1时,程序将参数写入发送数据寄存器。

这时,让我们跳过3行到第4行,程序再一次观察TDRE位,当这位为“1”时,写入第2个参数进入发送数据寄存器。

通常,PPC为优化资源的目的可以不按顺序在装入之后执行存入,但在本例中就不能正常的工作。注意在第2行先执行第4行,如果那样做更有效,这时,将有2个TDRE位检查发生,同时写入2个参数进入发送数据寄存器。

为有效地处理这种情况,编程者加入第3行“eieio”指令。它标志PPC存入必须在装入指令之前完成。

2-11 什么是eieio指令。

在MPC860中有一些使用eieio的情况,第一个例子在左边,使用命令寄存器,程序将命令写入一个命令寄存器,CPCR,然后判断最不重要的位是否位“0”。

然后子程序写另外一个命令,这种情况下,发生写入第一个命令后紧接着存入操作和判断最不重要位,包含了装入操作“eieio”指令保证了存入和装入顺序执行。

第2个例子在右边,取一个向量值,为取一个向量,程序向CPM中断向量寄存器(CIVR)中的中断确认位(IACK)写入1,然后完成CIVR寄存器VN的读操作,我们又一次看到了存入后的装入,在两个指令中必须插入“eieio”指令。I/O设备必须在非缓存和写入页中,我们装在缓存部分讨论。

2-12 指令总结。

下一个同步指令为“isync”和“sync”,让我们进一步讨论sync指令。

2-13 什么是执行同步?

如果以下情况发生一个指令执行同步。

1、指令暂停。

2、非正常结束,报告了发生例外原因后,没有完成所有指令。最通用的一个例子为移入器件

状态寄存器。这里说明的为移入器件状态寄存器R3,当这条指令执行时,它要等待所有正在进行的处理完成后进行,然后在执行下一指令时把新的值存入器件状态寄存器。

另外,一个MPC860特殊同步指令为“移入特殊寄存器”,CPU内核外寄存器使用,用户手册上有详细介绍。

2-14 什么是同步指令?

同步指令在下列条件下执行同步操作: 1、等待直到所有进行的存储器操作完成。

2、发送一个地址广播,虽然在MPC860中没有实现。

当参数中的一个状态改变时必须使用不同指令。 1、所有操作必须在参数改变前完成和/或。 2、参数必须在其它任何指令之前改变。

举例为使用同步指令进入低功耗模式,最好时在所有指令完成后进入低功耗模式,然后在退出低功耗模式之前不执行指令。

这里看一个通用例子,首先程序在进入低功耗模式之前执行同步指令,这就保证所有执行中的指令完成。

第2个例子为MPC860专用。写一个值进入PLL的低功耗模式位,低功耗复位控制寄存器(PLPRCR)使MPC860转入低功耗模式,(PLPRCE寄存器为内部存储器空间中的一个)。这样,在这种情况下,编程员希望进入低功耗模式前完成所有指令,“sync”指令完成这些操作。编程员也希望进入低功耗模式后不在有指令执行,第2个“sync”指令完成或这项任务,保证在任何指令执行之前,将系统进入低功耗模式。

2-15 什么是同步指令?

第2个例子为MPC860专用,在本例中包括了一个中断服务程序,编程员希望通过写入SIMASK寄存器来禁止所有中断,程序中首先写入SIMASK值,然后为sync指令在允许中断之前,这就保证了低优先级中断被禁止,因为在允许中断前要完成存入存储器操作。

2--16 指令总结

让我们讨论“isync”指令,这里为同步指令的表。

2--17 什么是“isync”指令。

isync指令是内容同步指令,它完成 1、完成执行同步。

2、在新的内容下重载指令队列。

isync指令在内容发生变化时使用,如当允许指令缓存或在存取没有结束但执行同步时。

在举例中,第1和第2行允许指令缓存,在这时,指令队列中有几个指令。但都不在指令缓存里,因为它们以前都没有被允许,用户在缓存允许时就把这些指令放入缓存。为执行这个功能,程序加入了“isync”指令,将新的内容重新装入,“subroutine call ”“rfl”指令和大多数正常处理指 令也是内 容同步。

2--18 指令总结

这里还有2个同步指令“lwzrx”“stwcx”,它们用于预留系统方面,这在多处理机应用时非常有用,PowerPC需要时可以预留共用存储器的内容,而不用擔心另外的处理機重復使用已預留的存儲器的內容,这些指令与68000中的TAS和CAS有相同的操作。

2---19 指令总结

下面说明的为存储器控制指令,它实现缓存和存储器的数据传送,许多指令与缓存有关,在本章稍后将详细讨论。

2---20 指令总结

这里介绍简化或扩展的指令缩写,简化的缩写可以更简单地写和理解汇编语言程序。

如前所述,有一组简化的缩写,有一些为可理解的。如“nop”和“move register”和“not”。

简化缩写在转移操作时最有用,这里有“大于等于转移”。实际上它是 bc 4,0,loop指令,但它非常难理解。

最后,我们看以下“load immediate ”,放入目的寄存器。

2---21 解释条件代码(1/2)

如以前我们所见,条件寄存器有8組,4个位域,CRO到CR7,每一域都代表整数计算或比较的 结果,每一域都以“小于”“大于”“等于”“总和溢出”条件记录。

唯一一个自动影响条件代码寄存器的是“比较”指令。

其它指令如“加”“减”“乘”“除”并不影响条件代码寄存器,除非编程者希望它们做,编程者必须特别指定需要记录条件代码,如图左边所示。

4个条件是“小于”当rA小于rB时,“大于”当rA大于rB,这些条件可以为有符号也可以为无符号运算,下一個是“等于”,當rA等于rB,第4位是总和溢出,它是从XER寄存器拷贝过来的总和溢出结果。

2---22 解释条件代码 (2/2)

比较指令可以影响任何条件寄存器域。

基本的比较指令语法为缩写cmp后面进跟著4个域。

第一域说明CR0~CR7中哪一個受影响,第2域指出长度,有2种长度选择,32位或64位,MPC860中只有32位。第三和第四域指出將會比较的寄存器rA和rB。

第二种比较的格式为“cmpl”比较逻辑,第三种为“cmpi”立即比较,第四种为“cmpli” 是立即比較邏輯;

比较功能也可以用简化的缩写完成,第一个例子是“cmpw r13, r14”,等于“cmp cr0,0,r13,r14”,表中下面的例子说明可以在操作数中包括cr5,它是用来指定cr5而不是crO。

在下面还有2个举例,有2个寄存器,r10包括16进制的7千万,r11包含16进制的8千万,第一个例子比较r10和r11并把值存入cr5中的条件位,在这里cmpw是一个符号比较,即r11和r10中的值有符号值。16进制,7千万是一个大正数,16进制8千万是一个负数,这样r10比r11大所以大于位设置,而“小于”位和“等于”位为0。

下一个指令相似但为逻辑,在这里,参数作为无符号数处理,这样,16进制8千万大于16进制7千万,所以11比10大, 这样小于位设置,而\大于\位和\等于\位为0。

2---23 使用和记录运算信息

这里我们学习使用XER寄存器的多精度运算,XER包含3个位:总和溢出、溢出和进位。

编程者需要指出使用或修改XER的那位,可以利用后缀的“C”“E”和/或“O”。“C”在CA中记录进位,“E”利用CA作为指令中的操作数在CA中记录进位。最后,“O”在溢出和总和溢出中记录溢出。

作为例子,一个简单的“add”指令不使用XER,“addc”在CA中记录进位,“adde”利用CA作为操作数并将进位记入CA,“addo”在OV中记录溢出,“addco”在OV中记录溢出,在CA中记录进位。

2---24 使用和记录运算信息

作为举例,编程者希望加2个64位操作数,一个操作数在通用寄存器3和4中,第二个操作数在通用寄存器14和15中,结果存在通用寄存器13,14和15中。

这个操作由以下指令完成:

1、第一个指令r13, 0将立即数0存入R13去清除寄存器13。

2、第二个指令“addc\,它将总和存入r15并将进位存入XER。 3、然后,使用“adde\”,将r3,r14和XER中进位相加,将结果存入14并 进位存入XER。

4、最后为“adde\”,将进位存入r13,加法结束。

2---25 转移类型和选址

这里为可用转移类型总结表,它说明了转移缩写,转移操作和转移目的地址的產生和範圍。每类型有“L”选项,它可以将返回地址存入连接寄存器中。

有“L”的条件转移不管是否有转移发生都将返回地址存入连接存器中。

“GOTO”是由将GOTO地址放入计数寄存器(SPR9)然后执行“bcctr”实现的。执行“bclr”完成从子程序返回。

第一个转移缩写为“b”,或转移总是相对的,這樣容許編程者轉移到程序計數器的相對地址操作,相似的为“BA”它完成转移到绝对地址操作。

条件转移在一定类型的条件存在时转移。

还有相对连接寄存器中的条件转移和相对计数器中的条件转移。

大多数转移指令后缀“l”(lower case l)允许于存入与连接寄存器下一个指令 地址相关的执行,一个例外为“绝对转移”它以“bla”形式出现。

2---26 转移操作

这张图说明了所有转移指令类型的操作和计算转移目标地址的方法,条件代码标志,减计数器都可以控制转移指令的程序转向。

这张图分为2个部分,上半部表示转移是否进行或是进入下一指令,下一半部分说明了4种计算转移指令使用的计算目标地址的方法,让我们先看下半部分。

程序的转移地址可以在计数寄数器或连接寄存器中得到,指令本身提供的绝对地址也可以成为转移地址,由指令提供的值与程序中当前值相加计算的相对地址也可以作为转移地址。

现在我们看上半部分图,“相对转移”和“绝对转移”指令不需要任何条件处理,所以它们都跳过决定逻辑和目标地址计算和转移,条件转移或“条件绝对转移”指令要检查条件是否为真,如果条件不真,转移指令转入下一条顺序的指令,如果条件为真,

程序计数器装入转移指令。

有一些指令决定于计数器:“bdz”“bdnz”“bdnzt”和“bdzt”。当这些指令执行时,计数器

是减的,对其中2个指令,它要检查计数器不等于0,和对另2个指令要检查计数器等于0,如果其中一個回答为是,而又没有另外条件时,转移指令作用。如果结果为“不”转入下一条指令。

如果有另一个条件在内,必须要检查另一条件,如果为真就转移。

2-27 条件转移指令

这里说明了条件转移指令类型,缩写“bc”后跟着3个域:“bo”、“bi”和目标地址。

操作码种“BI”决定在条件寄存器中判决真或假。“BO”包含表中的一个数字,它控制条件或判决转移。表中每个数字描述了一个特定的转移类型。从简单的“如条件为真”到复杂的“入减计数器,如果条件为真并減计数器不等于零”。

注意表中每个条件都有2套值:偶和奇,偶值提供了缺省转移预测。换句话说,预测为当显示为负时进行转移,当显示为正时不转移。奇值提供相反的预测。

2---28 条件转移指令----举例

让我们来看一些条件转移的例子。 首先为条件转移。“BO”为“12”说明转移条件为真。“B1”为“2”说明程序要检查条件寄存器中的第2位。即CRO中的“eq”位置位,这样,当等于设置时转移到目的地址。如果程序员希望完成预测相反的相同指令,应该将“BO”改为“13”在简单缩写中,它利用在指令缩写前加一个负号实现。

对条件寄存器中的每一位我们都可以完成相似的转移,如例中所示。“branch conditional 12,14”,“14为CR3的“eq”位置”,它等效于简单缩写中的“beq cr3, target”.

另外的例子是“branch conditional 4”‘4’表示如果条件为假時转移。 16“代表 CR4中的“小于”位。相对的简化缩写为“branch if not less than cr14, target”它还可以寫为“branch if greater than or equal”.

下一個例子是“branch conditional 16”,“16”代表减计数器,如计数器不等于 0转移,在这时,不测试条件位,所以在有关中写0,相对的缩写为“branch and decrement, not zero”to target.最後例子是 “branch conditional 8”“8”代 表减计数器,如果条件为真并计数器不等于0转移,条件为第2位,即CRO中的“eq”,紧跟为目的地址,相对缩写为“bdnzt eq, target”。

2---29 控制程序流程练习

这里为几个控制程序流程的练习,下面看第一个例子。

这段程序从FIFO中取数据字并存到存储器缓冲中,直到有值为0的数据字存入缓冲区,第一

步是取字0放入从r14和r13指向的地址,它从FIFO取字。

下一步为将字与0比较,它可以用“cmpwi r13, 0”指令,然后程序必须将字存 入存储器缓冲区,然后如果字不等于0。转移LOOP。

第二个例子与第一个相似。程序从F1F0中取528个数据字并存入存储器缓冲区。

第一步为初始化计数器,2个指令完成这个任务,“load immediate r13, 528”和“move to special register CTR, r13”

下一步为“load word zero”, 从r13和r14指的位置從而從FIFO中取得字 。 然后程序将字存入存储器缓冲区,

第4步为执行,指令“bdnz”然后减计数器,如果计数器不为0,程序回到第2行,不然到第5行,循环执行528次。

2---30 控制程序流程练习

第三个例子为结合前2个,程序从FIF0中取数据字然后存入存储器缓存直到有0存入缓冲区或达到528个最大值。初始化计数器,程序执行\到计数 寄存器,然后程序执行\从R14和R13所指的位置:下一步指令 \将0与r13比较,然后程序将字存入存储器缓冲区,下一个指令为减计 数器,如果计数器不为0和字不等于0,程序转到2,不然到6,这个指令为“bdnzt ne, loop\。

2---31 写子程序和I/O处理

调用子程序命令将返回地址存入一个单独位置:连接寄存器(LR),它要求调用其它子程序的子程序调用之前将连接寄存器放入堆找,然后在子程序调用后把连接寄存器从堆找中恢复,\是子程序不调用其他子程序,也不需要保存和 恢复连接寄存器,GPR寄存器使用来指出什么GPR用于保存和恢复。

这个例子说明了一个子程序在堆找中保存,恢复连接寄存器。

在主程序中有几条指令,包括转移到子程序指令“bl sub1\当“bl sub1\指令执行 时,程序计数器移入连接寄存器,sub1移入程序计数器。

程序sub1执行几个指令,然后调用另一个子程序sub2,注意如果sub1简单地调用第2个子程序而不采取任何步骤,连接寄存器的内容被复盖,于是就不能回到主代码,这样,就需要程序员将连接寄存器的内容进入堆找,现将两个步骤加在一起,首先\指令把连接寄存器的 内容移到通用寄存器,跟著是\指令把通 用寄存器存入堆找,现在利用“bl,sub2”指令可以安全的调用第2个子程序。sub2执行并返回sub1,程序从堆找中取值并存回连接寄存器,sub1继续执行,在最后执行bclr指令。使用连接寄存器的值回到主程序。

2---32 写子程序和I/O管理

另外一个重要的功能是处理I/O设备,程序员利用和修改测试RAM和ROM位置一样的方法测试和修改I/O设备的寄存器,这是因为I/O设备为存储器映向的。

第一,存入指令将数据写入GPR,然后,程序测试和修改GPR的数据,最后,存入指令将数据写回设备。许多I/O设备为8位宽,MOTOROLA建议,从管脚D0到D7连接这些设备。许多

I/O设备要求正确的管脚顺序,在这时设备的DO必须与MPC860的D7连接,860中DO与设备中D7连接。编程员可以设置指向I/O设备的指针。然後每一个寄存器都可以进行移置。

这个例子中假设存储器控制器已完成。

例子中“load byte zero\从 rA指向位置偏移0的位置取数目的寄存器。另一个例子为 “load byte zero\从 RA指向位置偏移5的位置取data2的内容,并存入r13。

可以用同样的方法存信息,使用“store byte”指令从寄存器到rA指向位置位移\的 位置。

3---1 在这章中,我们可以学到

1、变地址存取存储器。 2、定地址存取存储器。 3、单指针存取存储器。 4、增加或减少指针。 5、入栈和出栈。

6、将32位数存入寄存器。

7、在小或大ENDIAN模式存取数据。

3---2 寻址能力介绍

装入,存储和缓存指令用于寻址模式,有3种基本寻址方式。

第一种为立即数寄存器非直接寻址,有效地址为寄存器rA加上位移“d”,位置“d”在 寄存器非直接寻址中为一个16位负号值,可以扩展到32位。

第二种为寄存器非直接寻址,这里有效地址为2个通用寄存器的和。

第三种为非直接寄存器寻址,它只用于串存取,在这时有效地址为一个单独寄存器,

这里介绍的材料重点在前2种寻址模式,第三种很少应用。

一个特殊的情况为有效地址为当rA等于通用寄存器0,当rA等于通用寄存器0时,用0而不是用GPRO的值,这样将有效地址减少为单变量和常数。

这个图讲解了所有寻址模式变化。

首先,检查rA是否为GPRO,如果是,用0,如果不是使用指定的寄存器,如果寻址方式为有值的非直接寄存器方式,此值与rB相加,反过来,如果寻址方式为立即值寄存器非直接方式,值与“d”相加,如果寻址方式为寄存器非直接方式,值与\相加,其结果成为有效地址,并用作存取石存储器,如果为一个变化方式,有效地址放入rA中的通用寄存器。

一些使用寻址模式指令的举例在图的下半部分说明了。

第一个是“load half-word alagebraic indexed”,有操作数rD,rA,rB

“load word zero”有操作数rD,d(rA),还有例子“store word”和“store byte \。

缓冲指令用同样方式进行,特别是值非直接寄存器,在这里操作数中无目的的地址。

3---3 使用(rA|O)+d寻址

这张图说明使用非直接寄存器非直接寻址方式,在这里,指令中的rA寄存器要被检查是否等于rO,如果rA等于rO,使用O,如果rA不等于rO,使用rA的值。

使用的结果与指定的16位带符号扩展的移位相加,总和为有效地址,用于存/取存储器,如果需要,应修改RA中目的通用寄存器。

3-4 使用(rA|O)+d寻址-举例

下面说明一些具有非立即值的寄存器非直接方式的实现。

首先,我们看指令“lbz r6,10(r8)”;值10为OxOA,它与rA值相加,举例中为OxOO01OOOO,总和为OxOOO1OOOA,将1000A中的字移入r6。

让我们现在用同样的例子,将r8改为rO,这就意味着程序使用literal 0 而不是存在 r0中的值,总和为“10”或OxOA,它使程序从一个不变地址取一个位置,在这例子中的位置是0x0A,然后指令从OxOA位置取C5值放入r6。

一个改变功能的例子为“load byte zero,updated”,操作数为r6,-10(r8),为 得到有效地址,r8中的值,OxOOO10030先减10,结果为0x00010026,将在10026的值放入r6,有效地址放在r8中。

3-5 使用(rA/O)+(rB)寻址

这张图说明了寄存器间接寻址模式的使用,在这个情况下指令中的rA寄存器被检查是 否等于r0,如果rA等于r0,使用literal O,如果不等于r0,使用指定寄存器中的值。

使用的结果值与指令指定的寄存器B中值相加,这样产生有效地址。用于存取存储器,也可能用有效地址修改rA内容。

3-6 使用(rA|O)+(rB)寻址

这里说明了寄存器间接寻址模式的一些例子。

第一,我们看到指令“lbzx r6, r5, r8\加r8值”形成有效地址,取出值放入r6。

让我们用一个相同的例子,把r5换为r0,r0看为一个literal 0有效地址为r8值加 0,这里为0x00001000,在本例中,取出单指令指出的数据,存储器中内容放入r6。

最后,可以利用这种寻址方式完成修改功能,这里我们有一个“load byte zero updated, indexed”指令,r5,r8的和形成有效地址,相关位置0xABCD0010中的值放入 r6,有效地址放入r5。

3-7 入堆找/出堆找练习

我们现在熟悉入堆找和出堆找指令,EPPC处理机系列为非堆找基础的系列,硬件中无 堆找,用软件实现堆找,GPR1为应用2进制接口(ABI)标准堆找指针。

用数据的字数减堆找指针然后将数据存入存储器,存数据入堆找. 从存储器中取数据然后根据推出堆找的数据字数增加堆找指针。

首先,让我们写一个将GPR3推入堆找的指令,它可以写为“stwu”指令---“store with update”有操作数r3,-4(r1)。

它将r3中值写入(r1-4)指定的位置,然后将新的有效地址放入r1。

接着,出堆找,让我们写一个将字0从出堆找写入GPR4的指令,它可以为“load word zero”指令,操作数为r1,r1,4来修改堆找指针。这样便把字从出堆找写入GPR4,跟著指令必需是\操作数为\这样便更新了堆找指令的值

3-8 使用“lis”装载32位数字---addi

要用2个指令装载一个32位数字,“lis”为第一个,为帮助我们了解“lis”,我们先 考虑“add immediate”指令。

这张图说明了“addi”指令的操作,在这里,指令中的rA被检查是否等于rO,如果 等于rO就使用literal 0值,如果rA不等于r0使用rA中的值。

使用的结果值与指定位置中的符号值相加,总数放入目的通用寄存器.

3-9 使用“lis”装载32位数字---addi举例

这里的例子说明指令\这里r0当为literal 0位移,符号扩展放在 r6中,指令简化缩写为“lis,r6,0x8234”。

3-10 使用“lis”装载32位数字

另一个“add immediate”指令为“addis”---“add immediate shifted”指令。

这张图说明了\指令的操作。

“addis”指令与“addi”指令工作相似,关键的不同之处在位移值放在高16位,低16位为0,寄存器从目的寄存器中取最终值。

3-11 使用“lis”装载32位数字-addis举例

这里的例子说明“addis r6,r0,0x8234”指令r0代表literal 0,位移为Ox82340000, 它也为放入r6中的值。指令简化缩写为“lis r6,0x8234”。

3---12 装入32位数字

2个指令完成装入32位数字,我们己经讨论过“lis”指令,如果操作数为“高常数”与操作数“低常数”为一个字,指令顺序为表中上面的将字装入GPR5寄存器。

首选说明的为“load immediate shifted”它将一个常数放入r5半字中的上半部, 然后“or immediate”将常数放入r5下半部分.作为练习,我们可以写指令将立即数 OxDEADBEEF放入有效地址OxABADCAFE中。

可以写为“load immediate shifted”到r5,OxDEAD,接着为“or immediate r5,r5,OxBEEF\,然后紧接着为“load immediate shifted rB,OxABAD\,紧跟着 为“or immediate, r6,r6,0xCAFE”。然后跟着为 “store word r5,O(r6)”或 “store word ” r5,rO,r6。

3-13 总结4个rA=GPRO特殊情况 这里只有4种情况下,rA=GPRO,结果为rO中为literal 0值。前2种情况与寻址方式有 关,它们是立即数寄存器间接寻址和寄存器间接寻址。

另外2个情况为“add immediate”和“add immediate shifted”中rO在rA位置。 第一个例子说明指令“addi r1,r0,0x1000”它是一个rO作为literal 0的指令,指令 结 束时,r1值为0x1000。

第二个例子说明另一种情况,r0在rA位置认为是litral 0,结果为0x1000,在r1字上半 部分,同时0x0000在字的下半部份,最後,第三个例子说明\指令,它跟之前4种情况不一 样。它不将r0认为literal 0,结果为r0和r2的和为Ox12350000,然后放入r1。

3-14 什么是ENDIAN模式?

ENDIAN模式为字中的顺序,不是位:是怎样在存储器中传送和存储,记住尽管位是从0到31编号的,它没有任何意义。

大ENDIAN在MPC860中是指定的,第一个图讲解了对程序员来看的存储器中结构,在举例中,值0x12345678以大ENDIAN顺序存储,一个存储器将如所述对字以确定顺序重组,从最重要位到最不重要位。

第2图说明数字从小ENDIAN形式是怎样出现在存储器中再到程序中。存储器中有相同的值0x12345678,将字以相反顺序存储。

3---15 PpwerPC \小\

最后,可以有PpwerPC 小 ENDIAN 模式,装入和存入此模式的数据入存储器,会发生 地址MUNGING,地址MUNGING指的是\在地址中最不重要的位,举例说明,如果编程员想处理在14即OxOE结尾的位置的一个字,他就用Ob111,将它“xor”产生MANGED地址Ob1001,这个字将在结尾为9的地址处理。

举例,如果值Ox12345678存在地址N的大ENDIAN 模式。

存储器中内容将表现为图例中存储器表中右下角第一列。作为比较,如果值0x12345678是以PowerPC\小\模式存在地址N中,值实际存储在N+4地址上,尽管它还是以大ENDIAN存储。除非你有特别的原因要反着做,MOTOROLA建议你在MPC860中以大ENDIAN顺序操作。

4-1 在这章中将学到:

1、允许、不允许缓冲。 2、无效缓冲条目。

3、锁定、开锁需要快速和明确执行时间的关键代码段。 4、维护缓存在多处理机环境下的一致性。

请注意,在本材料中有很好的缓存和MMU应用指南可以为你提供更好的理解。

如果要求的数据不在缓存,缓存控制器完成外部操作。然后缓存控制器将数据装入缓存内,将数据原来的位置做为记号。标识它为有用。

缓存控制器将标记与下一个顺序存储器地址比较,如果相配,即击中发生,数据就会以外部处理部分的时间送到要求者。

这里有指令和数据缓存,缓存有许多行。

缓存块或行(两词同义)包括标记值和数据行,,每个缓存行包含决定数据是否已写进缓存行和行是否有效的状态位,同样,每个缓冲行有用于锁定条目的状态位。

这样这一个条目将永远不会跑出缓存,用户在重要资料和中断程序中可以锁定缓存行条目。

最后,在数据缓存中,有一个不用位,指令缓存只读它,但数据缓存为读写,有些情况下,数据可能已写入缓存,但不进存储器,那麽便将不用位设置,可以使这种情况发生。

4-2 缓存结构和流程:

数据和指令缓存为4K字,两路组相连物理地址缓存。缓存有128个集,每集2字线,4字长

宽(块),指令缓存为只读,数据缓存为读/写。

首先,看一下指令缓存的操作。

缓存的存取周期是从指令单元要求指令开始的,当核心分发一个指令地址时,地址的前21位送到MMU,然後21至27位用于指定缓存中128集的参数。

有2条数据行选择列,2种标记与指令地址中的0到20位比较,相同即为击中,假若没有一种标记相同,又或者那相同的标记无效,那麽便无效,如果其中一种标记击中。与缓存相关的数据击中,包含总数4个字,成为可用,指令中28和29位地址用于从缓存行中选择标记相同的字,指令被立即从指令单元送入内核。

在缓存无效情况中,无效的指令地址以4字长猝发传送读请求方式放到内部总线上,缓存控制器读一个新行到缓存,以0或1方法修改这一行,如果有一个非法条目出现在缓存,这个条目将被替代,如果2行都无效,缓冲控制器修改最后用的一行,锁定的行从不修改。

4---3 数据缓存

数据和指令缓存都为4K字,两路组相连,物理地址缓存,缓存有128个集,每集2线,4字长宽(块),另外,数据缓存有不用位,因为它可读/写。

数据缓存的操作基本上与指令缓存相同,缓存控制器使用翻译机构包括发送到MMU地址的头21个字节,和使用地址的下7位选择参数集。

读指令操作与指令缓冲读操作相同。

写操作与读操作一样具有击中,缓存操作方式有写入或写回的。这与在MMU编程一样,在写回的方式中,写入数据的缓冲行根据修改有效状态改变,意思为有效位和不用位都设置,而外部相关的存储器位置内容不变。

在写入模式的击中写入操作中,修改缓存和外部存储器,而相关的缓存行保持为不修改有效状态,意思为不用位不置位。

在写回方式中时,从外部存储器读一行,放入空位或用最近不常用方法选择集,写修改缓存中的行,改变为修改有效状态,所以有效位和不用位都设置,外部存储器位置不变。 在写入模式中写不中将写入外部存储器,不影响缓存。

4-4 控制缓存模式

数据缓存功能有2种不同模式:写入或写回模式。

用户用MMU控制缓存,MMU将存储器配为页,用户决定那一页为缓存专用,可以控制决定那些页为写入或写回模式。

将WT等于1,数据缓存工作在写入模式而不可重分配,如果写入存储器时击中缓存,就修改缓存条目,修改主存储器,相对如果写入存储器时发生不中,只有主存储器修改。

4---5 控制缓冲模式:

当WT为0时,数据缓存工作在写回模式而且可以分配,如果写入存储器时击中缓存,数据只写入缓存,不用位设置,相对地若写入存储器时发生不中,缓冲控制器从主存储器中将数据装入缓存,数据只写入缓存,不用位设置。

4---6 缓存指令和操作:

缓存支持PowerPC结构的缓存指令,还增加了一些特殊操作以帮助控制缓存和调试存入的数据。

大多数时间,用户喜欢允许缓存,但不直接在缓冲上工作,但是,有时,用户希望在缓存上实现一定的操作。

860提供2种、直接工作在缓存上的方法,第一种为通过此处列出的缓存指令实现。任何PowerPC都支持这里列出的缓存指令,这些指令包括向存储器写入行,从存储器取出行,有效解除行和连接,这些指令要求一个存储器地址来指定存取的行,“dcbi”指令是专用的,因为修改的数据会丢失,标记与“dcbi”比较。

4---7 缓存指令和操作 另外,MPC860支持这里所讲的特殊实现操作。它们通过写入多个或1个特殊目的控制寄存器,这些操作包括装入和锁定块,解锁块缓存全部解锁和连接。

6个特殊目的控制寄存器用于控制指令缓存和数据缓存,编程模式包括数据控制和状态寄存器,一个指令缓存控制和状态寄存器,一个用于数据和指令缓存的地址寄存器和一个用于数据和指令缓存的只读缓存数据端口。

编程模式:

4---8 这里介绍有寄存器支持指令缓存的编程模式。

第一个寄存器为指令缓存控制和状态寄存器,这是一个32位寄存器,大部分位为保留位,其它的位为只读,还有一些命令异常域。命令域允许用户写他们直接在缓存上操作时希望执行的命令。这样的命令有“允许缓存”“装入和锁定”“解锁行”和“解锁所有”,指令缓存地址寄存器允许用户定义在控制和状态寄存器种编程的命令的特定地址。

最后,指令缓存数据口寄存器只好从指令寄存器直接读数据。

4---9 编程模式:

这张表说明那些支持此数据缓存的寄存器。

第一为数据控制和状态寄存器,它所有位为保留或只读,具有命令异常域,这命令域允许用户写自己希望的命令,这样的命令有“允许数据缓冲”“锁定行”“解锁所有”“刷新所有数据缓冲”和连接。

数据缓存地址寄存器允许用户定义编程在数据控制和状态寄存器命令的特殊地址。

4---10 编程模式:

数据缓存地址寄存器也允许用户在一定操作下,通过指定行的集号和标记号直接对缓存中的行来作出操作。

最后,数据缓存寄存器支持行直接从数据缓存读数据。

5-1

在本章中,你将学到:

1、描述860MMU怎样工作。

2、复位时初始化TRANSLATION LOOKASIDE BUFFERS(TLBS)。

对于需要32页或更少页的数据和指令的系统来说非常有用。

3、实现为数据和指令存取的查表和重装TLB,包括初始化表和完成查表。 4、为特定操作的初始化MMU。 5、为系统配置MMU。

6、装入保留的TLB入口。

请注意在本材料中也提供了很好的缓存和MMU的内容。

5-2

基本860MMU功能?

MPC860实现一个虚拟存储器管理方法,可以提供缓存控制。存取保护和有效翻译实际地址。

在嵌入式应用中,860MMU主要提供包括允许/禁制缓存的存储保护以及支持各种保护机制。这些保护机制具有使页只读或可共享的能力,这些机制还包括限制一页成为特殊页或使一页成为问题和特殊存取页的能力,MMU监测所有存储器的操作。如果操作还允许或没有定义,MMU产生中断。

MMU还支持地址翻译。使操作系统可以在有空存储器空间时自由地分配任务,即使用户利用860MMU完成它支持的简单的功能,也必须进行地址翻译.这样的地址翻译可能为每一逻辑地址保持与之相应的物理地址这样简单的形式。但即使这种情况下,也必须进行地址翻译,地址翻译对用户系统特别有用。举例说,任务A和任务B在存储器中有各自的页面,即使任务A执行在地址Ox1000,任务B同时在0x1000执行,MMU将这两个重复逻辑地址翻译成不同的物理地址。这种情况下2个任务都使用他们自己的页,利用一些页可以共享的能力,2个任务可以共享部分物理存储器。

MMU还支持要求分页,虚拟存储器环境,这里意思为当一个任务在系统中活动时,并不是所有它的页都装入物理存储器,一些页可以保留在盘中,这种情况下,如果任务需要一个在盘上的页,任务简单地进行存储器存取。操作系统然后从盘中取出需要的页,将控制再转回任务,任务不知道真实的存储器物理地址,即使存储器存取时间长一些。

5---3

练习、MMU基础:

让我们看一些基本MMU任务和存取存储器时这些任务怎样工作,在这张图中有2个不同的任务,A和B他们利用MMU,注意在MMU内的入口结构,他们是有效地址,实际地址和让MMU知道这部分存储器是禁止缓存、共享、页保护的位,和什么任务ID拥有这个区。

我们说任务A在0x824120进行写操作,它使用MMU的第一个条目。因为地址在入口有效地址区域里,所以要使用MMU中的第一个条目,这页不是缓存禁止的,它是可读/写页,任务A拥有这个不共享的页。

有效地址下半部分值与实际地址条目一起作为参数,这样,实际读地址为1596120,读12345678,下三个字被缓存。

5---4

练习、MMU基础。

在一个存取操作里,任务A写数据825358,字产生TLB错误,注意16进制825000的存储器根据页保护域的决定为只读。 5---5

练习,MMU基础:

在第3图中,A从43162C读,读的结果值为24681357,但由于缓存禁止,这个域不是缓存。

5---6

练习,MMU基础:

第4图中,从C2A9C4读产生一个TLB错误,任务B拥有这个非共享页。

5---7

练习,MMU基础。

如果任务A如第5种中所示从C2B区域地址中读,读出11223344,在那个位置的下3个字缓存,注意尽管任务B拥有这页,但这页是共享。

5---8

练习,MMU基础:

如果任务B从6D5B758读,读出26481537,这个区域被缓存,注意有效地址与实际地址相同,

但仍需要翻译。

5---9

练习,MMV基础。

最后,如果任务A在C2C区域中读数,它将产生TLB查找失败,因为没有这个区域的条目。

5---10

什么是860MMU?

860MMU将对存储器中的页实行保护,并且实现地址翻译。MPC860核心产生32位有效地址,如果被允许,MMU将有效地址翻译成用于缓存和存储器存取的实际地址。

MMU使用一个指令翻译Translation Lookaside Buffer 和数据翻译Data Translation Lookaside Buffer。它们的任务为MMU提供有效地址,MMU利用TLB将有效地址转成实际 地址。

每个TLB由32个条目组成,并是完全协同的。它们为4Kb,16Kb,512Kb和8Mb页尺寸,条目可以同时放在TLB中,这个功能对嵌入式系统是非常有用的,如不变化页尺寸条目话,用户只能以4Kb页尺寸来指定存储器。

除页尺寸外,每一条目都指定有关页是否可缓存和页保护的特性,在数据和指令不需要超过32个页面时,当复位发生时,TLB条目便可以初始,但当超过个32页面时,作为查表过程的结果可以装载TLB条目。

命中TLB需要一个时钟周期。

5---11

部分MMU编程方式。

这里编程方式说明了复位时哪些需要初始化。注意我们还将稍后讨论附加MMU寄存器。

层1描述子格式实际上是存储器位置,它如图所示,硬件支持层1描述子格式,以减少软件查表(TABLEWALK)子程序。层2BA域不用,在Access Protection Group域值作为定 义翻译控制在存取保护寄存器中位置的参数。

(层1描述子格式):还包括如保护,页大小,写入和有效之类的参数。

(层2描述子格式)包括下面内容:

1、实际页数。 6、附加页大小参数。 2、页保护。 7、共享位。

3、编码位。 8、禁止缓存位。 4、改变位。 9、有效位。

5、TLB保护位。

更多的关于这些位的定义在用户手册中。

有效页数寄存器EPN是为TLB条目用的包含优先页数的寄存器。

它还包括地址空间ID,另外,必须设置EV位以说明TLB条目有效。 5---12

部分MMU编程方式:

下面说明,查表控制寄存器Mx_TWC,这个寄存器包含地址保护、页大小,数据页写入和有效的参数,注意这个寄存器与层1描述子方式很象,因为层1描述子为存储器位置,用户可以初始化描述子使用它作为装入Mx_TWC寄存器的第一个值。实际页数寄存器Mx_RPN包含实际页数和其它在层2描述子格式中的其它域,因为层2描述子格式是存储器位置,用户可以初始化描述子,使它作为装入Mx_RPN寄存器的第一个值。

5---13

怎样初始化TLB条目。

初始化TLB条目的第一步为初始化层1描述子、初始化层1描述子的方法在用户手册中可以找到,在缓存MMU应用指南中找到。

举例说明了在页大小域中为1,这样页大小设为512Kb。

第2步,初始化层2描述子,举例说明允许这一页的缓存。

5---14

什么初始化TLB条目。

第3步:初始化有效页数寄存器,用产生成这个寄存器的初始数,然后用初始数装入寄存器。

第4步:初始化Mx_TWC,如前面讨论的,用户利用层1描述子生成一个Mx_TWC的初始数,然后将初始数装入寄存器。

第5步:初始化Mx_RPN寄存器,用户利用层2描述子生成一个Mx_RPN初始数,然后将初始数装入存储器,当执行第5步时,有效页数寄存器的内容查表控制寄存器和实际页数寄存器都被拷贝到TLB中,这里硬件帮助执行这个操作。

5---15

860MMU怎么工作?

这张图讲解860MMU的工作流程。

工作的流程从设定一个有效地址开始,然后MMU判断它是否为一个与TLB中相配的地址。如果地址相配,MMU判断是否为一个保护相配,如果有保护相配,MMU设定实际地址。

如果MMU没有找到相配地址,结果为TLB不命中中断发生。TLB不命中中断服务程序执行查表(TABLEWALK),结果写入TLB。如MMU没有遇到保护相配,产生一个TLB错误结果,这样的错误可以有几种影响。 5---16

怎样组织页表格。

MPC860的MMU包含帮助完成2级软件查表的特殊硬件,我们将讨论MPC860特殊硬件支持的2级翻译表结构的详细内容。

第一层表有1024个描述子,最少需要一个一层表,这1024个条目与存储器的每一条目相配,层1中的每一条目代表4 giga个字,那1024个条目相配那4 giga个字。每一个在 一层表中的条目代表4兆个字。层1表中每一有效描述子都指向层2表的基地址 ,层2 表也包括1024个条目,这样,层2表中的每个描述子表达了存储器中4K个字。

5---17

怎样组织页表格。

TLB包含任何混合1Kb,4Kb,16Kb,512Kb和8兆byte页的描述子,它可以增加性能,举例说,如果一个嵌入式工程师要以4Kb递增表配置页,这样就可以显著地增加击中性能。

在举例中,TLB包含1个4Kb和16Kb混合的页描述子,就如我们刚才描述的,1个4Kb页符合TLB描述紫模式,但是如果用户选择一个16Kb页,他必须保证层2中的4Kb条目为确定的。

5---18

怎样组织页表格。

页表还包括最多8个512Kb页描述子。如果用户选择1个512KB页描述子,他就必须保证层2中的128个条目为单独确定的。

5---19

怎样组织页表格。

最后如果用户选择一个8兆byte页,层2表中所有的描述子必须为确定的。另外,2个层1表条目页必须为确定的。

5---20

翻译表结构1。

这张图讲解了整体的2层翻译表,如前所说,MPC860MMU包括帮助在2层软件查表所需的特殊硬件。

为了完成查表功能,为了在层1表中为这个地址找出相应的描述子,软件有3个部分.查表从M_TWB寄存器中的层1表开始,第2个重要部分为从有效地址得来的有效页数寄存器的十个最重要位,这些位作用为层1表中的参数根据,利用它们可以得到相应的层1描述子,第3部分的2个0位附在前2个部分后。

其次,软件将层1描述子的头20位与有效地址的下10位组合,后紧跟‘00’这个组合作为在层2表中相应地址的指针,层2表中包含实际页地址。

根据页尺寸,实际页地址可以多到20位也可以少为9位,剩下的页位是从位移地址得来的,实际页地址和页数偏移组合成实际地址。

5-21

练习一查表程序。

现在我们将进行一个说明MPC860MMU完成查表的练习,为了完成练习,你应该对本页的程序和本页的和下页的表熟悉才行,请暂停下来分析下程序和表,请记住你可以回到这些部分,如果需要,你也可以打印出来,这里说明的为程序本身和描述对给出的页尺寸所需的每个描述子数量的表格。

5-22

练习 : 查另一些表。

这里讲解描述符表怎样决定页尺寸,怎样决定可缓存性和怎样决定页保护,随着我们在下一页开始深入程序,我们就会清楚表是怎样用的,如果需要的话,请暂停或打印出来。

5-23

练习 查表。

现在,我们来看这个练习的第一列来说明MMU怎么完成查表,其它的列和答案留在练习文件中,为完成这个练习,你应该仔细研究查表程序,怎样决定页尺寸的指南,缓存性和页保护几个内容,与这些内容有关的信息如下,每一列入口,在通用程序中都有一步对应,任何时候你都可以暂停和研究通用程序。

在第一行。有效地址0x12C被调用,层1表地址是M_TWB左移12位即0x400000开始,注意条目在所有列中。

层1参数是有效地址由层1表地址与0xFFC00000\而成并右移20位产生,产生体为0参数,第3步中,层1描述子地址由层1表地址加上索引地址得出,值为0x400000。

第4步中,层2表地址决定为0x3FF000,它将与在位置0x400000中值的\与\而成,值为0 FFFFF000。

下一步,我们发现层2索引0,因为0x12C和0x3FF000\与\而戍并右移10位所产生。层2表地址加上层2索引而产生层2描述子地址为述子地址,结果为0x3FF000。

现在利用这些来决定页尺寸,你可以在下面的连接发现,我们看见层1描述子中L的28和29位为0,同样,看到层2描述子的28位为0,这就使我们知道页尺寸为4K。

使用通用程序,我们将层2描述子和0xFFFFF000相与而得到地址为0x3519FFF。

实际地址与页低位地址相同。

一个4Kb 页的位移为原来的有效地址和FFF(前面为0)相与而成,这样位移为0x12C。

最后,我们得到产生的实际地址,它为实际页地址加上实际位移,实际地址为0x351912C。

本部分讲解的另一个功能为缓存性,在这里,由于在层2描述子中30位禁止位被设置,所以为禁止缓存,同样,在层2描述子中的20,21位,即PP域为3所以这一页对专用和问题模式都可读/写,最后层2描述子29位共享位被清除,这样页就不可以共享,决定这些因素的程序包括在下面的连接中以供你们研究。

如果你需要更多的练习,请填其它的行将答案与练习文件中比较。

5-24

翻译表结构2。

翻译表2的结构与翻译表1非常相似,最大的不同为包括4096个条目的层1表尺寸,附加的条目页数允许用户执行到1Kb页的层2表描述子。

用户决定用数据控制寄存器中的TWAM域中的那种翻译表。

5-25

MMU系统举例 (1/2)

这个物理存储器映向的举例表示了一个不同设备的组合和它们存取的地址范围。

第一个表描述了存储器范围0x00到0x800000的2个FlashROM块的物理存储器映象, 4兆Byte DRAM占用0x04000000到0x043FFFFF存储器范围,内部存储器映象在 0x9000000开始。板控制和状态寄存器占用0x09100000.最后,PCMCIA通道使用0x10000000到0x17FFFFFF存储器范围。

第2张表总结了MMU寄存器设置和刚才讨论的存储器映象的一个例子。

第一个是FlashROM使用OxOO到0x7FFFFF存储器范围的一个单独8兆Byte页,这个存储器范围是为监控程序和翻译表格用,不禁止缓存,存储器标为写入,用于监控态模式,存储器为

只读可共享。

RAM区域分为8个512KB页,头2个512KB页区域用于堆栈和 Sratch pad,范围为 0x4000000到0x40FFFFF,地址缓存允许,用于写回模式,存储器用在监控态模式,支持读写,可共享。

第3个512KB页用于通信处理机数据缓存,这一页的地址在0x4100000到0x417FFFF,禁止缓存,存储器用在监控模式,支持读写,可共享。

剩下的512KB页包括问题,程序和数据,例如,用户可以在这页中装载自己的代码,这些页的地址在0x4180000到0x43FFFFF,允许缓存,用于写回模式,存储器可以为监控或用户模式,存储器支持读写操作,可共享。

内部存储器映象包括一个地址范围在0x9000000到0x9003FFF的单独16KB页,不允许缓存,存储器用在监控模式,支持读写,可共享。

用于板配置寄存器的存储器分配在内部存储器映象的存储器,区别于分块存储器区域的异常处理。

最后,用于PCMCIA的页在一组16个8MB页中,其范围在0x10000000和0x17FFFFFF之间,禁止缓存,存储器用在监控模式,支持读写,并可共享。

5---26 MMU系统举例 (2/2) 这个例子当中的MMU寄存器及翻译表格的内容是根据5-25的描述和物理存储映象来设定 的。

这里展示了一个完整的MMU描述,软件先要设定MMU的所有寄存器和翻译表格的值。注意,M_TWB指向层1表,首两个层1条目是相同的,用来支持8Mbyte页,这两个条目同样指向同一个层2表,而层2表内包含著1024个是相同的条目。

如图中所示,部份存储器范围是被省略的。

第16个层1表条目包含指向层2表的指针,这个层2表内的描述字定义了8个512Kbyte的页。每一个512Kbyte页需要128个相同的层2条目。

内部存储器及板控制和状态寄存器可同时存在於一个层2表。这是可能的,因为每一个页的大小是16Kbyte。

5-27

什么是保护特性

保护特性保证不发生地址存储器位置中的乱序装入和先取数。

这个举例为一个循环,CPU执行一组指令到循环的最后‘BRANCH CONDITIONAL BACK-TO-LOOP’,指令进入指令顺序队列,转移单元预测BRANCH TO LOOP指令,然后指令分发器 预取'lbz'指令。

如果0(Ry)没有保护,指令分发器下一步取Ry指向位置的指令,这样在转移确定前数据就装入了,如果转移指令没有发生,CPU执行下一指令,这样如果Ry指令的设备不允许破坏性读与FIFO,这样就会产生问题。

相反,lbz指令在保护页中,转移决定后,再取数。

这样,页必须保护如果要防止破坏性读,注意如果保护指令和数据在缓存,保护位没有作用,所以最好不对保护页放入缓存,同样,注意,决定保护位对性能有影响,这样必须判断后决定。

5-28 MMU编程模式。

在本章前面在讨论复位时初始化TLB时我们已经看到部分MMU编程模式。以下会讨论另外5个寄存器。

第一为MMU指令控制寄存器MICTR,它与MMU中的数据控制寄存器MDCTR相似,这些控制寄存器支持与保护相关的一些功能,这些控制寄存器包含装入描述子时用的索引,同样注意在两种寄存器中缺省为禁止缓存,当进入一个服务程序(ISR),MMU自动关闭,用户在进入服务程序时,可以选择继续缓存数据,用户在禁止缓存缺省域中设定.

MMU指令和数据控制寄存器后面为地址空间控制寄存器MCAISD,在本章前面,我们描述过工作流程,当有效地址产生时,必须进行包括地址空间ID和这个寄存器内容相匹配的部分保护匹配。

5-29 MMU编程模式

地址保护寄存器MxAP包括16个2位域,每个域为一个地址保护组,每一个TLB条目有一个这个寄存器域相对的索引APG值,用户可以分配任何页.根据组保护模式使用地址保护域内容。

最后说明的为查表寄存器MTW,它基本上为一个临时存储寄存器,软件查表中断处理程序使用它。

5-30 怎样重装载TLB

如果一个TLB丢掉了,必须执行ISR将描述装入MMU.

举例说明了用于数据和指令TLB重载中断处理程序的代码,2个程序非常相似。

第一,让我们看数据TLB重载例子。

首先,程序将R1存入MTW寄存器,前面讲过MTW为一个临时寄存器,最终,程序恢复R1。

然后,程序执行‘move from special register R1, M_TWB\。这是一个有硬件附助的 指令,当这指令执行时,程式会自动读取M_TWB的值与地址寄存器的十位值,并且加2个0,当指令完成后,通用目的寄存器储有指向层1描述子的指针。

现在,R1指向正确的层1描述子。

下一步,程序执行指令(load word zero),把\字装入到R1指向的内容当中,意思为 层1描述子现在R1。

下一步,程序执行指令\。MD_TWC是检查 表控制寄存器,在这个例子中,程序从层1描述子里读取数据,并把它写入检查表控制寄存器中。

下一步,程序执行指令‘move from special register R1, MD_TWC'。 这时指令从描 述子中取出头20位,将它们和有效地址的剩下10位结合,再加上‘00’,结束这个指令后,考虑页尺寸大小,通用目的寄存器包含了层2描述字的指针。

下面,程序执行‘load word zero’将 层2描述字装入R1,然后,程序执行将R1写入 实际页数寄存器指令。将MX_RPN,MD_TWC和MX_EPN信息写入TCB条目.

最后2个指令恢复R1寄存器,完成从中断返回。

5-31 怎样重载TLB。

现在,让我们看一下指令TLB重载举例。

第一步与第一个程序相同,R1存入M_TW。

下面,为了将指令有效页数装入数据有效页数寄存器,程序执行“move from special register”将SRRO装入R1, SRRO包含向配指令的地址。

“move to special register MD_EPN,R1”将有效地址向配地址存入MD_EPN.

下一步,程序“move from special register R1, M_TWB”,正如第一个程序一样, 他将层1描述字地址装入R1.

下一步为“load word zero R1,(R1)”,装入层1页条目。

然后,程序执行“move to special register”R1到MI_TWC。紧跟著\to special register\R1到MD_TWC。这2个指令保存层1特性和层2基指针。

下一步,程序在考虑页尺寸大小后将层2描述子信息装入R1,余下的程序与前一个程序完全一样,只有一个不同,当程序执行从R1“move to special register”时,目的 地址为指令实际页数寄存器。

5-32 怎样保存TLB条目。

就象可以将指令和数据锁定于缓存,也可以将指令和数据锁定在TLB设置MICTR寄存器的RSV4I或MDCTR寄存器的RSV4D,控制TLB替代计数器,这样它只在每个TLB的前28个条目中选择.

执行完“TLBIA”指令后替代计数器清为0,每个TLB重载后计数器减,最老的TLB将被替代。

每个TLB中的,用户只能锁定4个条目。

自TLB中装入一个保留的条目的过程如下:

1、如需要清除MSR(IR)或MSR(DR)位把TLB禁止。

2、清除数据或指令计数寄存器(MI_CTR或MD_CTR)中的保留位(RSV4I或RSV4D) 3、使用“TLB invalidate all”(“tlbia”)或“TLB invalidate entry” (“tlbie”)禁止保留页中的有效地址。

4、设计数寄存器(MI_CTR或MD_CTR)的索引域(ITLB_INDX或DLTB_INDX)相应的28到31之间的值。

5、利用有效地位,保留页的地址空间ID装入有效页地址,寄存器(MI_EPN或MD_EPN),然后将EV位设为“1”。 6、运行检查表软件代码来将TLB装入相关地址。

7、如果需要,重复上面3步来装入4个其它的TLB入口。

8、设置控制寄存器(MI_CTR 或MD_CTR)保留位(RSV4I或RSV4D)

5-33 MMU中断 (1/2)

这页和下一页总结了MMU中断,包括中断类型和它们的起因。注意指令TLB命中失败中断和数据TLB丢失中断,同样请注意对指令错误有不同的中断。

在错误中断时,一些寄存器位置提供关于错误性质的额外信息,举例说在数据TLB错误时,DSISR和DAR寄存器提供额外信息,在指令TLB错误时,SRR1提供额外信息。

5-34 MMU中断 (2/2)

这里说明的为剩下的MMU中断,和MMU中断向量位置,你可以在这里暂停来研究一下这些资料。

5-35 怎样初始化MMU (1/3)

这个过程说明怎样初始化MMU,这里假设复位条件存在。

第一步为禁止所有TLB条目,\指令完成这个任务。

第二步:初始化MMU指令控制寄存器,这里说明的为几种用户可以使用和禁止的功能,用户可以用这个举例产生寄存器的初值,清除寄存器,然后,设置感兴趣域,最后将初始化值写入寄存器。

第三步:初始化MMU数据控制寄存器,我们刚才讨论的指令控制寄存器所描述的过程同样可能用在初始化数据控制寄存器,MMU数据控制寄存器有2个附加位,其中一个位为写穿(Write-Through)缺省模式位,它用于使能缓存,第2个附加位为TWAM位,用它 选择表结构1或2。

5-36 怎样初始化MMU (2/3)

第4步:将数据TLB命中例外服务程序装入例外向量表中。

第5步;将指令TLB命中失败例外服务程序装入例外向量表中。

5-37 怎样初始MMU (3/3)

第6步:将数据TLB错误例外服务程序装入异常向量表中。 第7步:将指令TLB错误例外服务程序装入异常向量表中。

第8步:初始化层1表指针和清除层1表。 第9步:在每段中映象。

最后,第10步允许MMU,然后允许缓存,用户可以考虑在这一步前立即允许使的外设。

6-1 MPC860 结构, 1

在我们讨论异常处理前,你必须知道PPC表达与指令有关的中断称例外,与指令无关的中断仍称为中断,你在学习一些以POWERPC为基础的文件得到帮助,但是将例外解释为核心中断性事件是我们通常的目的,我们将把其它事件称为中断,在我们讨论例外或中断时,主要集中在3个领域:EPPC核,CPM和SIU。当IREQ输入出现时,POWERPC取一个中断。这里指明POWERPC开始外部中断异常处理。

在SIU中CPM驱动中断电平,CPM按优选级排序,屏蔽或非屏蔽29个中断源。

系统接口单元中断控制器驱动POWERPC的IREQ输入,SIU控制器优选排序和屏蔽或允许16个中断源,其中之一可能为CPM,下面章节中讨论POWERPC和SIU中断问题。

这章中主要讨论POWERPC中的例外处理。

本章的目标为学习编写可以恢复的例外处理程序,在这章中,你可以学到: 1、 什么是例外类型? 2、 EPPC核怎样处理例外? 3、 怎样存取例外向量表?

4、 怎样屏蔽一个可恢复的例外服务程序和 5、 怎样写一个例外处理程序。

6-2 什么是EPPC例外?

例外是正常工作变化而产生的事件,如中断,复位或总线错误,主要有2种中断:指令相关中断和非同步,指令无关中断POWERPC执行精确异常模式,核心用同一机构处理所有类型的例外。

分析一下图表,路线1为所有例外,路线2为RFI指令异常线路,路线3指核心要执行例外服务程序1时发生的其它异常,线路4指RFI指令异常,在此图中用户检查SRR1寄存器中可恢复中断位是否置位。

让我们仔细讨论一下这4个路线和它们之间的关系。

首先,如果异常流程中有线路1,紧跟着为路线2,异常为排序的,意思为没有丢失程序状态,在这种情况中,执行主代码时,异常使核心用路线1走到异常服务程序1,图中所示为esr1,在这条路线时,POWERPC将程序计数器存入SRRO和器件状态寄存器SRR1中。同样,核心清除器件状态寄存器中的许多位不允许如MMU和中断的功能。

异常服务程序1执行结束后,POWERPC执行‘rfi’指令它使异常服务控制转到路线2,然后回到异常发生时的代码处在执行路线2时,核心将SRRO内容恢复到程序计数器,SRR1到器

件状态寄存器。

让我们现在讨论一个非顺序异常的例子,如果执行流程是路线1、3、和4而且如果器件检测NMI或同步异常选择路线3,异常即为无序的,因为路线2的程序状态丢失了,换句话说:当异常服务程序1执行时,可以会接收到第2个异常,这样选择路线3,在路线3,同路线1一样,核心将程序计数器存入SRRO,器件状态寄存器存入SRR1,然后清除器件状态寄存器,如果是这样的顺序发生,核心就不可能回到主代码因为路线2的程序状态丢失了,有2种方法来避免这种顺序,第一,当esr1执行时,可以使核心不选择路线了,因为器件状态寄存器被清除了,中断就被禁止,另外一种选择,用户可以编写一个中断嵌入的执行流程,在路线1中将SRRO和SRR1内容保存。当器件状态寄存路被清除,可以重新允许中断,如果程序控制选择路线了,而且如果它可以恢复,程序控制然后必须选择路线4,但是,如果它步可恢复,程序控制不能选择路线4,这里必须复位,或采取其它动作。

为了决定是否可以恢复,器件状态寄存器有一个恢复中断模式位,当在主代码执行时,POWERPC为可恢复中断模式,当程序寻到路线1时,核心将器件状态寄存器存入SRR1中然后清除包括恢复中断模式位的器件状态寄存器。

当在异常服务程序1中执行时,POWERPC为不可恢复中断模式,如果程序选择路线3,而且如果这个程序包括检查恢复中断模式位,核心就可以决定是否可以返回,而且采取相应动作。总结一下,当程序控制进入esr1,中断被禁止,如果需要可以重新允许中断,在将程序计数器存入SRRO和器件状态寄存器存入SRR1后,用户可以重新允许中断,当用户重新允许中断后,必须设置R1位以指明恢复中断模式在工作,然后就可以安全地选择路线3或4。

下面的事件可以发生选择路线3: 1、产生复位。

2、非屏蔽中断(NMI)发生,记住在ESR1执行后,中断上一屏蔽的。

3、器件检测发生,有可能器因为优先级错误,或存取一个不存在的地址。

4、同样,在调试模式中产生的异常。

5、最后,同步异常发生,它指为指令异常,如一个队列中断,一旦系统完成,调试器就不能再工作,同样,就不能有任何同步中断发生,这样,只有NMI或器件检测异常才会发生异常,注意,在用户手册中有异常和异常优先级的表。

6---3 什么是异常向量表?

异常向量表为发生异常后程序要转向的位置,每个器件产生的中断将控制转道向量表中的不同地址。

这里说明的为可能发生的异常类型,包括系统复位,NMI,器件检测,外部中断,队列错误,程序错误等等,注意,这里还包括指令TLB丢失,数据TLB丢失和指令数据TLB错误量,同样,还有量位移,每个量表入口位移16进制100个字节,这样,在每个量表入口中编程者可以包含64字异常服务程序。如果异常处理程序超过6个字,就必须转移到其它存储器空间执行程序。

6---4 器件状态寄存器如何影响中断

这里我们看到器件状态寄存器的图,器件状态寄存器有几个重要位。3个位在中断时特别重要。

其中一位与量表有关,中断前缀或IP位。这个IP位决定异常量表的位置,可能有2个位置一0(OxOOOn-nnnn)或0xFFF0-0000,如果IP位设为0,异常量表位置在0,如果IP位 设为1,异常量表位置为0xFFF0-0000。

EE位允许或禁止外部中断,RI位为恢复中断模式位,我们在本章早时候讨论出。

6---5 器件状态寄存器

这个表描述了器件状态寄存器中的每种域,包括它们复位后的值。

6---6 EPPC怎样处理异常

当一个异常发生时,首先EPPC核心将器件状态寄存器拷贝SRR1,然后,核心用下一指令地址或产生异常的指令地址装入SRRO,下一步,核心将器件状态寄存器清零,包括专用的PR位,EE位和退出恢复中断模式的R1位的大部分变为O 。

接下来,核心指向异常向量,在那个位置开始服务程序,所有异常都将信息存入SRRO和SRR1,只有很少的异常需要将信息存入DSISR和DAR。

6---7 怎样使ESR恢复

如果一个中断产生,异常服务应可以恢复,允许用户嵌套中断.

我们将看到使异常服务程序可恢复的代码,第一条指令是将R9存入12个字节的堆栈帧,在这里R9相当于专用的,如果需要的话为scratch寄存器.

下一步指令为‘move from special register’从特殊寄存器中将SRRO放入R9然后, 将R9存入第2个堆栈帧的入口。

再下一步SRR1存入第三个堆栈帧的入口。

这几步后,系统就可以开始接收一个中断,为了接收另一个中断,应该重新允许中断,重新允许中断是用指令'move to special register'80,0完成的实际上为一个特殊 硬件系统指令'move to special register'80,0,在器件状态寄存器中EE和R1位置设做 1。核心就可以

响应中断,系统处于可恢复中断模式。

在离开异常服务程序应进行如第2个程序中的附加步骤,第一个指令为'move from special register'82、0,清除EE和R1使系统不再在可恢复中断模式,核不再响应中断 ,清除堆栈,这时,执行RFI指令。

6---8 器件状态寄存器位的端口设置。

这张图总结了我们刚才讨论过的到器件状态寄存器的特殊端口。

6----9 举例:

在这个程序举例中,端口D的LED计数器在每个系统指令时递增,执行'SC',程序以包括¨ MPC860.H开始,定义指针pimm,它指向内部存储器空间。只因为我们使用端口D,所以需要这些行,不然,可以不要它们。

在第4行,定义功能ESR,这个功能将是系统调用指令的异常服务程序。

第5行中,定义2个指针一源指针目的指针,在本例中,不是将异常服务程序连接到异常向量表中的对应位置,而是程序执行一个BLOCK转移异常向量中,这样就需要2个指针。

第6行为初始化PIMM指向内部存储器空间。

第8行用异常向量返回,O或0xFFF00000.‘getevt’加上系统调用异常的异常向量表中的偏移,这里偏移为0xC00,并初始化目的指针。

第9行到第11行执'rfi'指令,它把BLOCK转移到程序的最尾部分。

第12和13行为将端口基D初始化为计数0。

然后,第14行为系统调用指令,当它执行行时现在装在异常向量,服务程序esr执行。

在第15行,在esr功能之前置有\interrupt esr\,告诉编译器esr功能以 ‘rfi’结束而不是正常的blr结束,esr为一个异常服务程序。

6---10 举例、继续

第17-22行是使这个异常服务程序可恢复的指令。

第23行,端口D 中LED计数器增加1。

然后,第24-30行从堆栈中保存寄存器,程序控制返回主程序。

6-11 举例,继续

第33行定义取异常向量表的功能。

第34行中,先读器件状态寄存器,然后和0x40与,它与器件状态寄存器中的IP位相关,如果结果为0,异常向量表位置在0,返回有效值,不然的话返回0xFFF00000。

39行功能'getmsr'包含取器件状态寄存器指令。

7-1 MPC860 结构, 2

在本章中你将学到:

1、 认识MPC860基本模块和它们的功能,重点在CPM和SIU。 2、 描述每个部件的功能。

3、 计算CPM(通信处理模块)性能。 4、 讨论怎样确定内部存储器。 5、 EPPC怎样向CPM RISC发命令。

7---2 什么是基本部件?

第一章中重点在PowerPC,在本章中,我们将集中在系统接口单元(SIU)和通信处理模块。

7---3

什么是基本SIU部件。

列出的第一个部件为总线接口单元,它提供内部专用总线和外部同部突发总线之间 的接口。

下面,SIU支持多个系统功能,它们在图的右边;

1、 首先是系统配置和保护机构。用户手册包含管脚图,说明很多SIU管脚有多个功能,在SIU中有系统配置寄存器,配置这些管脚支持一个动能或其它功能,SIU保护功能有硬件看门狗和软件看门狗。

2、 下面,SIU中有复位监测和发生功能。

3、 同样,一个时钟同步允许用户叠加低的输入频率,频率可以为晶振或外部振荡器提供,产生系统所需的所有时钟。

4、 功耗管理也由此控制,MPC860工作在几种低功耗模式。

5、 这就是调试支持发生和延续的地方。

6、 JTAG支持(IEEE 1149测试存取口)

除我们刚描述的功能外,SIU还包括存储器控制器,支持8个存储器块的SRAM或与SRAM相似的设备及DRAM。

SIU中有实时时钟,为实时操作系统和应用软件提供日期,时间,这里还有定时中断时钟,为实时操作用户产生定时中断。

最后,提供PCMCIA端口A和B的PCMCIA接口,这个接口提供所有2个端口的控制逻辑,设计者必须提供外部模式供电和缓存。 7---4

什么是总线监测(硬件看门狗)?

总线监测器是一个内部设备,如果从设备的反应时间太慢,监测器产生一个器件,检查异常,当MPC860存取从设备时,它要求内部或外部设备产生一个传送证实,传送证

实信号指明MPC860可以锁定数据(在读时)或者从设备已经锁定数据(在写时)。

如果TA不出现比如地址不存在,必须发出TEA时,用户有2种选择,第一种选择用户要设计外部逻辑以检测片选发生和TA发生之间超时,在这种情况下,TEA由外部逻辑发生,第二种方式是用户激活内部总线检测器,用户可以配置超时时长,在这种情况下,内部设备发生TEA。

为使用总线监测器,必须激活它并初始化总线监测器超时的长度,用户在SYPCR寄存器或系统和控制器寄存器中激活总线监测器。

例如:域可以设为10的80个等待时钟,在激活位中放1激活总线监测器。

7---5 什么是软件看门狗?

860具有软件看门狗定时器,它可以防止由于软件进入死循环的系统锁死。

如果软件看门狗超时,根据用户在SYPCR中的SWR1域定义的值产生复位或非屏蔽中断(NMI)。这里为软件看门狗复位和中断选择,当在SYPCR SWRI减到0时,产生一个超 时,为避免超时,软件必须将Ox5660跟着OxAA39写入软件服务寄存器(SWSR)。它使服务逻辑在减数器中重载初始值,减数器以什么速度减少呢?用户可以选择直接通用系统时钟驱动减数器,或者从通用系统时钟除2048驱动。为选择速度,编程者在SYPCR中的SWTC域设置相应值。

软件看门狗有一个允许位,也有一个冻结位(SYPCR.SWE 和SYPCR.FRZ)这里说明的是 与软件看门狗相关的冻结功能,但冻结功能实际更通用一些,所有定时器都能冻结,而且还有外部冻结管脚,如果有一个从正常模式到调试模式的转换,软件看门狗不继续计算超时,在这种情况下,SYPCR.FRZ必须设为1,当处理机转换回正常模式时, 软件看门狗定时器继续从原来的值计数。

复位后允许软件看门狗,如果不需要,用户清除SYPCR.SWE。一旦写入SYPCR,SYPCR.SWE状

态不能修改。

7---6 计算软件看门狗超时。

这里我们看一个计算软件看门狗超时的例子,我们假设25兆赫兹系统时钟而且我们希望将软件看门狗初始化为1MILLISECOND超时,在SWTC的值为超时值,乘以时钟频率,再除以1或2048,在本例中,我们得到值25000,我们将值25000写入SWTC,然后用除最不重要位外所有“1”“SYPCR”最不重要位为0,它禁止产生比例。

7---7 什么是基本CPM部件?

这里我们看一下在CPM中的所有模块。

如以前所示,CPM中有32位RISC,R1SC内有一个程序ROM,它们一起工作处理所有串行协议,DMA,DSP和定时器。

内部存储空间提供RISC和PowerPC的接口,它包括寄存器和双端口RAM RISC和PowerPC 用这个区域协调他们的工作。

有16个与每一通信设备的发送和接收相对应的DMA,用户不能直接完成SDMA,但用户可以允许IDMA用于存储器到存储器,设备到存储器,存储器到设备传送。

CPM支持中断控制器,用户编程它来排优先级和屏蔽中断,中断控制器为CPM处理29个中断源。

CPM还有4个串行通信控制器(SCC1到SCC4),这4个通信控制器为8个通信设备中功能最强的,它们使用如HDLC,UART和以太网等不同协议发送数据。

有2个串行管理控制器,SMC,它们以UART,透明或通用电路接口(GCI)方式传送数据。串行外设解(SPI)为一个4线接口,与不同的收发器和外设接口以控制和提供状态信息。

I(C为2线接口,与不同外设,包括支持出现检测功能的SIMM和DIMM接口。

串行接口连接SCC和SMC的物理层串行线。

SCC和SMC可以与自己管脚连接,或者连接时分复用总线,如果用户将通信设备放入一个TDM总线,时分配器将数据转接到不同设备。当设计者配置这些管脚为I/O时,端口A、B、C、D可以为并行I/O。与之相关的管脚在用户手册中管脚图的左边。

有4个波特率发生器,作为SCC和SMC的内部时钟。

还有一个并行口,允许与控制接口的连接。

有16个内部定时器,它由RISC处理器驱动和控制。

本文来源:https://www.bwwdw.com/article/xp58.html

Top