微型机系统与接口技术自学部分 只作扩展知识用 本电子课件包含2011版第3, 6, 7, 8章自学部分 东南大学计算机科学与工程学院
第3章 80x86汇编语言程序设计
3.6 宏定义、宏调用与宏展开(自学) 宏定义是源程序中一段有独立功能的程序代码。将这一段程序定义为一条宏指令,并具有一个相应的宏指令名,在程序中就可以多次调用它,调用时只需要引用一个宏指令名来代替这一段程序就可以了。在汇编的时候,汇编程序会自动将这个宏指令扩展成整段程序。
宏定义 宏定义有两种格式: 1、简单宏定义 宏名 MACRO …… ;宏体 ENDM 简单宏定义示例 CRLF MACRO …… ;宏体 ENDM 简单宏定义示例 CRLF MACRO MOV AH, 02H MOV DL, 0DH ;回车 INT 21H MOV DL, 0AH ;换行 ENDM
2、带形参的宏定义 宏名 MACRO <形参表> …… ;宏体 ENDM 带形参的宏定义示例 …… ;宏体 ENDM 带形参的宏定义示例 MULTIPLY MACRO OPR1, OPR2, RESULT PUSH DX PUSH AX MOV AX, OPR1 IMUL OPR2 MOV RELUST, AX MOV RESULT+2, DX POP AX POP DX ENDM
宏调用 宏调用有两种格式: 1、对简单的宏定义的调用:宏名 2、带形参的宏定义的调用:宏名<实参表> 宏调用示例 CRLF MULTIPLY CX, VAR, XYZ[BX] MULTIPLY 240, BX, SAVE
宏扩展(宏展开) 宏扩展——汇编程序对汇编源程序汇编时将宏体 插入到宏调用处 MULTIPLY宏扩展示例 + PUSH DX + PUSH AX + MOV AX, CX + IMUL VAR + MOV XYZ[BX],AX ;实参替换形参 + MOV XYZ[BX]+2,DX + POP AX + POP DX 说明: 汇编程序在所展开的指令前加‘+’号以示区别
宏指令与子程序的区别 子程序 宏指令 程序执行期间 在汇编期间展开 由主程序调用 它只占有自身 与调用次数有关,每调用一次 子程序 宏指令 程序执行期间 在汇编期间展开 由主程序调用 它只占有自身 与调用次数有关,每调用一次 大小的空间 就把宏定义体展开一次 执行时需增加时间 直接执行宏体 上的额外开销
宏定义的进一步讨论: 1、宏定义可以无变元 2、变元可以是操作码 宏定义: FOO MACRO P1, P2, P3 MOV AX, P1 ENDM 宏调用: FOO WORD_VAR, INC, AX 宏展开: + MOV AX, WORD_VAR + INC AX
3、变元可以是操作码的一部分,必须用&作为分隔符 宏定义: LEAP MACRO COND, LAB J&COND LAB ENDM 宏调用: LEAP C, THERE 宏展开: + JC THERE
4、变元是ASCII串 宏定义: MSGGEN MACRO LAB, NUM, XYZ LAB&NUM DB ‘HELLO MR.&XYZ’ ENDM 宏调用: MSGGEN MSG, 1, TAYLOR 宏展开: + MSG1 DB ‘HELLO MR.TAYLOR’
5、宏定义体内允许使用标号, 此时,须使用LOCAL伪操作 宏定义: ABSOL MACRO OPER LOCAL NEXT CMP OPER, 0 JGE NEXT NEG OPER NEXT: ENDM 宏调用: ABSOL VAR …… ABSOL BX 宏展开: + CMP VAR, 0 + JGE ??0000 + NEG VAR + ??0000: …… + CMP BX, 0 + JGE ??0001 + NEG BX + ??0001:
6、宏定义中可以使用宏调用,(必须先定义后调用) 宏定义: DIF MACRO X, Y MOV AX, X SUB AX, Y ENDM DIFSQR MACRO OPR1, OPR2, RESULT PUSH DX PUSH AX DIF OPR1, OPR2 IMUL AX MOV RESULT, AX POP AX POP DX
3.7在VC++中嵌入汇编语言指令(自学) 本节类容适合在Visual C++5.0/60中使用 格式1:_asm { 汇编语言指令 } 说明:1)格式1中{ }内可以是1条也可以是多条汇编指令 2)格式2只能跟一条汇编语言指令 3)有些版本的VC需要使用__asm(两个下划线)
嵌入汇编示例1 _asm { mov eax, 01h mov dx, 0xD007 out dx, eax } 嵌入汇编示例2 _asm mov eax, 01h _asm mov dx, 0xD007 _asm out dx, eax
在_asm中使用汇编语言的注意事项: 嵌入式汇编支持80486的全部指令系统。VC++5/6还支持MMX指令集。 对于不支持的指令,VC提供_emit伪指令进行扩展 #define cpi_id _asm _emit 0x0F _asm _emit 0XA2 _asm { cpu_id} //使用C++的宏 嵌入式汇编代码可以使用MASM的表达式来产生一个数值或地址 嵌入式汇编行可以采用C++或MASM的注释风格 嵌入式汇编可以使用C++的数据类型和数据对象,但是不能使用MASM的伪指令和操作符定义数据,如DB, DW, DUP等
嵌入式汇编不支持MASM的宏指令,也不支持大部分MASM伪指令 用汇编语言编写的函数中,不必保存EAX/EBX/ECX/EDX/ESI和EDI寄存器,但是必须保存函数中使用的其他寄存器 嵌入式汇编代码可以使用LENGTH(返回数组元素个数)、 TYPE(返回 C++类型或变量的大小)、 SIZE(LENGTH×TYPE)操作符。 对于数据 int iarray[8](int类型是32位,4字节),则: LENGTH iarray 返回8 TYPE iarray 返回4 SIZE iarray 返回32
在_asm中使用C++语言的注意事项: 嵌入式汇编代码可以使用C++的符号(包括标号、变量、函数名)、常量(包括符号常量、枚举成员)、宏和预处理指令、注释、类型名及结构、联合的成员。 每一个汇编语句只能包含一个C++符号,且不能使用和MASM保留字相同的C++符号,也不识别struct和union关键字 _asm中引用函数前必须在程序说明其原型 嵌入式汇编语句中可以使用汇编语言格式表示整数常量,也可以采用C++的格式(如0x37a)
嵌入式汇编语言中不能使用C++专用操作符,如<<,可以使用两种语言都有的操作符 嵌入式汇编中可以引用包含该_asm作用范围内的任何符号(包括变量),它通过使用变量名引用C++的变量 嵌入式会变中的标号的作用范围为定义它的函数中有效,汇编转移指令和C++的goto指令都可以跳到_asm块内或块外的标号 _asm块中定义的标号对大小写不敏感,汇编语言指令跳转到C++中的标号也大小写不敏感,但C++的goto语句跳转的标号大小写敏感
int array[6] struct first_type { char *carray; int same_name; } ftype; struct second_type { int same_name; } stype _asm { mov array[6], dx mov ebx,OFFSET ftype mov ecx, [ebx].carray mov esi, [ebx]ftype.same_name } 使用C++数据举例
嵌入式汇编举例: #include <iostream.h> int power2(int, int); void main(void) { cout<<"2的6次方乘5等于:\t"; cout<<power2(5,6)<<endl; } int power2(int num, int power) { _asm { mov eax, num ; 取第一个参数 mov ecx, power ; 取第二个参数 shl eax, cl ; 计算EAX=EAX×(2CL) } // 返回值存于EAX
汇编语言通过参数名就可以引用参数,采用return返回出口参数,也可以不写return,编译时可能有警告。 返回值的约定: ≤32位的数据扩展到32位,存放在EAX中返回 4~8字节的返回值存放在EDX.EAX中返回 更大的字节数据将它的地址指针存放在EAX中返回
第6章 微机总线标准
6.3.6 USB2.0的补充——OTG技术(自学) USB On-The-Go(OTG)是对USB 2.0规范的有益的扩充。这类设备既可以作为USB设备与PC机相连,又可以作为USB主机连接其它USB设备。因此,这类设备可以抛弃PC,直接进行设备与设备之间的点对点(pear to pear)通信。 USB On-The-Go 在USB 规范基础上增加了以下几点 双重功能。设备既可用作主机也可用作外设 主机交流协议HNP 用于转换USB 主机和外设功能 对话请求协议 除小和大功率之外增加了微功率选择 超小连接器
USB On-The-Go 设备定义了一个新的称之为mini-AB 的袖珍插孔,它能接入mini-A 和mini-B 插头。连接器的不同定义设备的初始功能。 VBUS D+ D- GND ID ‘1’: Slave B设备 ‘0’: Master A设备 mini-B 插头 mini-A 插头 VCC USB On-The-Go 设备定义了一个新的称之为mini-AB 的袖珍插孔,它能接入mini-A 和mini-B 插头。mini-AB 插孔有一个ID 引脚上拉至电源端。mini-A 插头有一个与地连接好的ID, mini-B 插头有一个开路ID引脚。当两个On-The-Go 设备连接到一起时mini-A 插头边的ID 引脚会注入一个‘0’ 状态,mini-B 插头边的ID 引脚为‘1’ 。ID=0 的On-The-Go 设备默认为主机(A-Device),ID=1 的On-The-Go 设备默认为从机(B-Device)
两个OTG RTR(主/从双角色)设备相连,可以用主机交流协议(HNP)随时切换主机角色。步骤如下: A设备发出SET_FEATURE命令后,B设备可请求总线控制权。 A设备挂起总线,通知B设备可占用总线。 B设备发送信号,断开A设备连接。 A设备启动D+线本方的上拉电阻,将D+置高。此时A设备成为外设,B设备成为主机。 B设备完成对总线控制后,启动D+线本方的上拉电阻,放弃对总线的控制。 在以上电平变换的同时,通过软件实现真正的对总线的控制权变化。
6.3.7 开发具有USB功能的设备的先期准备(自学) 1.分清开发的设备类型 嵌入式USB主机 USB Hub 基于HID(人机接口设备)的USB设备 USB OTG设备 2.选择合适的控制芯片 内嵌USB模块和嵌入式CPU核的SOC芯片 内嵌单片机内核的USB控制芯片 可与其它嵌入式CPU相连的单独USB控制芯片
3.一般的开发步骤 根据选择的器件和要实现的功能,设计相关电路。 编制软件(根据不同应用,设计其中部分或全部软件)。 - 设备驱动程序(对USB设备,或OTG设备) - USB主机设备的控制程序(对主机或OTG设备,如完成枚举功能等) - 主机和设备的角色切换驱动(对OTG设备) - 编写相关的PC端软件 4.目前常见的控制芯片 SL811HS 是Cypress公司的产品,ISP系列是PHILIPS公司产品,OTG243是TransDimension公司的产品。 GL652USB是Genesys Logic公司的产品。 OTG芯片:ISP1362,OTG243 主机/设备芯片: SL811HS,ISP1161 设备芯片:PDIUSBD12,ISP1581 HUB芯片:GL652USB
6.3.8 USB 3.0概览(自学) 最高速为4.8Gbps 采用全双工传输 接口由4线改成8线 增加的4线路用于数据发送或接收 USB 3.0 的供电力提高到了每个端口900mA 与USB2.0和USB1.1向下兼容 USB 3.0之所以有“超速”的表现,完全得益于技术的改进。相比目前的USB 2.0接口,USB 3.0增加了更多并行模式的物理总线。可以拿起身边的一根USB线,看看接口部分。在原有4线结构(电源,地线,2条数据)的基础上,USB 3.0再增加了4条线路,用于接收和传输信号。因此不管是线缆内还是接口上,总共有8条线路。正是额外增加的4条(2对)线路提供了“SuperSpeed USB”所需带宽的支持,得以实现“超速”。显然在USB 2.0上的2条(1对)线路,是不够用的。 此外,在信号传输的方法上仍然采用主机控制的方式,不过改为了异步传输。USB 3.0利用了双向数据传输模式,而不再是USB 2.0时代的半双工模式。简单说,数据只需要着一个方向流动就可以了,简化了等待引起的时间消耗。 其实USB 3.0并没有采取什么鲜有听闻的高深技术,却在理论上提升了10倍的带宽。也因此更具亲和力和友好性,一旦SuperSpeed USB产品问世,可以让更多的人轻松接受并且做出更出色的定制化产品。 “SuperSpeed USB”改进远不止在传输速率方面的提升。在USB 3.0中,设备和电脑主机之间如何更加融洽的配合,也被当作了一项重点研究的方向。在继承USB 2.0核心架构的基础上,如何利用双总线模式的优势,如何让用户能够直接的体验到USB 3.0比USB 2.0的先进,成为了重点: 需要时能提供更多电力 USB 3.0能够提供50%—80%更多的电力支持那些需要更多电能驱动的设备,而那些通过USB来充电的设备,则预示着能够更快的完成充电。 新Powered-B接口由额外的2条线路组成,提供了高达1000毫安的电力支持。完全可以驱动无线USB适配器,而摆脱了传统USB适配器靠线缆连接的必要。通常有线USB设备需要连接到集线器或者是电脑本身上,而高电能支持下,就不需要在有“线”存在了。 不需要时就自动减少耗电 转换到USB 3.0,功耗也是要考虑的很重要的一个问题,因此有效的电源管理就很必要,可以保证设备的空闲的时候减少电力消耗。 大量的数据流传输需要更快的性能支持,同时传输的时候,空闲时设备可以转入到低功耗状态。甚至可以空下来去接收其他的指令,完成其他动作。 其实,在USB 3.0中也并不是所有的东西都更新换代了,比如线缆的长度。当在某些应用中需要尽可能高的吞吐量的时候,往往线缆依旧会成为瓶颈。虽然在USB 3.0规范中,没有明确指定USB线缆有多长,但是电缆材质和信号质量还是影响了传输的效果。因此在传输数百兆大数据流的时候,线缆长度最好不要超过3米。 另外,一些支持“SuperSpeed USB”的硬件产品,例如集线器(hub)可能要比USB 2.0的贵很多,这就像是现在主动供电集线器和被动供电的一个道理。因为一个真正意义上的“SuperSpeed hub”应该具备2类接口,一个用来扮演真正“SuperSpeed hub”的角色,另外一个则要扮演普通高速hub的角色。 网络上有一些非官方的言论谈到了USB 3.0可以使用光纤,其实这正是USB规范组织正在考虑的问题,也许会在下一个修正版本中推出,也许会让一些有能力的第三方公司来尝试一下。 USB 3.0具有后向兼容标准,兼容USB1.1和USB2.0标准,具传统USB技术的易用性和即插即用功能。USB3.0技术的目标是推出比USB2.0快10倍以上的产品,采用与有线USB相同的架构。除对USB 3.0规格进行优化以实现更低的能耗和更高的协议效率之外,USB 3.0的端口和线缆能够实现向后兼容,以及支持未来的光纤传输。 USB3.0将采用一种新的物理层,其中,用两个信道把数据传输(transmission)和确认(acknowledgement)过程分离,因而达到较高的速度。为了取代目前USB所采用的轮流检测(polling)和广播(broadcast)机制,新的规格将采用封包路由 (packet-routing)技术,并且仅容许终端设备有数据要发送时才进行传输。新的链接标准还将让每一个组件支持多种数据流,并且每一个数据流都能够维持独立的优先级(separate priority levels),该功能可在视讯传输过程中用来终止造成抖动的干扰。数据流的传输机制也使固有的指令队列(native command queuing)成为可能,因而能使硬盘的数据传输优化。 为了向下兼容2.0版,USB 3.0采用了9针脚设计,其中四个针脚和USB 2.0的形状、定义均完全相同,而另外5根是专门为USB 3.0准备的。 标准USB 3.0公口的针脚定义,白色部门是USB 2.0连接专用针脚,而红色部分为USB 3.0专用。 标准USB 3.0母口的针脚定义,紫色针脚为USB 2.0专用,红色为USB 3.0连接专用。 USB 3.0线缆如果不算编织(Braid)用线,一共是8根,值得注意的是,在线缆中,USB 2.0和3.0的电源线(Power)是共用的。 Mini USB 3.0接口分为A、B两种公口(Plug),而母口(Receptacle)将有AB和B两种,从形状上来看,AB母口可兼容A和B两种公口,3.0版公口的针脚是9针。
6.4 PCI-Express总线 (自学) 6.4.1 PCI-Express总线的主要性能特点
5、具有更高的数据传输速率(2.5Gbit/s的单向单线连接传输速率 ) 6、拥有存储器地址空间、IO地址空间和配置地址空间 1、串行的点对点互连 2、使用差动信号 3、使用交换器来互连多台设备 4、采用基于数据包的协议 5、具有更高的数据传输速率(2.5Gbit/s的单向单线连接传输速率 ) 6、拥有存储器地址空间、IO地址空间和配置地址空间 7、采用层次结构 8、热插拔支持 9、与PCI兼容的软件模型 PCI Express的基本结构包括根组件(Root Complex)、交换器(Switch)和各种终端设备(Endpoint)。根组件可以集成在北桥芯片中,用于处理器和内存子系统与I/O设备之间的连接,而交换器的功能通常是以软件形式提供的,它包括两个或更多的逻辑PCI到PCI的连接桥(PCI-PCI Bridge),以保持与现有PCI兼容。当然,像PCI Express-PCI的桥设备也可能存在。在PCI Express架构中的新设备是交换器(Switch),它取代了现有架构中的I/O桥接器,用来为I/O总线提供输出端。交换器支持在不同终端设备间进行对等通信。下图1就是PCI Express 1.0的拓扑结构图。
6.4.2 PCI-Express总线结构
(1)根联合体 集成了多种控制器,替CPU产生事务请求,它还可以代表CPU发起配置事务请求、生成存储器和I/O请求和锁定事务请求。 根联合体发送数据包离开其端口,或从其端口接收数据并转发至存储器。 根联合体初始化用来形成请求者或完成者的设备ID,通常由总线号、设备号和功能号组成。根联合体的总线、设备及功能号都被初始化全为0。
(2)交换器 交换器利用基于存储器、I/O或配置地址的路由方法转发数据包。 交换器根据下面3种路由机制之一转发这些数据包:地址路由、ID路由或隐式路由。 交换器能实现两种仲裁机制:端口仲裁和VC仲裁,并且依据仲裁机制确定将入端口数据包转发至出端口的优先级。交换器支持锁定请求。
(3)端点 端点可以作为请求者发起事务,或者作为完成者对事务做出响应。 端点有PCI Express端点和传统端点两种。传统端点支持I/O事务,而且可以作为完成者支持锁定事务语义,还可以利用消息请求产生传统中断信号,但另外还必须支持产生利用存储器写事务的MSI。 PCI Express端点必须在可预取存储地址空间内支持64位存储器寻址能力。 两种类型的端点都实现了0类 PCI配置头,并且作为完成者对配置事务做出响应。
6.4.3 PCI Express事务简介 事务:为请求者和完成者之间完成一次信息传送需要完成的一系列一个或多个数据包传送的过程。 PCI Express事务可以分成4大类:存储器事务、I/O事务、配置事务和消息事务。
6.4.4 PCI-Express的层次结构 PCI Express 设备A PCI Express 设备B 设备核心 设备核心 核心逻辑接口 PCI Express 核心逻辑接口 发送 接收 发送 接收 事务层 事务层 数据链路层 数据链路层 物理层 物理层
(1)设备核心/软件层 设备核心是由根联合体核心逻辑或诸如以太网控制器、SCSI控制器、USB控制器等端点核心逻辑组成。 设备核心逻辑与本地软件一起提供PCI Express设备生成TLP所需的必要信息。 (2)事务层 事务层主要负责生成出站TLP流量和接收入站TLP流量。 (3)数据链路层 数据链路层的主要功能是保证在各链路上发送和接收数据包时数据的完整性。 (4)物理层 TLP和DLLP类型的数据包从数据链路层发送至物理层,并通过物理链路传送。物理层也从链路上接收数据包并将其发送至数据链路层。
第7章 中断与异常
7.5 串行中断(自学) 7.5.1 串行中断结构 SERIRQ INTR SIO IRQx ICH8 LPC47B27X CPU … 7.5 串行中断(自学) 7.5.1 串行中断结构 SIO LPC47B27X SERIRQ INTR IRQx ICH8 CPU … PIRQx IRQ14,15 PIRQx … ICH8 串行中断驱动部件 SERIRQ 串行中断分离部件 2个8259 部件 INTR IRQ14,15
SERIRQ包含IRQ0, 1, 3~15, PIRQA#~PIRQD#, SMI#和IOCHK#。但实际上并不支持IRQ0、8、13中断。实际的IRQ14、IRQ15实际上也不从SERIRQ中传到南桥。 SERIRQ线采用同步单线传输结构。 遵循PCI信号使用的三态协议。 S-取样阶段 信号为低电平。 R-恢复阶段 信号为高电平。 T-翻转状态 信号被释放 SERIRQ上信息分帧传输。
7.5.2 帧结构 1.开始帧 操作模式: 连续的(ICH8单独产生开始帧) 静态的(一个串行IRQ设备来启动开始帧) 2.停止帧 长度:2或3个时钟宽度。(由SERIRQ配置寄存器决定) 含义:2—SERIRQ设备触发下次开始帧; 3—ICH8触发下次开始帧。
3.数据帧 长度:21个时钟宽度。 驱动:需请求中断的设备在自己的数据帧中将SERIRQ驱动: IRQ0~15在没有中断请求的时候将SERIRQ线驱动为低电平 PCI INT[A:D]#,SMI#和IOCHK#在有中断请求的时候将SERIRQ线驱动为低电平 否则都将SERIRQ线变为三态,由上拉电阻将他们驱动到高电平 。 所谓自己的数据帧是指在21个时钟中数据帧号和本设备的IRQ号码相等那一数据帧。外设要在SERIRQ的上升沿开始计算帧。
7.6 APIC(自学) 7.6.1 APIC子系统组成 1.组成 Local APIC、I/O APIC和APIC总线。 处理器核心 模块 I/O APIC 模块 INTIN 23 INTIN 0 系统中断请求 APIC 时钟 PICD0 PICD1 PICCLK LINT0/ INTR LINT1/ NMI 处理器0 处理器1 返回下页
经APIC总线送来的处理器间中断请求(IPI); Local APIC: 转上页 包含了8259A和8254的功能。 响应的中断: I/O APIC送来的系统中断请求; 经APIC总线送来的处理器间中断请求(IPI); 本地的中断请求(定时、错误、计数、连线)。 I/O APIC: 多达24个中断; 中断优先级与中断号独立; 不需要中断响应周期。 可选择某个或一组处理器中的一个为目标处理器。
组成:APICD0、APICD1、APICCLK。 类型:串行同步总线。 串行时序:不同时钟先高位,后低位;同一时钟D1高位,D0低位。 内容:EOI命令和短消息。 应用:连接的每个模块均有自己的ID(固定); 每个模块均有自己的仲裁ID(可变,初值来自模块ID)。 APICD1、APICD0为集电极开路门:见‘1’,APICD*为低电平;全‘0’,APIC*为高电平。
2.APIC中断类型 系统中断: 经I/O APIC模块引脚送入的中断请求。 交中断请求指定的目标处理器处理。 本地中断: 定时、计数、错误、INTR及NMI。 只能由本地处理器处理。 处理器间中断: 电平撤消初始化、初始化、启动、远程读、SMI、NMI等。 交目标处理器处理。
7.6.2 I/O APIC的寄存器 1.直接访问寄存器 INDR:[R/W]存放需访问的间接寄存器编号。 DATR:[R/W]间接访问寄存器访问结果。 IRQPAR:[W]存放置位方式产生的中断向量号。 EOIR:[W]存放正在服务(将结束)的中断向量号。 2.间接访问寄存器 IDR:[R/W32B]存放模块自己的固定的ID。 VERR:[R32B]存放有无IRQ声明和重定向寄存器数。 ARBIDR:[R32B]存放模块的仲裁ID。 BOOT_CONFIGR:[R/W32B]存放中断传递方式。
RDR:[R/W64B]索引编号10H~3FH, 每个RDR占两个号。 中断向量 逻辑模式--8位 物理模式--低4位 传递模式 Vector DM DS DtM RIRR TM M 目标APICID L 中断向量 传递模式 000—固定式 001—最低优先权式 100—NMI 111--ExtINT 目标模式 0—物理方式 1—逻辑方式 递交状态 0—空闲 1—正在递交 逻辑模式--8位 物理模式--低4位 屏蔽位 0—允许 1—屏蔽 中断请求 0—无 1—中断未决 引脚极性 0—高电平激活 1—低电平激活 触发模式 0—边沿 1—电平
7.6.3 APIC工作过程 1.中断请求产生并递交 收到引脚信号有效改变时,置位RDR的RIRR位,争取总线使用权后,向APIC总线发送短消息。 目标处理器(目标模式及传递模式)已在RDR中设定。 边沿触发方式时,消息传送后将RDR的RIRR位复位。 2.处理器接受中断请求产生并服务 目标处理器(可能多个)的Local APIC收到请求后,根据传递模式,确定本处理器是否命中。 命中的目标处理器做相应中断处理,当处理器核心执行的代码优先级低于中断请求优先级时处理中断。
3.中断结束阶段 中断为电平触发方式时,发布EOI命令通知I/O APIC做结束处理。 当前处理器的总线使用权降为最低。
7.6.4 APIC总线仲裁 结构:分布式仲裁。 空闲状态:D1D0=11(某消息结束后)。 仲裁周期:5个时钟周期。 CLK D1 D0 解释 1 EOI D1=1:常规,D1=0:EOI 2 NOT (ARBIDR[27]) 仲裁ID,如果ICH8检测到的值和自己发送的值不一样就失去仲裁资格。 3 NOT (ARBIDR[26]) 4 NOT (ARBIDR[25]) 5 NOT (ARBIDR[24]) EOI传输优先级高于正常传输。 仲裁算法:轮转优先级算法。 仲裁得胜者置为0,其余模块一律加1。
第8章 ICH8中的常规接口
8.2 DMA操作(自学) 8.2.1 DMA技术概述 1. 数据传送的控制 1)数据的来源; 2)数据的去处; ◆ 数据传送涉及的3个问题 1)数据的来源; 2)数据的去处; 3)数据本身以及如何控制数据的传送。
◆ DMA方式控制的数据传送
硬盘和软盘I/O; 快速通信通道I/O; 多处理机和多程序数据块传送; 在图像处理中,对CRT屏幕送数据; ◆ DMA传送方式通常用来高速传送大批量的数据块。如: 硬盘和软盘I/O; 快速通信通道I/O; 多处理机和多程序数据块传送; 在图像处理中,对CRT屏幕送数据; 快速数据采集; DRAM的刷新操作。
(1)存储单元传送:存储器→存储器。 (2)DMA读传送:存储器→I/O设备。 (3)DMA写传送:I/O设备→存储器。
2. DMA传送的工作过程 1)I/O设备向DMAC发出DMA请求; 2) DMAC向CPU发出总线请求; 3)CPU在执行完当前指令的当前的总线周期后,向DMAC发出总线响应信号; 4)CPU脱离对系统总线的控制,由DMAC接管对系统总线的控制;
5)DMAC向I/O设备发出的DMA应答信号; 7)完成设定的字节数据传送,CPU恢复对系统总线的控制。
3. DMA传送的方式 1) DMA操作类型 数据传送。数据传送是把源地址的数据传送到目的地址中去。 数据检验。当数据传送完毕之后,可以进行校验操作。校验操作并不进行数据传送,只进行数据校验。但操作过程仍然要通过DMAC向CPU提出申请,进入DMA周期。 数据检索。数据检索操作并不进行数据传送,只是对在指定的内存区内查找某个关键字节或某几个关键数据位是否存在,如果查找到了,就停止检索操作。
2) DMA操作方式 单字节操作方式。每次进行DMA操作只操作一个字节 。 连续操作方式。只要DMA操作开始,DMAC始终占用总线,直到DMA操作完成,才把总线控制权交还CPU。 请求操作方式。如果有DMA请求,则DMAC就占用总线;当DMA请求无效,或DMA操作完成,或由外部传来过程结束信号(EOP)时,DMAC都会释放总线。 级联传送方式。
4. DMA控制器在系统中的两种工作状态 1)主动态 在DMAC获得总线控制权之后,DMAC取代CPU而成为系统的主控者,接管和控制系统总线(数据总线、地址总线和控制总线)。通过总线向存储器或I/O设备发出地址、读/写信号,以控制在两个实体之间的传送。 2)被动态 在DMAC获得总线控制权之前,DMAC受CPU控制(。此时,CPU可对DMAC进行初始化编程,也可从DMAC中读出状态。当DMAC上电或复位时,DMAC自动处于被动态。
8.2.2 82C37A 的内部结构和引脚功能说明 1. 82C37A的特点 ① 具有4个独立的DMA通道,每个通道都可独立地进行初始化。 ④ 每个通道进行一次传送的最大字节数为64K。 ⑤ 提供4种传送方式:单字节传送方式、数据块传送方式、请求传送方式和级联传送方式。 ⑥ 时钟频率从DC到5MHz的全静态设计。 ⑦ 在5MHz的时钟频率下传送速率高达1.6MB/s。
2.82C37A 的内部结构 ① DMA通道 ② 读/写控制 ③ 控制逻辑
82C37A内部逻辑框图
2.82C37A 的引脚功能
8.2.3 82C37A 的内部寄存器
1.控制寄存器
2.工作方式寄存器
3.状态寄存器
4.请求寄存器
5.屏蔽寄存器
82C37A DMA控制器端口地址
8.2.4 软命令 1)清先/后触发器软命令 MOV AL, 0XXH ;0XXH为AL中任意值 OUT 0CH, AL ; 先/后触发器被清“0” 2)总清除软命令 MOV AL, 0XXH ;0XXH为AL中任意值 OUT 0DH, AL ;写入总清端口,执行总清除命令 3)清屏蔽寄存器软命令。 MOV AL, 0XXH ;0XXH为AL中任意值 OUT 0EH, AL ;写入清屏蔽寄存器端口
8.2.5 DMA控制器的工作时序 DMA空闲周期SI 过渡状态S0 DMA 有效周期(S1、S2、S3、S4) 82C37A内部状态变化流程
8.2.6 82C37A的初始化编程 ①命令字写入控制寄存器 ②屏蔽字写入屏蔽寄存器 ③方式字写入方式寄存器 ④清“0” 先/后触发器 ◆ 初始化编程的步骤: ①命令字写入控制寄存器 ②屏蔽字写入屏蔽寄存器 ③方式字写入方式寄存器 ④清“0” 先/后触发器 ⑤写入地址寄存器字节寄存器 ⑥解除屏蔽 ⑦写入请求寄存器
8.2.7 ICH8中的DMA控制器 1.82C37A DMAC的级联
2.如何扩展82C37A DMAC的寻址空间
3.应用举例 现假设在级联的82C37的主片通道1,将内存其始地址为80000H的280H字节的内容直接输出到外部设备。 MOV AL, 4 ;命令字, 禁止82C37工作 OUT 08, AL ;写命令寄存器 MOV AL, 0 OUT 0CH, AL ;清除先/后触发器 OUT 02, AL ;写低位地址 OUT 02, AL ;写高位地址
MOV AL, 8 ;页面地址为8 OUT 83H, AL ;写页面寄存器 MOV AX, 280H ;传输字节数 DEC AX OUT 03, AL ;写字节数低位 MOV AL, AH OUT 03, AL ;写字节数高位 MOV AL, 49H ;模式字: 单字节读, 地址加1 OUT 0BH, AL
MOV AL, 40H ;命令字: DACK和DREQ低有效 OUT 08H, AL ;正常时序, 固定优先权 MOV AL, 01 ;清除通道1屏蔽 OUT 0AH, AL WAITF: IN AL, 08 ;读通道1状态 AND AL, 02 ;传输完成否 JZ WAITF ;没完成则等待 MOV AL, 05 ;完成后屏蔽通道1 OUT 0A, AL ……
8.3 实时钟电路及其应用(自学) 8.3.1 MC146818特性及工作原理 MC146818外部引脚图
MC146818在系统中连接框图
实时钟工作原理示意图
COMS RAM实时钟信息存放位置表 偏移地址 信息内容 秒 7 日 1 报警秒 8 月 2 分 9 年 3 报警分 0A 状态寄存器A 4 时 0B 状态寄存器B 5 报警时 0C 状态寄存器C 6 星期几 0D 状态寄存器D 32H 日 期 世 纪 可以用INT 1A功能读取或设置这些值。
8.3.2 RT/CMOS RAM操作 965芯片组ICH8的RTC电路包含128字节标准CMOS RAM 区和128字节扩展CMOS RAM区。 访问RT/CMOS RAM的端口地址范围从70H~77H。其中,70H和71H用来访问标准CMOS RAM 区,72H, 73H用来访问扩展CMOS RAM 区。 MOV AL,6H ;6H是存放"星期几"的单元偏移地址 OUT 70H,AL ;送地址端口 JMP $+2 ;芯片I/O延时要求 IN AL,71H ;读数据端口 MOV AH, AL ;AH中存放的是当前“星期几”的信息 ;0表示星期日
8.3.3 CMOS 密码的破解 基本原理是破坏CMOS中的设置,使得开机后必须重新设置CMOS,从而破解密码。 mov AL, 2EH out 70H, AL mov AL, 00H out 71H, AL mov AL, 2FH out 71H, AL CMOS中偏移为2EH和2FH的位置放的是标准校验和