版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、PPC培训教材 编写: 校核: 二二七年四月十一日七年四月十一日 目目 录录 第第 1 章章PPC 体系结构体系结构.1 1.1.MPC8247 基本模块.1 1.2.数据怎样流动?.2 1.3.POWERPC 核的主要部件.3 第第 2 章章EPPC 编程编程.4 2.1.编程模式介绍 .4 2.2.用户态编程模式.5 2.3.监控态编程模式.6 2.4.数据和指令(1/2).7 2.5.数据和指令(2/2).8 2.6.指令总结 .9 2.7.指令总结 .10 2.8.指令总结 .11 2.9.什么是“EIEIO”指令.12 2.10.什么是EIEIO指令.13 2.11.指令总结 .14
2、 2.12.什么是执行同步?.14 2.13.什么是同步指令?.15 2.14.什么是同步指令?.16 2.15.指令总结 .16 2.16.什么是“ISYNC”指令。 .17 2.17.指令总结 .18 2.18.指令总结 .18 2.19.指令总结 .19 2.20.解释条件代码(1/2).20 2.21.解释条件代码 (2/2) .21 2.22.使用和记录运算信息 .22 2.23.使用和记录运算信息 .23 2.24.转移类型和选址.24 2.25.转移操作 .25 2.26.条件转移指令 .26 2.27.条件转移指令-举例 .27 2.28.控制程序流程练习.28 2.29.控制
3、程序流程练习.29 2.30.写子程序和 I/O 处理.29 2.31.写子程序和 I/O 管理.30 第第 3 章章HDLC 协议协议.31 3.1.HDLC 帧格式 .31 3.2.HDLC 点到点。.32 3.3.HDLC 多点。 .33 3.4.HDLC 控制器怎样发送数据。.34 3.5.基本 HDLC 接收工作。.35 .HDLC 总线配置。.36 3.7.HDLC 总线配置。.36 3.8.HDLC 总线发送工作。.37 3.9.HDLC 定义参数 RAM.38 3.10.HDLC 定义参数 RAM。 .39 3.11.HMASK 寄存器(PSMR).40 3.12.HDLC 缓
4、存描述字。.41 3.13.HDLC 缓存描述字。.42 3.14.HDLC 事件寄存器(SCCEX) 。 .42 3.15.怎样初始化 SCC 控制器的 HDLC。.43 3.16.怎样初始化 SCC 控制器的 HDLC。.43 3.17.怎样初始化 SCC 控制器的 HDLC。.44 3.18.怎样初始化 SCC 控制器的 HDLC。.44 3.19.怎样初始化 SCC 控制器的 HDLC。.45 3.20.怎样初始化 SCC 控制器的 HDLC。.46 3.21.怎样初始化 SCC 控制器的 HDLC。.47 3.22.怎样初始化 SCC 控制器的 HDLC。.47 3.23.怎样初始化
5、 SCC 控制器的 HDLC。.48 第第 4 章章SIU 中断控制器中断控制器.49 4.1.什么是 SIU 中断? .49 4.2.什么是中断管脚?.50 4.3.编程模式(1/2) .51 4.4.编程模式(2/2) 。 .52 4.5.SIU 怎样处理中断? .53 4.6.什么是 SIU 中断代码和优先级?.54 4.7.怎样屏蔽低优先级中断(1/2)?.55 4.8.怎样屏蔽低优先级中断(2/2)?.56 4.9.怎样初始化和处理 PPC SIU 中断(1/3)?.57 4.10.怎样初始化和处理 PPC SIU 中断(2/3)?.58 4.11.怎样初始化和处理 PPC SIU
6、中断(3/3)?.59 4.12.中断处理举例:.59 4.13.例子 (1/3).60 4.14.例子 (2/3).61 4.15.例子 (3/3).62 第第 5 章章SIU 和和 CPM.63 5.1.SIU 基本部件.63 5.2.什么是总线监测(硬件看门狗)?.64 5.3.什么是软件看门狗? .65 5.4.计算软件看门狗超时。.65 5.5.什么是基本 CPM 部件? .66 5.6.什么是 CPM 部件的性能?.67 5.7.什么是 CPM 部件的性能? .68 5.8.什么是 CPM 部件性能?.69 5.9.什么是 CPM RISC 性能?.70 5.10.性能计算,例 1
7、。.71 5.11.性能计算,例 2。.72 5.12.RISC 控制器功能。.73 5.13.如果分配内部存储器。.74 5.14.怎样选位内部存储器?.74 5.15.怎样选位内部存储器?.75 5.16.怎样选位内部存储器?.76 5.17.怎样选位内部存储器?.77 5.18.POWERPC 怎样向 CPM RISC 发命令? .78 5.19.POWERPC 怎样向 CPM RISC 发命令?.79 第第 1 章章 PPC 体系结构体系结构 1.1. MPC8247 基本模块基本模块 这是 MPC8247 结构图,它包括 3 个主要模块:PowerPC 核,系统接口单元(SIU) ,
8、通信处理模 块(CPM) PowerPC 是主要的处理机单元。它通常称为 Embedded PowerPC 核心 (或 EPPPC) 。 它包 括缓存和存储器管理单元(MMU) 。 第二个主要的模块为系统接口单元。它的一个主要功能是提供内部总线和外部总线的接口。它 还提供其它几种功能。 最后,第三个主要模块为通信处理机模块,CPM 在到个不同的通信设备如 SCC 和 SMC 上发 送接收数据,所有的设备可以独立工作。 SCC 和 SMC 也可以用于时分复用总线。 1.2. 数据怎样流动?数据怎样流动? 这张图说明了 PPC 中数据的主要流动路线,第一路为 1 到 3;数据从 PowerPC 到
9、 SIU,当指令 不在缓存区中或不可以缓存时,PPC 利用这个路线进行刷新和存入指令操作。 PowerPC 中的缓存区也利用这个路线刷新和装入缓存,MMU 处理这线路上的地址。 第二条路成为 1 到 2,数据从 PowerPC 到内部存储器;当存取寄存器和内部存储器中的双口 RAM 时使用这个线路,MMU 处理这些地址,但由于 2 个处理机都对这个存储器写入,这段数据 不应缓存。 第三条线路为 4 到 2,数据从外设到内部存储器。当外设和双口 RAM 交换数据时使用这个路 线。它不经常使用,但你有时会想用它。通常,数据缓存在外部存储器中,但是也有可能将数据缓 存在内部存储器中的双口 RAM 中
10、,它受内存不够大的限制,MMU 不处理这些地址,数据不能缓存。 1.3. PowerPC 核的主要部件核的主要部件 现在我们看一下 PowerPC 核心的部分,这里有一个模块图,重点在一个指令顺序发生器,这 个指令顺序发生器重点在流动到执行单元的指令,它们在模块图的下半部分。地址发生器单元利用 从指令顺序发生器和转移预测单元中的信息预估下一个指令的地址,转移预测单元从指令顺序发生 器中取出转移指令,在没有判决的条件转移中利用静态转移预测以使指令单元取出指令。指令队列 中保留下一个分发的指令。 转移预测单元决定指令是否为转移指令:转移预测单元然后将指令放入指令队列中,指令队列 将转移预测来的指令
11、放入指令队列的头部,然后分配到有关的执行单元。 如果不是转移指令,转移预测单元将不动作,如果是一个转移指令,转移预测单元将进行静态 预测以决定是否要有转移,根据转移预测单元决定,地址产生模块生成一个或是从下一个指令地址 中产生的地址或是预测转移去的指令地址,静态转移预测是根据用户编写的转移指令完成的,如果 有几种错误预测,指令队列将刷新,另外的指令将进入指令队列。 这里有三个执行单元。一个执行单元支持通用的寄存器,寄存器用作临时指针和内容数据几种, 有 32 个 32 位通用寄存器,它们都工作在同样的方式中,特殊寄存器用于控制和状态数据以及存储 和恢复数据,特殊寄存器比通用寄存器多。 还有历史
12、缓存(GPR),在核心发分发一个指令时,这个指令进入历史缓存,核心设置一些指 令执行时的状态情况位,如果指令完成,这个指令退出历史缓存,如果指令还在缓存,同时它还在 执行或者例外情况发生,PPC 这时将记住例外情况发生时的指令,同时去执行例外情况处理。 整数乘/除单元执行整数乘除指令,有一个包含位域逻辑单元的运算逻辑单元,一个为数据一 个为地址,2 个单元都有 2 个 32 位队列。所有存/取指令共用存/取地址队列。存/取定点数据队列处 理定点数据。 第第 2 章章 EPPC 编程编程 2.1. 编程模式介绍编程模式介绍 这张说明了 PPC 大致的编程模式,它分为 2 个部分:用户态编程模式和
13、监控态编程模式,用 户态编程模式是监控态编程模式的子集。 2.2. 用户态编程模式用户态编程模式 首先,讨论一下用户态编程模式,在我们讨论用户态编程模式时,它与操作的问题状态的工作 是一致的。 在用户态编程模式中,有 32 个通用寄存器,每一个寄存器为 32 位。所有的寄存器工作方式一 样。EPPC 计算是寄存器与寄存器之间的。信息是存入和取出寄存器的,在 PowerPC 中,没有堆找 功能,这样就可实现软件堆找功能,尽管没有堆找指令寄存器,用户可以利用通用寄存器(GPR) 作为堆找寄存器。 用户态编程模式中另外一个寄存器为条件寄存器(CR) ,它有 4 个,我们将在本章详细讨论。 在用户态编
14、程模式中还有 4 个特殊用途寄存器,SPR1 为整数.用于多精度计算的例外寄存器 (XER)有溢出位,进位位和溢出进位位。 下一个是连接寄存器,这里是特殊用途寄存器 8(SPR8) ,它存储一个子程序调用的返回地址。 SPR9 是计数寄存器,它通常用于 LOOP 程序中的计数。另外,编程者也可以利用这个寄存器 做 GOTO 指令.在这里,子程序存储一个地址,并转移到地址指针指向的地址. 剩下的 2 个特殊用途寄存器为基时钟寄存器 SPR268 和 269,它们为 64 位时钟值,可以用作时 钟标记,它是 PowerPC 结构中的一部分,用户可以在只读情况下利用这些寄存器读取基时钟。 最后,在用
15、户编程模式中有一个程序计数器,它不能被用户读写。 2.3. 监控态编程模式监控态编程模式 现在讨论监控态编程模式,我们讨论的监控态编程模式是与特殊状态工作同步的。 在监控态编程模式中有器件状态寄存器,它包含了比如允许例外处理中断这样的器件状态信息, 同样也有一组标准的特殊用途寄存器,2 个为标准 SPR:数据存取 DSISR 和 DAR。 下一个寄存器为递减寄存器,这个寄存器是 PowerPC 结构中功能的一部分,这一寄存器的值 不断减少,但值为 0 时可以设置发生中断。 另外 2 个寄存器,保存和恢复寄存器 0 和 1(SRRO 和 SRR1)用于例外情况处理时,例外处 理服务程序将器件状态
16、寄存器和程序计数值存入这 2 个寄存器中。 还有 4 个用于操作系统的寄存器。 特殊寄存器 284 和 285 可用于基时钟,在这种情况下,监控状态可以通过这 2 个寄存器对基时 钟进行读写。 特殊寄存器 287 保存处理机版号和型号。 还有更多的特殊用途寄存器,包括那些影响器件状态寄存器的寄存器,控制调试和开发支持的 寄存器;影响缓存和 MMU 工作的寄存器,在随后本章将详细介绍这些相关寄存器。 2.4. 数据和指令(数据和指令(1/2) PowerPC 有 3 种数据长度,字节,半字长和全字长,同样我们将介绍 PowerPC 的位操作,位 由左到右,按最重要到最不重要以 0 到 31 排列
17、,它非常严格但不是全部这样重要,位 0 最重要,除 非有特殊的操作。 PowerPC 为 BIG ENDIAN。 PowerPC 结构不支持动态总线位数,所以它不允许错位存取。 PowerPC 中的指令总为字长,指令为字长,所以 2 个低位的字节地址都不需要或全为 0。 2.5. 数据和指令(数据和指令(2/2) 有 2 种基本的指令格式,一种包括指令助记符,下面有 3 个参数 RD,RA 和 RB,RD 为目的 寄存器,RA 和 RB 为源寄存器内容,在图中右边的例子中,R3 为 R4 和 R6 的相加,在逻辑运算 中,如“OR” ,R3 与 R2 或结果存入 R6。 相似的格式为“立即数指
18、令”在这里“I”跟在指令助记符后面,在这种情况下,第三个参数 为 16 位的立即数,在图中的右边举例中,R4 与 750 相加,加上符号位,结果存入 R3,在逻辑运 算中,R5 与 Ox100 ORd,符号扩展,结果存入 R4。 记住操作总为 32 位,写 32 位到 RD。 表中下半部分讲解了参数和操作的顺序,这里说明有 3 个参数的缩写,在每种情况下,RD 是 RA 和 RB 操作的结果,在减法操作种,RD 为 RA 减 RB。 在“subf”指令种,将 RA 和 RB 变换,这样 RD 为 RB 减 RA,SUSF 为一组简化的指令缩写, 它们在 PowerPC Environments
19、 书种有详细介绍。 2.6. 指令总结指令总结 这里总结 PPC 指令集中几种常用的指令。 首先为运算和逻辑指令,它与通用寄存器有关,源数据来自 GPR 或 16 位立即数,目的是 GPR 寄存器,操作为 32 位,GPR 中存放 32 位更新数据,大多数都可以望文生义,注意在最后列的 “cntlzw”指令“计算字中的第一个 0”,在一个字中找到 1 时将一个指令中的 0 的数量找出,它在 决定例外寄存器中最高优先服务时有用,我们将在例外处理那章讨论。 下面为装入存储指令,它们对数据在存储器中和通用寄存器中传送非常有用,如果数据小于一 个字,为半个字或一个字节。指令总是使数据变位 32 位,将
20、不同位填 0 或符号扩展. “lbz”为“存 0 入字节” 。 “lha”为“存半字”,意思为将符号扩展到一个字。 “lhz”为“存半字扩展” 。 下一个为“lwz”指令,它为“存字扩展 0”它为 PPC 在 64 位结构中使用准备,但在 32 位结 构中也可以使用。这个缩写不变。 还有“store byte”指令, “store half word”和store word。 下面我们看到load multiple word , store multiple word , load string word 和store string word 。 另外,还有 2 个指令结尾位“brx - st
21、hbrx 和 stwbrx 它 对 PPC 存 取 小 ENDIAN 格 式数据非常有用,有可能是 PowerPC 与其他使用小 ENDIAN 格式数据的处理机共用存储器,为使 PowerPC 可以存取这样的数据,这些指令允许存取这样的数据。如果数据以小 ENDIAN 顺序进入 总线,就把它存为大 ENDIAN 顺序。 2.7. 指令总结指令总结 下面介绍支持指令流控制的几个指令,它包括转移指令.这里我们看到转移指令,条件转移指 令,它们利用条件寄存器的位来决定是否转移,在指令的右边说明了条件寄存器,它分为 4 个 4 位 域,在每一域中的位代表小于,大于,等于和总和溢出,这个寄存器提供了 8
22、 种支持条件转移指令的 条件域。 同样还有转移到计数器的指令,SPR9 用在用户态编程模式中 特殊用途寄存器 8 可以完成基于接连寄存器的转移指令,SPR8 存储着转向子程序的地址。 还有自陷指令,一个系统调用指令, “rfi”用于例外服务程序,还有许多影响条件寄存器的指 令。 下面,我们看到处理机控制指令的表,一个非常重要的因素是这些指令可以完成特殊用途寄存 器之间和通用寄存器之间的数据交换,不可以直接对特殊用途寄存器中的值进行处理,但是,可以 将一个值先拷贝到一个通用寄存器上再处理,操作后,将信息存到特殊用途寄存器上。 “特殊寄存器移出”指令将特殊寄存器中的数据移到通用寄存器上, “移入特
23、殊寄存器”指令 将通用寄存器上的数据移道特殊寄存器上。 举例说,如果用户要初始化计数寄存器,就要将数据装入通用寄存器,这里“装入立即数”指 令装入 R13 和计数寄存器,然后,移入特殊寄存器指令将 R13 中的值装入计数寄存器。 2.8. 指令总结指令总结 下面介绍同步指令,它用于 I/O 控制和多处理机同步。第一个指令为“eieio ”让我们在下张 图 中详细了解。 2.9. 什么是什么是“eieio”指令指令 “eieio”为加强 I/O 的顺序操作, “eieio”指令提供了对 I/O 设备操作时影响存/取指令的顺序 功能,当在取指令后对 I/O 使用存指令时,编程者要利用“eieio”
24、指令。 举例说明,让我们考虑一个 I/O 设备处于一个外部存储器空间,它包括发送线和发送数据寄存 器,这里还有 TDRE 状态位,它指示什么时候发送数据寄存器为空,在本例中,用户希望发送 2 个 参数,首先,程序包括一个检查 TDRE 值的指令,在 TDRE 为 1 之前指令向前工作,当 TDRE 等 于 1 时,程序将参数写入发送数据寄存器。 这时,让我们跳过 3 行到第 4 行,程序再一次观察 TDRE 位,当这位为“1”时,写入第 2 个 参数进入发送数据寄存器。 通常,PPC 为优化资源的目的可以不按顺序在装入之后执行存入,但在本例中就不能正常的工 作。注意在第 2 行先执行第 4 行
25、,如果那样做更有效,这时,将有 2 个 TDRE 位检查发生,同时写 入 2 个参数进入发送数据寄存器。 为有效地处理这种情况,编程者加入第 3 行“eieio”指令。它标志 PPC 存入必须在装入指令 之前完成。 2.10.什么是什么是 eieio 指令指令 在 PPC 中有一些使用 eieio 的情况,第一个例子在左边,使用命令寄存器,程序将命令写入一 个命令寄存器,CPCR,然后判断最不重要的位是否位“0” 。 然后子程序写另外一个命令,这种情况下,发生写入第一个命令后紧接着存入操作和判断最不 重要位,包含了装入操作“eieio”指令保证了存入和装入顺序执行。 第 2 个例子在右边,取一
26、个向量值,为取一个向量,程序向 CPM 中断向量寄存器(CIVR)中 的中断确认位(IACK)写入 1,然后完成 CIVR 寄存器 VN 的读操作,我们又一次看到了存入后的 装入,在两个指令中必须插入“eieio”指令。I/O 设备必须在非缓存和写入页中,我们装在缓存部 分讨论。 2.11.指令总结指令总结 下一个同步指令为“isync”和“sync”,让我们进一步讨论 sync 指令。 2.12.什么是执行同步?什么是执行同步? 如果以下情况发生一个指令执行同步。 1、指令暂停。 2、非正常结束,报告了发生例外原因后,没有完成所有指令。最通用的一个例子为移入器件 状态寄存器。这里说明的为移入
27、器件状态寄存器 R3,当这条指令执行时,它要等待所有正在进行 的处理完成后进行,然后在执行下一指令时把新的值存入器件状态寄存器。 另外,一个 PPC 特殊同步指令为“移入特殊寄存器”,CPU 内核外寄存器使用,用户手册上有 详细介绍。 2.13.什么是同步指令?什么是同步指令? 同步指令在下列条件下执行同步操作: 1、等待直到所有进行的存储器操作完成。 2、发送一个地址广播,虽然在 PPC 中没有实现。 当参数中的一个状态改变时必须使用不同指令。 1、所有操作必须在参数改变前完成和/或。 2、参数必须在其它任何指令之前改变。 举例为使用同步指令进入低功耗模式,最好时在所有指令完成后进入低功耗模
28、式,然后在退出 低功耗模式之前不执行指令。 这里看一个通用例子,首先程序在进入低功耗模式之前执行同步指令,这就保证所有执行中的 指令完成。 第 2 个例子为 PPC 专用。写一个值进入 PLL 的低功耗模式位,低功耗复位控制寄存器 (PLPRCR)使 PPC 转入低功耗模式, (PLPRCE 寄存器为内部存储器空间中的一个) 。这样,在这 种情况下,编程员希望进入低功耗模式前完成所有指令, “sync”指令完成这些操作。编程员也希 望进入低功耗模式后不在有指令执行,第 2 个“sync”指令完成或这项任务,保证在任何指令执行 之前,将系统进入低功耗模式。 2.14.什么是同步指令?什么是同步指
29、令? 第 2 个例子为 PPC 专用,在本例中包括了一个中断服务程序,编程员希望通过写入 SIMASK 寄存器来禁止所有中断,程序中首先写入 SIMASK 值,然后为 sync 指令在允许中断之前,这就保 证了低优先级中断被禁止,因为在允许中断前要完成存入存储器操作。 2.15.指令总结指令总结 让我们讨论“isync”指令,这里为同步指令的表。 2.16.什么是什么是“isync”指令。指令。 isync 指令是内容同步指令,它完成 1、完成执行同步。 2、在新的内容下重载指令队列。 isync 指令在内容发生变化时使用,如当允许指令缓存或在存取没有结束但执行同步时。 在举例中,第 1 和第
30、 2 行允许指令缓存,在这时,指令队列中有几个指令。但都不在指令缓存 里,因为它们以前都没有被允许,用户在缓存允许时就把这些指令放入缓存。为执行这个功能,程 序加入了“isync”指令,将新的内容重新装入, “subroutine call ” “rfl”指令和大多数正常处理指 令也是内 容同步。 2.17.指令总结指令总结 这里还有 2 个同步指令“lwzrx” “stwcx” ,它们用于预留系统方面,这在多处理机应用时非常 有用,PowerPC 需要时可以预留共用存储器的内容,而不用擔心另外的处理機重復使用已預留的存 儲器的內容,这些指令与 68000 中的 TAS 和 CAS 有相同的操
31、作。 2.18.指令总结指令总结 下面说明的为存储器控制指令,它实现缓存和存储器的数据传送,许多指令与缓存有关,在本 章稍后将详细讨论。 2.19.指令总结指令总结 这里介绍简化或扩展的指令缩写,简化的缩写可以更简单地写和理解汇编语言程序。 如前所述,有一组简化的缩写,有一些为可理解的。如“nop”和“move register”和“not” 。 简化缩写在转移操作时最有用,这里有“大于等于转移” 。实际上它是 bc 4,0,loop 指令,但它非常难理解。 最后,我们看以下“load immediate ”,放入目的寄存器。 2.20.解释条件代码(解释条件代码(1/2) 如以前我们所见,条
32、件寄存器有 8 組,4 个位域,CRO 到 CR7,每一域都代表整数计算或比较 的 结果,每一域都以“小于” “大于” “等于” “总和溢出”条件记录。 唯一一个自动影响条件代码寄存器的是“比较”指令。 其它指令如“加” “减” “乘” “除”并不影响条件代码寄存器,除非编程者希望它们做,编程 者必须特别指定需要记录条件代码,如图左边所示。 4 个条件是“小于”当 rA 小于 rB 时, “大于”当 rA 大于 rB,这些条件可以为有符号也可以为 无符号运算,下一個是“等于”,當 rA 等于 rB,第 4 位是总和溢出,它是从 XER 寄存器拷贝过来的 总和溢出结果。 2.21.解释条件代码解
33、释条件代码 (2/2) 比较指令可以影响任何条件寄存器域。 基本的比较指令语法为缩写 cmp 后面进跟著 4 个域。 第一域说明 CR0CR7 中哪一個受影响,第 2 域指出长度,有 2 种长度选择,32 位或 64 位, PPC 中只有 32 位。第三和第四域指出將會比较的寄存器 rA 和 rB。 第二种比较的格式为“cmpl”比较逻辑,第三种为“cmpi”立即比较,第四种为“cmpli” 是 立即比較邏輯; 比较功能也可以用简化的缩写完成,第一个例子是“cmpw r13, r14”,等于“cmp cr0,0,r13,r14” , 表中下面的例子说明可以在操作数中包括 cr5,它是用来指定
34、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 大, 这样小于位设置,而大于位和等于
35、位为 0。 2.22.使用和记录运算信息使用和记录运算信息 这里我们学习使用 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
36、 中记 录进位。 2.23.使用和记录运算信息使用和记录运算信息 作为举例,编程者希望加 2 个 64 位操作数,一个操作数在通用寄存器 3 和 4 中,第二个操作 数在通用寄存器 14 和 15 中,结果存在通用寄存器 13,14 和 15 中。 这个操作由以下指令完成: 1、第一个指令 r13, 0 将立即数 0 存入 R13 去清除寄存器 13。 2、第二个指令“addcr15 to r15, r4,它将总和存入 r15 并将进位存入 XER。 3、然后,使用“adder4,r14,r3” ,将 r3,r14 和 XER 中进位相加,将结果存入 14 并 进位存入 XER。 4、最后为“
37、adder13, r13, r13” ,将进位存入 r13,加法结束。 2.24.转移类型和选址转移类型和选址 这里为可用转移类型总结表,它说明了转移缩写,转移操作和转移目的地址的產生和範圍。每 类型有“L”选项,它可以将返回地址存入连接寄存器中。 有“L”的条件转移不管是否有转移发生都将返回地址存入连接存器中。 “GOTO”是由将 GOTO 地址放入计数寄存器(SPR9)然后执行“bcctr”实现的。执行 “bclr”完成从子程序返回。 第一个转移缩写为“b” ,或转移总是相对的,這樣容許編程者轉移到程序計數器的相對地址操 作,相似的为“BA”它完成转移到绝对地址操作。 条件转移在一定类型的
38、条件存在时转移。 还有相对连接寄存器中的条件转移和相对计数器中的条件转移。 大多数转移指令后缀“l” (lower case l)允许于存入与连接寄存器下一个指令 地址相关的执行, 一个例外为“绝对转移”它以“bla”形式出现。 2.25.转移操作转移操作 这张图说明了所有转移指令类型的操作和计算转移目标地址的方法,条件代码标志,减计数器 都可以控制转移指令的程序转向。 这张图分为 2 个部分,上半部表示转移是否进行或是进入下一指令,下一半部分说明了 4 种计 算转移指令使用的计算目标地址的方法,让我们先看下半部分。 程序的转移地址可以在计数寄数器或连接寄存器中得到,指令本身提供的绝对地址也可
39、以成为 转移地址,由指令提供的值与程序中当前值相加计算的相对地址也可以作为转移地址。 现在我们看上半部分图,“相对转移”和“绝对转移”指令不需要任何条件处理,所以它们都 跳过决定逻辑和目标地址计算和转移,条件转移或“条件绝对转移”指令要检查条件是否为真,如 果条件不真,转移指令转入下一条顺序的指令,如果条件为真, 程序计数器装入转移指令。 有一些指令决定于计数器:“bdz” “bdnz” “bdnzt”和“bdzt” 。当这些指令执行时,计数器是 减的,对其中 2 个指令,它要检查计数器不等于 0,和对另 2 个指令要检查计数器等于 0,如果其 中一個回答为是,而又没有另外条件时,转移指令作用
40、。如果结果为“不”转入下一条指令。 如果有另一个条件在内,必须要检查另一条件,如果为真就转移。 2.26.条件转移指令条件转移指令 这里说明了条件转移指令类型,缩写“bc”后跟着 3 个域:“bo” 、 “bi”和目标地址。 操作码种“BI”决定在条件寄存器中判决真或假。 “BO”包含表中的一个数字,它控制条件或 判决转移。表中每个数字描述了一个特定的转移类型。从简单的“如条件为真”到复杂的“入减计 数器,如果条件为真并減计数器不等于零” 。 注意表中每个条件都有 2 套值:偶和奇,偶值提供了缺省转移预测。换句话说,预测为当显示 为负时进行转移,当显示为正时不转移。奇值提供相反的预测。 2.2
41、7.条件转移指令条件转移指令-举例举例 让我们来看一些条件转移的例子。 首先为条件转移。 “BO”为“12”说明转移条件为真。 “B1”为“2”说明程序要检查条件寄存 器中的第 2 位。即 CRO 中的“eq”位置位,这样,当等于设置时转移到目的地址。如果程序员希 望完成预测相反的相同指令,应该将“BO”改为“13”在简单缩写中,它利用在指令缩写前加一 个负号实现。 对条件寄存器中的每一位我们都可以完成相似的转移,如例中所示。 “branch conditional 12,14” , “14 为 CR3 的“eq”位置” ,它等效于简单缩写中的“beq cr3, target”. 另外的例子是
42、“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”代
43、 表减计数器,如果条件为真并计数器不等于 0 转移,条件 为第 2 位,即 CRO 中的“eq” ,紧跟为目的地址,相对缩写为“bdnzt eq, target” 。 2.28.控制程序流程练习控制程序流程练习 这里为几个控制程序流程的练习,下面看第一个例子。 这段程序从 FIFO 中取数据字并存到存储器缓冲中,直到有值为 0 的数据字存入缓冲区,第一步 是取字 0 放入从 r14 和 r13 指向的地址,它从 FIFO 取字。 下一步为将字与 0 比较,它可以用“cmpwi r13, 0”指令,然后程序必须将字存 入存储器缓冲 区,然后如果字不等于 0。转移 LOOP。 第二个例子与第一个相
44、似。程序从 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.29.控制程序流程练习控制程序流程练习 第三个例子为结合前 2 个,程序从 FIF0 中
45、取数据字然后存入存储器缓存直到有 0 存入缓冲区 或达到 528 个最大值。初始化计数器,程序执行load immediate r13 到计数 寄存器,然后程序执 行load word zero 从 R14 和 R13 所指的位置:下一步指令 cmpwi r13,0,将 0 与 r13 比较,然后程 序将字存入存储器缓冲区,下一个指令为减计 数器,如果计数器不为 0 和字不等于 0,程序转到 2,不然到 6,这个指令为“bdnzt ne, loop。 2.30.写子程序和写子程序和 I/O 处理处理 调用子程序命令将返回地址存入一个单独位置:连接寄存器(LR) ,它要求调用其它子程序的子 程序
46、调用之前将连接寄存器放入堆找,然后在子程序调用后把连接寄存器从堆找中恢复,Leaf sub-rountine是子程序不调用其他子程序,也不需要保存和 恢复连接寄存器,GPR 寄存器使用来指 出什么 GPR 用于保存和恢复。 这个例子说明了一个子程序在堆找中保存,恢复连接寄存器。 在主程序中有几条指令,包括转移到子程序指令“bl sub1 当“bl sub1指令执行 时,程序计 数器移入连接寄存器,sub1 移入程序计数器。 程序 sub1 执行几个指令,然后调用另一个子程序 sub2,注意如果 sub1 简单地调用第 2 个子程序 而不采取任何步骤,连接寄存器的内容被复盖,于是就不能回到主代码
47、,这样,就需要程序员将连 接寄存器的内容进入堆找,现将两个步骤加在一起,首先mfspr rN,lr指令把连接寄存器的 内容移到 通用寄存器,跟著是stwa rN,-r(-1)指令把通 用寄存器存入堆找,现在利用“bl,sub2”指令可以安全 的调用第 2 个子程序。sub2 执行并返回 sub1,程序从堆找中取值并存回连接寄存器,sub1 继续执 行,在最后执行 bclr 指令。使用连接寄存器的值回到主程序。 2.31.写子程序和写子程序和 I/O 管理管理 另外一个重要的功能是处理 I/O 设备,程序员利用和修改测试 RAM 和 ROM 位置一样的方法 测试和修改 I/O 设备的寄存器,这是
48、因为 I/O 设备为存储器映向的。 第一,存入指令将数据写入 GPR,然后,程序测试和修改 GPR 的数据,最后,存入指令将数 据写回设备。许多 I/O 设备为 8 位宽,MOTOROLA 建议,从管脚 D0 到 D7 连接这些设备。许多 I/O 设备要求正确的管脚顺序,在这时设备的 DO 必须与 PPC 的 D7 连接,PPC 中 DO 与设备中 D7 连接。编程员可以设置指向 I/O 设备的指针。然後每一个寄存器都可以进行移置。 这个例子中假设存储器控制器已完成。 例子中“load byte zero从 rA 指向位置偏移 0 的位置取数目的寄存器。另一个例子为 “load byte ze
49、ro从 RA 指向位置偏移 5 的位置取 data2 的内容,并存入 r13。 可以用同样的方法存信息,使用“store byte”指令从寄存器到 rA 指向位置位移d的 位置。 第第 3 章章 HDLC 协议协议 3.1. HDLC 帧格式帧格式 HDLC 是一个最常用的数据链层通信协议,许多其它通用协议基于 HDLC,这个图说明了 HDLC 帧的帧结构。 HDLC 帧以至少 8 位的开始标志开始,标志包含一个值为 0 x7E 的 8 进制数,标志后为 8 位或 16 位的目的地址,后面跟着为 8 位或 16 位的控制域,PPC 的 HDLC 控制器不用控制域,但它是标 准 HDLC 的一部
50、分,信息域是可选的,如果信息存在,它必须有 8 位整数数量的长度,后面为 CRC 位,长度为 16 或 32 位,最后域为 8 位结束标志。发送 HDLC,在图中上部箭头的区域内的 信息存入发送缓存,同样,图中下半箭头描述了存入接收缓存的数据。 3.2. HDLC 点到点。点到点。 HDLC 支持点到点或多点传输,这页讲的为点到点 HDLC 传输支持。 HDLC 控制器支持个别缓存及帧的中断,注意,这些中断包括传送缓存发出,接收缓存关闭和 接收帧。PPC 没有“发送” 状态位。 接收的极限减少中断的开销,可以在许多,短的输入事件时设置极限这样,在接收到一个给定 数量的后,控制器产生中断,而不是
51、在每一个单独接收到后。有 5 个 16 位错误计数器,另外,控 制器自动产生标志和放充,而且自动产生和检测空闲。HDLC 控制器使用 0 插入和删除过程,通常 成为以保证分隔标志的位格式不出现在标志之间域中。 它同样完成 16 或 32 位 CRC 产生和校验,错误计数器检查非 8 位排列的。控制器检测过长的。 最后,可以在连续的之间编程几个标志,用值 0 到 15,值 0 意思为一个的结束标志认为下一 的开始标志为同一个。 3.3. HDLC 多点。多点。 类似以太网,配置为多点 HDLC 就需要处理寻址和冲突处理。 HDLC 提供 4 个地址比较寄存器,对每个点提供最多 4 个地址,如果用
52、户与地址比较寄存器同 时使用屏蔽寄存器,还可以提供每点更多的地址数量。 HDLC 控制器在发生冲突时,还提供重发功能,有 2 种重发功能,用户可以选择任一种。 第一种重发功能为正常方式:如果 HDLC 控制器在传送第一个或第二个缓存时检测到 CTS 丢 失。数据会重新发送当 CTS 再次出现。 当 CTS 重新出现时,自动重发,第二种重发功能为 HDLC 总线方式,我们在本章后面讲讨论, 基本的 HDLC 发送工作。 3.4. HDLC 控制器怎样发送数据。控制器怎样发送数据。 当 GSMR_LX 寄存器中的 ENT 位设置,HDLC 控制器进入发送允许状态,在这个状态控制器 发送空闲位或标志
53、,这决定于 GSMR-HX 寄存器中 RTSM 域的内容。 HDLC 控制器在发送缓存描述符中选取第一个缓存描述字,当发送缓存描述字准备好时, HDLC 控制器进入发送方式,在之间插入用户定义的最少标志后开始发送。 注意,一个可以包含多个缓存,这样,控制器可以进入一个循环,发送 Last 位为 0 的缓存。 然后关闭这个缓存,处理下一个缓存描述字,如果一个缓存描述字包含一个准备好位为 1 控制器发 送这个缓存,后面下去。 最终,控制器遇到一个缓存描述字 Last 位等于 1 的一个缓存,控制器进入关闭发送状态。 如果 CRC 允许,控制器附加一个 CRC 域,修改缓存描述字,清除准备好位,设置
54、事件寄存器 中的发送缓存发送位,然后,控制器附上标志,重新进入发送允许状态。刚才描述的为 HDLC 发 送的标准流程。 但是,PowerPC 也可以发布一个停止命令,这时,在完成当前发送后,控制器象以太网发送一 样执行停止命令,而控制器还在停止状态,SCCEX_GRA 设置指明为当前状态。 这时,PowerPC 重组它的发送数据,可能会修改发送参数。 当 PowerPC 重新准备好发送时,它写一个重新开始发送命令进入命令寄存器,将控制器返回 发送允许状态。 同样,可能会发生冲突,将控制器进入等待状态,当 CTS 丢失或控制器在 HDLC 总线方式及 TX 和 DCTS 管脚不等时会发生冲突,控
55、制器停止在等待状态,直到 CTS 出现或检测到一个空闲总 线,这时,控制器重新进入发送允许状态。 3.5. 基本基本 HDLC 接收工作。接收工作。 当在 GSMR_LX 寄存器中的 ENR 位允许时,HDLC 控制器进入接收允许状态,在这个状态, 控制器等待一个标志。 当出现一个标志时,控制器进入地址允许状态,等待一个非标志,一个非标志必须为一个地址, 控制器将地址与 HADDRX 和 HMASK 域的地址比较。 如果不相配,控制器重新进入接收允许状态。 如果相配,HADDRX 和 HMASK 地址与进来地址相配,而且可一个空的缓存,控制器进入接 收状态,接收进来的数据存入缓存中。 当控制器
56、受到第 2 个标志,它进入尾状态,检测 CRC,将长度写入计数域。设置最后Last位, 清除E位,如果接收达到极限并且中断位设置时,控制器可能会出现长度超过最大定义的值,这 时,控制器进入太长状态,它不接收任何多的数据,但继续纪录位元组的数量,当结尾标志出现, 控制器进入尾状态,完成所需步骤然后设置状态和控制域中的 LG 位。 3.6. HDLC 总线配置。总线配置。 PPC HDLC 控制器可以工作为 HDLC 总线方式的特殊方式,如本页和下页所示的配置, HDLC 总线方式允许基于 HDLC 的 LAN 和其它点对多点配置。 在第一种配置图种,RX、TX 和 CTS 都工作在一个线上,任意
57、 2 点可以发送 HDLC 总线提供 一种机构,可以自动取得总线控制,完成冲突时的重发。 3.7. HDLC 总线配置。总线配置。 HDLC 总线方式也可以配置为如图所示,在这个例子中,结点配置为一个主和多个从,注意, 在所有从结点上,TX 和 CTS 工作在同一线上。 基本总线方式的变化包括作用 TDM 总线,作用非复用方式的串行接口(请参考串行接口章节) 或者利用外部缓存工作在延迟 RTS 方式,请参看用户手册。 3.8. HDLC 总线发送工作。总线发送工作。 这个状态图描述了 HDLC 总线发送工作,当 GSMR_LX 寄存器的 ENT 位为 1,而且有发送缓 存,控制器进入发送准备好
58、状态,控制器在没有检测到总线上的连续 8 个“1”时,一直处于准备 好状态。 HDLC 总线用 CTS 管脚监视发送数据,连接到 CTS 输入的发送数据为线式方式,如 0 有比 1 的高优选级,控制器用 CTS 管脚计数 1 位数量,当控制器接收到 8 个连续 1 时它进入发送状态, 开始发送,只要 CTS 管脚处在于发送时的相同值,控制器一直处于发送状态,在结尾时,控制器 进入发送完成状态。 如果第 2 个站点同时发送,就有可能发生第一个站点发送 1 而 CTS 线为 0,因为第 2 个站点将 信号拉低而控制器检测到一个不错误,识别为一个冲突,脱离总线,进入发送准备好状态,当 2 个 站点试
59、图同时发送时,有第一个 0 的站点用总线。 为保证所有站有同样权力共享总线,在 HDLC 总线中有一个优先级机构,当一个 HDLC 总线 站点完成一发送后,它等待 10 个连续 1 位而不是 8 个,然后开始下一发送,在检测到 10 个连续 1 时,它可以发送和变回等待 8 个 1,再继续。 下面的图说明 CTS 管脚如何使用,CTS 再使用发送时钟上升位事件的半部取样,如果发送位 时间的半部取样,如果发送位与接收到的 CTS 取样相同,HDLC 总线控制器继续发送.如果 CTS 取 样是0,但发送的却是1,HDLC 总线控制器停止发 送,返回激活条件。 3.9. HDLC 定义参数定义参数
60、RAM 这页和下一页总结了初始仪 HDLC 参数 RAM 得值 有 2 个 CRC 值:CRC 常数和 CRC 初始化,每域支持 2 个可选值,根据为 HDLC 为 16 或 32 位。用户手册定义了相应的值。 下面为 5 个错误计数器,所有都初始化为 0,它可以计算丢掉的帧数量,CRC 错误,停止的帧, 不相配地址和重发帧数量。 最大帧长度寄存器域定义接收帧的最大数量八字节,如果输入帧超过这个长度,控制器丢掉超 过的帧,调用帧长度状态过程。 3.10.HDLC 定义参数定义参数 RAM。 下面为接收帧极限,用户这里定义再发生接收帧事件错误之前可以接收的帧的数量,产生中断, 1 值为接收到一个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农产品贸易操作流程与风险控制
- 餐饮食品安全抽检技术规范汇编
- 山东省济宁市兖州区2025届高三上学期期中质量检测物理试卷(含答案)
- 机动车驾驶员培训教材与考核标准
- 【《水下定位信标发射机硬件设计案例》7800字】
- 【《石墨烯的性质和制备方法概述》2200字】
- 青年筑梦演讲稿
- 【《循环球式转向器第一级传动副的设计计算案例》3100字】
- 环保小卫士的演讲稿
- 祝福语演讲稿
- 2025云南省交通投资建设集团有限公司下属曲靖管理处收费员招聘(76人)考试参考试题及答案解析
- 2025年法院书记员职位选拔综合能力测试题(附答案)
- 养老机构劳务合同标准版范本
- 2025驻村工作队员工作总结
- 2025四川省现代种业发展集团华峰汇农农业科技有限公司招聘3人考试参考试题及答案解析
- GB/T 13591-2025乙炔气瓶充装规定
- 中心静脉的护理
- 幼儿园膳食安全培训知识课件
- 纪念白求恩课件模板
- 护士静脉导管常见并发症护理实践指南解读考核试题及答案
- 2025年秋季青岛版三年级数学上册主题活动:曹冲称象的奥秘测试题(含答案)
评论
0/150
提交评论