在计算机专业中,接口技术是比较难于理解的。那难在什么地方?这要从接口课程的内容说起。接口,从字面上比较容易理解。它不会大篇幅的去研究计算机各个零件内部的结构,以及各自是如何工作的。它研究的是各个零件之间是如何协同工作的。它们的连接就是通过接口。知道了这一点,让我们继续分析这门课程需要我们学习哪些东西。
首先我们需要掌握一定的硬件知识,可能不需要很深入的掌握每一个细节。但是谈到接口所针对的就是各个硬件,难免会经常涉及硬件的一系列术语,如果
对硬件比较熟悉,那么就不会感到陌生,否则陌生的概念一多,本来简单的东西也就变得难于理解。其次,它们的协同工作是在他们硬件基础上,通过一系列的程序来控制的。这里的程序不是我们平常所见到的程序,比如用VB,VC等开发的应用程序。而是直接可以操纵硬件接口的硬件程序,当然了,多半是用汇编语言写的。所以我们必须对汇编语言有一定的掌握。
说到这里,可以总结一下,如果想顺利的学好接口这门课(为什么说顺利呢?是指在学习这门课的时候不会突然感觉门槛太高,非常吃力,而是建立在以往知识的基础上,比较平缓的过渡),1. 需要一定的硬件知识,起码对各个硬件术语不会感觉多大的陌生2. 有一定的汇编语言实践基础,记住:不是只会一些语法,只学会语法,你根本不知道这门语言能用来干什么。
这些知识落实到我们的专业课,就是以下:
1.模拟电路和数字电路 -- 最底层的硬件电路知识
2.计算机组成原理 -- 比较高层的硬件的系统知识,先让我们了解各个独立的零件的内部原理,为进一步了解零件间的协作打好基础
3.汇编语言程序设计 -- 不用多说,当然就是编程能力的要求了
看来这门课需要我们能够“软硬通知”。(注:通“知”,只是知,而非精通,所以不需要太过紧张)
1.概论:
遵照一般的顺序,我们先把大的方面说一下,先就主要的方面做一个纵览,先知道这门课大概在说什么东西,然后在后面的章节进一步介绍各个分块的细节内容。
计算机是建立在CPU基础上的,对于CPU,我们并不陌生,它的功能这里就不用说了。这里说说它的发展历史:
最早期的CPU是4位的,以后它的位数都是整倍的增加(可以这样说,很容易记住),于是出现了8位,16位,32位,64位CPU,每次变化都被称为一代。数一下就知道,到目前为止有5代了(4,8,16,32,64)。至于它的出现年代不用去记,没有多大意义,我们只要知道这个趋势就行了。顺便问一下,第6代CPU是多少位?当然是 64 * 2 = 128位。大的历史就是这样。
不过中间的历史需要做一个说明,第一代不是纯粹的4位,还包含低档的8位,如Intel 8008就是8位的。
后来的发展,如果说Intel的,我们比较熟悉,8086,286,386,486,奔腾… 这里需要插一句,我们平常熟悉的586并不在教科书中出现,为什么呢?因为586当时被别的公司恶意注册了!所以才改名奔腾。而我们用户却在延续这样的命名习惯,官方已经不用这种命名了。
首先说说CPU的组成,它包含三个部分:
1. 运算器
2. 控制器
3. 寄存器阵列 这里就理解为一系列的寄存器,因为CPU运算时的需要,单独的几个寄存器是无法满足需要的,必须提供一系列的寄存器供CPU工作时存放相应的数据。
微处理器,微型计算机和微型计算机系统的关系:
首先说一下,这只是一种人为的规定。作为一种概念不可或缺,我们知道就行了,过多的研究意义不大。打个比方,多少棵树可以称为树林,多少棵树可以成为森林?只是一种概念而已。不过这三者的概念还是相当清晰的。
微处理器就是一颗CPU而已,就是一块独立的芯片。而
微型计算机系统,谈到系统当然是最大的概念,包含一系列的软硬件,注意:软件也包含在里面。而
微型计算机可以理解为一台主机,键盘鼠标什么的都没有,什么软件也都没有。
总线总线:
系统的各个零件之间需要传送数据,归纳了一下,需要传送数据的零件无非是
CPU,
内存,
I/O接口 这三种东西,其他的硬件都不需要交换数据。于是,系统总线也就是为这三种零件间交换数据服务的,是它们之间交换数据的通道。
系统总线根据它传送的数据内容分为:
1. 数据总线
2. 地址总线
3. 控制总线
这里需要明确一个概念,不管是什么总线,它上面传送的都是数据,不要理解为只是数据总线上传送的才是数据。这里是根据数据的用途来人为划分的,是设计上的需要。比如地址总线上专门用来传送地址数据,控制总线上专门用来传送控制数据和状态数据。
数据传送有单向的,也有双向的。其中数据总线是双向的,为什么呢?比如我打开一个文件需要把硬盘上的文件读入内存,其实就是通过硬盘接口把硬盘的的数据通过数据总线传送到内存中。而我们保存文件时是相反的方向,把内存中编辑好的数据再写回硬盘,所以它是双向的。而地址总线就是单向的了,因为需要传送的地址只有CPU才知道,CPU需要的时候就会通知别的设备我要从哪里提取数据。
总线根据范围级别又可以分为
1.
片总线 就是一个零件内部的总线,零件内部当然也是由很多子部件组成的,它们之间也需要进行数据交换。
2.
内总线 主机内部各个零件
之间的数据通道。
3.
外总线 顾名思义,这种总线是用来和外部设备交换数据的。看看机箱上的一系列接口,所对应的总线都是外总线。
至于这三个总线还有别的名称,比如内总线又称为
系统总线,微机总线,板级总线。。。都是指一种东西,能记住更好,不过清晰的理解以上的概念才是最主要的,概念的东西总是重在理解,茴香豆的“茴”你只要知道一种写法就够了。
第二章 80X86微处理器
2.1
8086微处理器结构
这是早期的X86系列的CPU,尽管现在看来比较老,但是大体的结构变化不大。熟悉了8086,其他的CPU也就可以很快能够理解。
为了说明CPU的结构,还得说说它的功能,再看看需要什么样的结构才能够实现这种功能,按照这种思路,便很容易理解CPU的各个组成结构,不会孤立的去学习,否则往往各个部分都很熟悉,却不知道为什么会这样。
CPU的功能简单的说就是
执行指令。不过“执行指令”这4个字看似简单,其实却很复杂。一个程序一般都有很多的指令,不可能把这些指令都放在CPU中,这些指令都是放在内存中的。既然放在内存中,就需要把它取出来放在CPU中,这就是
取指过程。然后就是指令本身,指令需要操作数的(可以为0个操作数),这个操作数也是在内存中的。指令有了,操作数有了,然后CPU就可以执行了,这个当然是在CPU内部执行的,它怎么执行的跟接口没关系,是它自己的事情,我们不用管。它执行完成后就要将结果(如果有)输出,输出到哪里?只有内存或者端口。
我们把上面的过程概括一下,指令执行的过程包括:1。取指,输出结果过程 2。执行过程
执行过程当然是CPU内部完成的,称为执行部件EU。而取指,输出结果过程是交给总线接口部件(BIU)完成的。
需要说明的是,当CPU执行指令的时候是不需要总线的,也就是说这时候总线是空闲的,如果能够利用这个空闲的时间来取出下一条指令,则执行效率会大大提高。在8086的设计中,BIU和EU能够独立的运行。这时候就需要指令队列来存储从内存中取出的多条指令,而执行单元EU则不断的从这个指令队列中取出指令来处理。需要说明的是,取指令并不仅仅从内存中取,有时还需要从I/O端口中取出,这种区别已经被BIU处理了,对别的器件来说这种区别是透明的。
8088与8086的区别
可以说它们是处在过渡阶段(从8位到16位过渡阶段)的两个不同产品,基本上它们是相同的。区别是:8086是完全过渡了,是标准的16位CPU,它的数据总线是16位的,而8088的数据总线却是8位的。尽管它们
对外的总线接口不同(一个8位,一个16位),内部却都是16位的。
8086的寄存器结构
寄存器是CPU在运算时一些中间数据的暂存地址,按照其用途的不同可以分为
通用寄存器,
指令指针,标志寄存器和段寄存器 四类。其它三种可以理解为专用寄存器,每种寄存器都有它约定俗成的用途,本质上和通用寄存器没有什么区别,但是根据约定,这些寄存器只能用于这些用途,很多指令都有它默认的寄存器。其中指令指针最为简单,它就是一个单独的寄存器,在16位机中是16位,依次类推,在目前的机器中是32位,总是跟当前CPU的位数相对应,只是用来记录当前指令的段内地址偏移量,没有别的用途,内部也没有什么细分。而标志寄存器FR(Flag Register)比较复杂,其中的每一位都有特定的意义,且人为的给每一位起了一个名称,比如 OF,DF,IF,TF…至于它们的具体位置我们不用管,只要记得这些标记以及它们的作用就可以了,因为我们不会根据位的位置来对标志寄存器进行操作,这些操作都是封装在指令中。
段寄存器:这种寄存器是和程序的设计紧密关联的,并不是硬件设计的需要,而是为了程序设计的需要。因为程序一般包括数据段,代码段,堆栈段,以及自定义的段。如果采用通用寄存器来存放这些经常使用的段的地址,不是很方便,而且容易混淆,所以就在硬件中单独设置了这样的寄存器供程序直接使用,结构比较清晰。
8086系统中的存储器组织和物理地址的形成
在存储器中,是按字节(8位)为单位进行存储的,我们经常所说的256MB内存,就是指256兆字节,注意这里是MB,而不是Mb。b表示位,而B表示字节。而一个字就是CPU一次能够读取的长度,16位机就是16位,32位机为32位,依次类推。
说到8086的存储器组织,不得不先声明一下。目前的PC机的存储结构已经和8086完全不同了,以前的8086由于地址线有20位,而数据线却只有16位,且内部寄存器等都是16位。也就是说程序只能使用这16位的地址,那如何解决呢?如果按照16位的范围把20位分为各个段,然后告诉程序段号是多少,然后每一段内的地址,16位就可以表示了。而目前的PC内部都是32了,可以表示所有的地址,所以也就不需要再采用这种复杂的结构了,只是作为学习,我们还需要提到这种组织方式。
物理地址与逻辑地址:物理地址比较容易理解,就是在内存中的实际地址。而逻辑地址是对程序来说的。我们目前程序中如果指定了地址,这个地址并不是指内存的实际地址,而是指相对于程序起始位置的偏移量,程序的起始位置系统知道,地址的偏移量也知道,很容易就知道它在内存的实际地址,两者相加就可以了。
注:
DOS
时代的程序不是这样的,可以直接访问物理地址,操作系统不加任何保护。
值得注意的是:起始地址并不是指完整的地址。比如起始地址为 1111,1010,0000,0000 (二进制) ,只需要写出前12个位 1111,1010,0000 ,后面的4位不写,所以在相加的时候需要把段地址左移4位补上这4位,然后再加上偏移地址。
记住,不同的段都有对应的段寄存器。总是先取出该段寄存器的值左移四位,然后加上偏移量(也就是IP)。知道了这个我们只要记住,代码段取CS,堆栈段取SS,数据段取DS的值。
8086微处理器的引脚功能
CPU引脚是CPU与外部进行通信的唯一接口,它的所有功能通过这些引脚来引用的。
既然这些引脚是和外部零件进行通信的,我们就分析一下是和哪些零件进行通信,然后这些引脚的分类也就清晰了。首先就是内存,需要和内存进行数据交换,这种交换是通过总线来实现的,而不是直接连接。所以CPU引脚需要连接总线。而所要连接的总线又包括地址总线,数据总线,控制总线。每一个引脚只能连接总线的其中一根线,所以这些引脚实质上会和总线的位数相对应,而有很多个。不过在8086的引脚的设计需要注意,并不是一一对应的,怎么回事呢?因为要节约引脚的数量,所以通过分时复用的方法,使得引脚的数量减少了一半。其中一部分是地址/数据总线分时复用,另一部分是地址/状态总线分时复用。地址总线怎么都出现了呢?很容易理解,地址总线有20位,而数据总线只有16位。还空出4位可以和4个状态线进行共用。其次就是一些控制信号线,一方面是CPU的控制指令通过这些引脚发送出去,另一方面外部的一些状态要通过这些引脚反馈回来。
占数量最多的是这些总线引脚,不过很容易理解,如上所说。下面我们来专门讨论控制信号以及其他的引脚。
在最小方式和最大方式两种方式下,有些引脚的含义是不同的。先说相同的部分。
BHE/S
7 这也是两个功能信号,通过分时复用的引脚。BHE低电平时把读写的8位数据与AD15 – AD8连通。
最小方式与最大方式
为什么会有两种方式呢?是由于系统可大可小,可以是单个CPU的,也可以是多个CPU组成,其中我们家用的电脑多是单CPU的,而有的服务器就是多CPU的,也就是此时CPU处在最大方式。这两种方式的运行有很大不同。多个CPU工作牵涉到协作的问题,比如解决总线占用的问题。因此必须标记当前是处在什么工作状态。知道了这个以后,我们再来研究这两种方式到底有哪些不同之处。
如何标记呢?引脚MN/MX为高电平就处在最小方式,否则是最大方式。
两者最大的区别在于对总线的控制,单个CPU最简单,总线完全被一个CPU控制,这时CPU可以产生所有的总线控制信号,而当存在多个CPU时就会发生冲突,因为大家都在控制一个总线。这时候就需要一个别的设备来协调这种工作。8288就是这样的芯片,称为
总线控制器。此时的控制信号就不是单个CPU产生了,而是由这样的芯片来完成。至于多CPU可能产生的总线读写控制冲突,则由专门的芯片 总线仲裁器8089来完成。
从8086到PentiumIII
从8086到80286都是16位微处理器
80286最大的特点就是出现了两种工作方式:
实方式 和
保护方式,实方式可以对8086完全兼容,也就是所有的8086的程序都可以在80286的实方式下执行,基本上可以理解为实方式就是以前的老的工作方式。那么新增加的保护方式是出于什么目的呢?从8086的段寄存器可以看出,CPU内部的硬件在设计时也开始考虑程序的设计的方便性了,会为目前的程序设计方式提供方便。由于操作系统的发展,多任务,多用户,以及虚拟存储器的技术以及地址空间的保护等,迫切需要CPU本身对这些做出相应的设计,以方便实现。针对操作系统的这种要求所以出现了保护方式。它的出现是为操作系统的实现方便的。这是CPU发展的一种趋势,最近出现的Java芯片,就是这种芯片可以直接运行Java语言,也是顺应这种趋势出现的。随着硬件的发展,它的功能也会越来越高级。甚至进入当前不属于它的领域。甚至以后会出现CPU就是低级的操作系统,我们现在的操作系统只是在此基础上的二次开发,这当然是后话了。
从80386开始,进入了32位的时代。它内部的寄存器也是32位了。如:原来的AX变为EAX,E表示扩展的意思。它是和原来的CPU兼容的,如果运行16位的程序,只会用到寄存器其中的16位,所以可以做到通用。80386在80286的基础上又增加了一种工作方式:虚拟8086方式。为何称为虚拟呢?因为它只是实现8086的功能,实质上却是工作在保护模式下,所以它可以很迅速的在V86方式和保护方式之间切换。
80486同样也是32位的,然而同80386相比,它进行了全新的设计,使得相同的工作频率下,486可以比386处理速度提高2-4倍。下面就看看是哪些设计提高了工作速度。
1. 80486采用了RISC技术
2.采用了高速缓冲存储器(Cache)
3.增加了独立的浮点运算部件
Pentium, Pentium Pro,MMX, Pentium II 和Pentium III
第三章 存储器及其接口
任何不同类型的存储器,都是可读的,而有的存储器能写入数据,而有的却不同。所以存储器可以分为
随机存取RAM 和
只读存储器。这里需要正确理解“只读”的含义,只是说一般使用情况下是只读的,而不是说这个介质是只读的,这个一定要明确,否则很容易产生疑问。比如E
2PROM 也是只读存储器的一种,但是可用电信号进行擦除和改写。但是一般使用的情况下,它只能读。
存储器与CPU的连接有以下连接线:
1. 地址线,CPU告诉接口它需要读取或者写入的地址
2. 数据线,它们相互交换数据的通路
3. 控制线,相关的操作控制信息
一个存储器往往是由多个存储芯片组成的,对存储器的访问,首先应该是选择哪一个芯片,然后才是这个芯片内的地址,所以是分为两步进行的。其中选择哪一个存储芯片简称为“
片选”,而在被选择好的芯片内部选择要读写的单元则被称为“
字选”,注意,这里是字,而非字节!因为存储器的读写都是以字为单位的。片选是通过专门的一个芯片来完成的,这样的芯片被称为
地址译码器。典型的地址译码器有74LS138,它是中规模的集成电路。当然了,不是每个存储器都使用地址译码器的。如果其中的芯片数量很少,简单的门电路就可以实现了,根本不需要单独的地址译码器。
实现片选控制的三种方法
何谓片选控制的方法呢?首先得说,存储器的地址是CPU指定的,而CPU只能通过引脚来发送指令。那么CPU是通过所有的地址引脚参与呢还是部分参与呢?如果是全部参与的话,由于可以表示所有的地址范围,所以可以做到一一对应。而如果是部分参与的话,相当于用一把小尺子去丈量一个比较大的尺寸,必然要分成好多个部分来进行。这里要说说“地址重叠”,本来一个地址和一个内存单元应该一一对应,如果两个地址值对应了同一个内存单元,那么我们就说是地址重叠了。如果CPU的地址线全部参与,可以做到一一对应,当然不会出现地址重叠。而如果只是部分参与的话,也就是说剩下的没有使用的地址引脚为任意值,对应的内存地址都是同一个,这里CPU的地址是指所有的地址引脚所对应的地址值,因此就会发生地址重叠。
控制信号的连接
存储器需要哪些信号呢?首先你得告诉存储器所引用的是哪一个存储芯片,其次对存储器的操作无非是读与写,那么什么时候存储器能够写入,什么时候存储器能够输出(也就是读),必须有一个控制信号。相对应这三个需求,就有 片选信号
CE ,写允许信号
WE和输出允许信号
OE。 从上面的内容知道,片选是由地址译码器完成的,所以OE是接地址译码器。OE是读的时候使用的,所以应该接读信号线RD,而WE则应该接写信号线WR。
这里注意一下,对于EPROM来说,并不是OE有效时就能够输出数据,还必须同时CE也允许才可以,也就是说当OE,CE同时满足时才能够读,这样的控制方法称为“
双线控制”。一旦CE不允许,则处于高阻抗状态,此时无论OE为何值,都无效。
当存储器与CPU连接时,需要考虑一些问题。首先就是CPU总线的负载能力,CPU能够提供的线路电量等是有一定范围的,不可能提供无限多的连接,一般只能连接一个TTL器件或者20个MOS器件。那如果超过了怎么办呢?只能通过增加额外的器件来支持,这样的器件就是缓冲器和驱动器。这样的器件要分为单向的还是双向的两种,如果是双向的就得采用数据收发器。其次应该考虑CPU与存储器芯片的存取速度的配合问题,两者最好匹配,在存储器的速度跟不上CPU的时候,CPU就必须在总线周期中插入等待周期T
w。
16位微机系统中的内存储器接口
说完了一般的存储器接口技术,现在专门针对16位机,也就是8086系列的,来说说其接口特点。
1.
16位微机系统中内存储器芯片的奇偶分体
微机系统要求CPU一次能够访问整个字或者一个字节。在16位机中,奇地址用一个存储体,而偶地址也用一个存储体。地址都是交错的,而不是,前面一半地址用一个存储体,后面一半地址用另一个存储体。注意:两个字节正好是16位机的一个字。因为是只有两个存储体,所以只需要一条线就可以指定,其中A
0就是用来指定存储体 不过总线高允许BHE必须也允许才行。在连接上,由于每个存储体只需要8位,所以每个存储体各自连接CPU的8个引脚,通过数据总线相连。其中D0 ~ D7连接偶存储体,而D8 ~ D15连接奇存储体。
2.
8088/8086的存储器访问操作
1.字节访问和字访问
8088的数据总线是8位的,而CPU访问存储器是通过数据总线进行的,所以一次只能访问一个字节。如果要访问一个字,则必须访问两次。
而8086的数据线为16位,应该可以存放16个位的数据,可是这是有条件的。这16位被认为是一个字,如果是字,则高低字节是有顺序的,如果访问的两个存储体的地址正好和字相符,则可以完成一个字的访问,否则顺序相反,只能分别进行两次访问。当该变量的地址是偶地址时,一个周期就可以完成对该字的访问。
这样就引出一个概念“
对准的”字与“
未对准的”字,如果恰好一次可以访问一个字,就说它是“对准的”,否则就是“
未对准的”,这从字意就可以理解。
如果读写存储体的一个字节,不管是高8位和低8位,/BHE和A0总是不一样的,当/BHE=L,A0=H时读写奇地址的高字节,否则偶地址的低字节。
输入输出与中断
说完了主机的内部设备,这里开始说说对外是如何通信的。对外通信无非就两种操作,一种是数据从外部输入到系统中来,另一种就是把系统的数据输出到外部。这样的过程简称为“输入/输出”。键盘鼠标这样的设备就是输入设备,而显示器就是输出设备,这很容易理解,随便举一个外设也很容易知道它是输入设备还是输出设备。但这些设备并不是直接同微机相连的,而是通过“外设接口”这样的控制电路间接连接的。
外设接口并不是通用的,不同的外设都对应自己的接口。因为外设的多样性,信号,速度等都不相同。所以它的接口是多样性的。
一个外设接口应该实现哪些功能呢?首先能够想到的就是提供转换功能,使得设备的信号格式,电流和微机的信号格式,电流能够匹配。另外外部设备的状态也需要通知主机,以便作出处理,所以接口中还应该提供
联络信号。还有就是有的外设功能是比较全面的,这就要求其对外是可编程的,以充分发挥其功能,而这种能力也要在其接口中体现。另外如果一台微机这样的设备可能有很多个,那么主机如何来区分是哪一台设备呢?这就必须在接口电路中设置设备号,以
进行译码选址。
综上所述,外设接口电路应该具有如下功能:
1. 转换信息格式
2. 提供联络信号
3. 协调定时差异
4. 进行译码选址
5. 实现电平转换
6. 具备时序控制
7. 最好可编程序
上面提到过,主机并不是和外设直接相连的,而是通过接口电路,那么 主机_接口_外设 这三者具体都是通过什么相连的呢?主机与接口是通过三种总线(数据,地址,控制)进行连接。而接口和外设直接传送的是数据信息,控制信息和状态信息。
这里提到的数据信息当然就是从外设采集来的数据,并不是单纯的数字信息,还有可能包括
模拟量,开关量。不管是什么数据,最终传到CPU都必须是数字量,这个转换工作是由接口完成的。模拟量是通过模数转换器转换为数字量的,而开关量使用两个状态表示的,只用一位二进制码表示就可以了,不需要转换(有可能做电平的转换)。
I/O端口的编址方式
CPU访问I/O端口也和访问内存一样,必须知道了地址才能进行访问。地址总是有一个范围的,比如从000000H到800000H,如果端口和内存共用一个地址范围,怎么说呢?比如000000 – 0000FFH 属于端口,000100H – 800000H属于内存,当CPU指定一个地址时,根据这个地址属于哪一个范围来决定是访问内存还是访问端口。这样的编址叫做存储器映像编制,也就是像访问内存一样访问端口,只是如果该地址属于端口的,会自动映射到对端口的访问。显然,这种方式内存的地址被占用了一部分,内存空间必然减少,但是编程比较灵活,不需要单独的指令。另一种方式就是端口的地址和内存的地址是独立的,各自访问各自的,大家不共用一个地址,称为独立编址。
数据传送的控制方式
当外设的数据向CPU传送时,特点也是不同的,因为外设的种类是多样的,有的要求速度很慢,而有的则要求很快。比如键盘的输入速度每秒最多也就几个字节,而显卡则能达到上百兆,显然它们的数据传送方式会有很大的区别。
既然是两者之间的数据传送,就有一个谁是主要角色的问题,如果是以CPU为主实现这种控制则称为
程序控制传送方式,而如果以设备为主,则称为
DMA方式。
这里需要正确理解主角的含义,并不是说主角完成所有的工作,配角也会完成相应的工作,通信是CPU和外设双方的事,任何一方不动作通信都不可能实现。另一方面,并不是权力大的称谓主角。在CPU与外设的通信过程中,不管是什么控制方式,CPU永远都处在领导地位,因为是程序决定对外设的访问的,所以传送的发起者总是CPU。但是过程中承担的任务量却是不同的。程序控制传送方式是CPU全程监控,而DMA方式只需要CPU发起,其后的工作都是由设备完成,当完成后通知CPU即可。
同样是程序控制传送方式,还有很多区别,产生区别的原因在于外设的区别。有的外设的工作与CPU是同步的,在规定的时间内外设总是保证能将数据准备好,此时CPU只需要在规定的时间读取就行了,根本不用考虑外设是否发生什么问题,数据有无到位,这是可以采用
无条件传送方式,顾名思义,就是CPU不用判断外设的一些情况,可以直接读取数据。
可是当外设和CPU不能够做到同步时,比如外设的准备时间可能不固定,或者由人工控制,这时候CPU可以不停的查询外设的状态,一旦外设准备完成了,这时候CPU才去读取数据,这个过程主要是CPU不断查询外设状态的过程,所以称为“
查询传送方式”。
可是如果有多个设备的时候,就不能采用这种方式了,因为CPU必须始终检测一台设备的工作,不能从中解脱出来,所以如果有多台设备,必须把这种检测工作转移到外设一边,当外设一旦完毕,告诉CPU就可以了,CPU不用不停的检测,这种方式叫做
中断方式。
如果在一个时刻,有多个设备发出中断请求,CPU会根据预先的有限规则进行排序,以保证不会发生冲突,以实现几个外设的并行工作,这样的控制电路称谓
中断控制电路。该控制电路具有以下功能:
1. 能控制多个中断源实现中断传送
2. 否是同时发出的几个中断请求能够进行优先级判断,防止发生冲突
3. 能实现中断嵌套 为什么要能够嵌套呢?因为在CPU处理一个外设的中断请求的时候,如果有优先级更高的设备提出中断请求,那么CPU应该可以暂停当前的中断处理来处理这个优先级更高的请求。
4. 仅仅接受中断还是不够的,中断的时候必须还知道中断时应该调用哪些处理程序。这样的程序地址被称为
中断类型码。
中断控制电路用来控制所有的外部中断请求,比如需要采用中断方式的外设有三个,那么这三台外设的中断请求都是通过一个中断控制电路来控制的。它只是用来处理已经发过来的中断,自己并不会替各个外设来发出中断请求,中断请求是外设自己发出的,每个外设都有这样的中断请求发生装置,这样的装置成为“
中断传送方式的接口电路”。
DMA(直接存储器存取)传送方式
程序控制传送方式的速度比较慢,其中最快的中断方式,每传送一个字节就得把主程序停下来,转而去执行一段中断服务程序,执行以前还需要保护现场,执行完成后恢复现场。如果需要传送一片大的连续的数据内容时,每个字节都这样去处理,显然很浪费。这时候只需要CPU启动传送过程,中间的传送过程则由硬件去完成而不需软件介入,然后CPU就可以转而去做别的事情,当外设完成传送时再通知CPU,这样可以实现很高的数据传输率。适合硬盘,CRT显示器,高速模数转换器这样的需要高速而大量的数据传输的场合。
1.DMA操作的基本方法
DMA操作的基本方法有三种:
1. 周期挪用
2. 周期扩展
3. CPU停机方式
为什么DMA操作还需要这些方式呢?
基于以下原因:首先当CPU操作某一片内存时,DMA操作中的硬件不能访问这一片内存,否则会出现问题。这时就需要与CPU的操作错开。错开的方式无非以下几种:
1. 在CPU不访问存储器的那些周期实现DMA操作,称为
周期挪用
2. 在正常的CPU周期后面增加一些周期供DMA使用,称为
周期扩展
3. 最夸张的做法就是CPU停机,肯定不会冲突
显然第一种方法中,需要识别CPU什么时候不访问存储器,相对应的会有一套复杂的时序电路,而且CPU何时不访问存储器都不是固定的,所以这种方法的数据传输是不连续和不规则的。
第二种方法,如果CPU的周期扩展,增加了周期给DMA操作使用,显然会使速度减慢,而且加宽是有限的,所以每次只能传送一个字节,效率很低。
第三种方法,首先会降低CPU的利用率,而且在CPU停机期间,不会对中断做出相应。但是由于这是最简单的传送方式,实现起来最简单,所以应用面比较广。
2.DMA的传送方式
DMA的数据传输过程由硬件完成,并不是说这个传输过程就是一个完整过程,只不过期间CPU不再过问而已,硬件有可能是一个字节一个字节的传输的(
单字节传送方式),也有可能是一组一组的传输的。而一组一组传送的过程中又有两种情况,第一种情况就是在整个数组的传送过程中,DMAC始终不放弃总线控制权,直到传输完毕(
成组传送方式)。另一种情况就是,每传送一个字节后,DMAC检测DREQ的值,如果无效DMAC就挂起,否则DMA继续传输,这种方式称为“
请求传送方式”。
4.3 8086/8088 的中断系统
8086/8088最多能处理256种不同的中断类型,其中每一种中断发生时,CPU都要调用相应的程序去处理,这些程序都有对应的地址,这种地址称为
中断类型码。中断的一切处理都是在CPU中进行的,所以CPU有条件去虚拟一些中断,而不仅仅通过外部设备传来中断请求才产生中断,这当然也是程序开发的一种需要,比如程序运行错误当成一种中断来处理。由此中断源可以分为两类:
外部中断 和
内部中断。
4.3.1 外部中断
外部中断必须通过信号线传过来,因为是别的设备发过来的中断请求。信号线有两个:
可屏蔽中断INTR 和
不可屏蔽中断NMI。为什么要区分中断是否可屏蔽呢?因为同是中断,地位却是不同的,有的中断可以不被优先处理甚至不处理,而有的中断却是必须被处理的,比如一些“灾难性的”事件,如存储器读写错误,总线奇偶位出错,CPU必须做出处理,否则整个系统将出现严重错误。
4.3.2内部中断
首先得说,通过软件方式产生的中断都是
不可屏蔽的,因为软件产生的都是有目的的,也就是必须要处理的。这些中断包括溢出中断,除法出错中断,单步中断,INTn指令中断以及单字节INT3指令中断。
这里介绍一下单步中断,程序是由一系列指令组成的,正常情况下,程序总是一条条的指令非常快的进行执行的,中间不会有任何停顿,CPU就是指令执行的机器。可是我们调试程序时却可以一条指令一条指令的进行,如何才能实现这种功能呢?答案只有一个,就是每执行一条指令产生一个中断,这种中断必须是自动的,不可能在每一个指令后插入一个中断产生指令,实现方法就是只要将陷阱标志TF置“1”就可以了。
内部中断的特点:
1. 由于是软件产生的,中断类型码或者包含在指令中,或者是预先规定的
2. 中断的产生是在CPU内部的,所以不动用总线,因此不执行INTA总线周期
3. 如果将TF置“0”就不会产生单步中断了,而别的中断却都不可以禁止
4. 单步中断的优先级是最低的,比其他任何中断都低
4.3.3 中断向量表(中断指针表)
中断向量我们说过了,其实就是指向服务程序首地址的一个指针,占用4个字节,这两个字节的值就是服务程序的地址,只要将程序的运行定位到该地址,就可以执行服务程序了。而一系列的中断向量连续存放在一起就组成了中断向量表。
这里有一个人为的约定,中断向量表放在存储器的最低端,也就是从0开始的地址开始存放。每个中断向量有四个字节,存放的是地址,其中两个字节存放
段基值,而另两个字节存放
段内偏移量。其中段基值放在前面。
4.3.4 中断过程
在中断发生时,CPU首先要做的工作是保护现场,并在中断处理完毕后恢复现场,如此才能保证原来的程序能够正确运行。
保护现场无非把CPU的一些标志寄存器,CS和IP等数据存放到堆栈中,如果当前使用了一些数据寄存器,当然也应该保存在堆栈中,保护现场无非是以后能够再现现场,现在所使用的一切东西都必须保存,具体的东西根据实际情况而定。并清除TF和IF,这是为了保证在中断处理过程中不会对别的中断产生相应,清除TF是为了不会产生单步中断,而清除IF则是为了不对外部可屏蔽中断做出响应。当然,如果在中断过程中如果需要开中断的话,可以用STI指令来重新开放中断。
当中断处理程序执行完成后,如何知道返回呢?执行到哪里才返回呢?这是通过在每一个中断处理程序的最后放置IRET指令来实现的。该指令所执行的动作就是将堆栈的数据恢复到IP,CS和标志寄存其中,既然恢复了IP和CS,程序当然回到原来的位置了。
4.4 可编程中断控制器 8259A (PIC)
前面说过,中断控制器用来处理外界的众多中断源,包括优先级的处理等。8259A就是典型的中断控制器,而且它是可编程的,对于中断的管理方式可以通过软件来进行设置。
4.4.1 8259A的内部结构
说到它的结构,还要从它的功能说起。
首先它是用来处理外界中断源的,所以必须设置一个
中断请求寄存器来存放接收到的中断请求。另外有些中断它可以不予处理,这就需要它能够屏蔽某些中断请求,而具体屏蔽哪些则是由CPU告诉的,因此需要设置一个
中断屏蔽寄存器,用来接收CPU送来的屏蔽信号。
当有中断过来时,8259A要知道CPU当前是否正在执行中断服务程序,如果没有执行,则将中断请求转传给CPU,这是通过8259A的中断服务寄存器(ISR)来标记的。
如果多个中断请求同时到来,控制器需要对它们的优先级做出判断,这个工作是由专门的一块芯片完成的,这个芯片叫“优先级判别器(PR)”,也叫优先级分析器。
8259A的中断优先级管理方式及中断结束方式
各个中断源的优先级如何设定,牵涉到优先级算法,或者说它的管理方式。共有五种中断优先级管理方式:
1.
完全嵌套 优先级管理方式分为两种,一种是设定之后各个中断源的优先级就不再动态变化。另一种是运行期间优先级次序会发生变化的。完全嵌套是属于固定不变的。这种方式,当一个中断正在处理的过程中不能产生同级或者较低级别的中断请求,只能产生较高级别的请求。也就是说执行过程中,较高的中断请求会打断当前正在执行的中断处理。
2.
自动循环方式 各个中断源处在一个队列中,每处理完一个中断请求,该中断源优先级降到最低,其它的中断源相应作循环变化。所以每个中断源的机会均相同,又称为“
等优先级方式”。
3.
特殊循环方式 自动循环方式中,每个中断源的地位都是相同的,而且都是按照统一的规则进行变化的,这种规则不能够通过程序来人为的改变。而特殊循环方式则可以通过程序来改变个别的中断源的优先级别为最低,其它的中断源还按照自动循环方式运行。
4.
特殊屏蔽方式 由于应用的多样性,需要对中断优先级能够做灵活的设置。比如执行中断的过程中需要对较低优先级的中断产生响应,或者对较高优先级不产生等响应等非常规的要求。这时候就要求通过程序可以直接对优先级的细节加以控制。在这种要求下就产生了特殊屏蔽方式。
5.
查询排序方式 8259A处理后的中断请求是通过INTR引脚连接到CPU的INTR引脚的。如果不进行连接,CPU可以发查询命令到8259A,以了解8259A中是否有中断请求,以及优先级最高的中断请求。
需要指出的是,8259A只能处理8个中断源,当中断源的个数超过8个时,可以采用2个或者2个以上的8259A。在这些8259A中只能有一个作为主片,其它的均作为从片,而且8259A最多只能有9片。
第四章 并行接口
5.1
可编程接口芯片
CPU同外设交换信息,必须通过接口电路。早期的接口电路是
逻辑电路板(由中小规模集成电路芯片组成),后来发展到了以大规模集成电路芯片为主的接口芯片。用于微机输入/输出的接口芯片种类极多,按功能的灵活性来分,可分为
可编程接口芯片和
不可编程的接口芯片。按接口的通用性来分,可分为
通用接口芯片和
专用接口芯片。
片选概念
连在PC上的接口芯片很多,它们也是通过地址来找到的,地址信号首先通过CPU的地址线进入地址译码器,然后输出到接口芯片的选通端。只有芯片被选通后才能工作。
5.1.3
可编程接口的概念
目前所有的接口芯片大部分是多通道,多功能的。接口芯片的一端是与CPU相连,而另一端如果可以和多个外设相连,则称为多通道。多功能则是指一个接口芯片能实现多种接口功能,实现不同的电路工作状态。
多通道在芯片内部是通过开关S0,S1…,Sn与总线相连的,注意:每一个通道对应一种功能的接口电路,通过开关的不同来选择不同的通道,如果开关的选择可以通过指令进行,称为“
编程控制”。
接口芯片中有一个寄存器,用来存放控制电路组态的控制字节,成为控制寄存器。
接口芯片一方面接收CPU传来的命令,同时还要知道外设的当前状态,并反馈给CPU。外设的当前状态也是通过信号线传送的,常用的联络信号有:STB(选通信号)和RDY(就绪信号,Ready)。RDY是接口告诉外设,什么时候我的输入寄存器是空的,你可以把数据传过来了。而STB则是外设告诉接口的,我的芯片已经选通了。
可编程并行接口芯片8255A(PPI)
Intel 8255A是一种通用的可编程并行I/O接口芯片。可通过编程改变其功能,通用性强,使用灵活。是目前应用最广的并行I/O接口芯片。
8255A的结构和功能
1.8255A与CPU之间的数据传输并不是直接进行的,中间还有一个
数据总线缓冲器。CPU对外设数据的输入输出就是对该缓冲器进行的,CPU发给8255A的控制字和状态字也是发往该缓冲器。
2.有三个端口PA,PB和PC。
端口是与外界沟通的界面,其内部有它的不同结构和不同的工作方式。8255A端口的工作方式则可以通过程序来设定。通常习惯将PA,PB口用作输入/输出的
数据端口,PC口用作
控制或状态信息的端口。PC口又分为两个4位的端口,每个端口包含一个4位锁存器,同端口A,B配合使用,可以用作控制信号的输出,或作为状态信号输入。
3.内部有两组控制电路,A组与B组 这两组控制电路分别控制不同的端口,其中A组用来控制PA口和PC口的高4位(PC
7 – PC
4),B组用来控制PB口和PC口的低4位(PC3 – PC0)
4.读/写控制逻辑 专门用来管理芯片的各种数据传输,包括数据信息,控制字和状态字的传送,接收CPU过来的有关信息,并向8255A的A,B两组控制部件发送命令。
8255A的工作方式与初始化
8255A共有3种工作方式。它的划分根据3个端口的使用情况,以及使用模式。
1. 方式0 --- 基本输入/输出。方式0下,三个端口都可以作为基本的输入/输出口,C口的高低4位都可以作为输入输出口,也就是4个口都可以作为输入输出口。方式0中可以采用无条件读写方式以及查询两种方式。
2. 方式1 --- 将3个端口分为A,B两组,数据部分除了A,B端口,还包括C端口的两位。而C端口的另6位作为A,B两组的联络信号(各需要3个联络信号)。当STB有效时就会把从CPU过来的信号送入A端口或B端口的数据锁存器。
3. 方式2 --- 双向选通输入/输出。既可采用中断方式,也可使用查询方式。但方式2只限于A组使用。它用A口的8位数据线以及C口的5位进行联络。需要注意的是,某种方式并不是针对整个8255A的,而是针对具体的组的,也就是各个控制电路。尽管A组采用了方式2,B组还可以采用方式0或方式1工作。
初始化
在使用8255A时,首先要由CPU对8255A写入控制命令字,有两种控制命令字:一种是方式选择字,也就是选择是采用方式0,方式1还是方式2来工作,这个设定过程就叫做“初始化”。另一种是C口按位置位/复位控制字。
无论哪种控制字都是将命令写入C口的,具体是哪一种命令字,是通过C口的D
7来标记的。
第6章 定时器/计数器电路
定时器与计数器通常是一种芯片,因为定时通常都是通过计数器来实现的。实现定时和计数可采用三种方法:
1. 设计数字逻辑电路来实现计数或定时要求。这种通常功能比较固定,如果改变要求,必须改变电路参数,通用性,灵活性差。
2. 编制一段程序,用软件的方式来实现。但是需要占用CPU时间
3. 采用通用的 可编程定时器/计数器,其定时和计数功能可由程序灵活地设定,设定后与CPU并行工作,不占用CPU时间。
8255-5就是这样的可编程定时器/计数器。定时器/计数器本身并不具有脉冲发生电路,它的计数都是通过外界CLK信号输入的,它的工作只是在收到CLK信号时,使得计数值减1,至于外界的CLK是否具有周期性,它不管。8255-5中包含一个计数输出锁存器OL,它的值会随着计数执行而变化,当接到CPU的锁存命令时就不在变化,直到CPU从中读取锁存值后,才恢复到跟随计数执行单元变化的状态。这样做是防止CPU读取计数值的操作会干扰技术工作。
可编程间隔定时器 8253-5(PPI)
6.2.1 8253-5的结构和功能
8253-5具有三个独立的16位计数器,共可设置成6种工作方式。从理论上说,每个计数器都应该有一个CLK信号线,因为计数的执行是它触发的,而且3个计数器中每一个计数器都应该有一条CLK信号线。另外,每个计数器计数完成,都应该有一个输出信号OUT,告诉CPU技术完毕。计数器的开启停止当然也需要一条信号线来控制,这个信号线叫GATE。
在每个计数器的内部都有3个计存器:
1. 控制寄存器 用来初始化每个控制及存器的工作方式等
2. 计数初值寄存器
3. 减1计数寄存器
计数器与CPU之间的数据通信无非三种数据:1.CPU发给计数器的控制字,2.计数初值 3. CPU读取计数器的各计数器的当前值。这些数据都是通过8253-5的读写控制逻辑完成的。
计数器从字面上感觉里面的计数是从小到大的,从0开始。实际上是从大到小的减法技术器,这也是应用的需要,方便定时器的设计。
8253-5的工作方式
8253-5共有6种工作方式,这是我们学过的几个芯片里面工作方式最多的。在任何一种方式下,都必须先向8253写入控制字,控制字的写入还会使8253内部的一些寄存器复位。
1.方式0 --- 计数结束中断方式
这是最常用的一种方式了,首先给定计数初值,开始计数,计数完成后OUT变高电平。该电平作为一个中断请求信号,发出去。
2.方式1 --- 硬件可重触发单稳态方式
这里先来理解“硬件可重触发”的概念。方式0中,当计数完成后,也就完成了,而在方式1中,在CE中的计数值将为0后,产生OUT输出,此后,如果GATE端再一次产生从低变高的触发信号,则CE中重新载入计数初值,所以可以通过GATE来重触发计数过程,而启动是在GATE的上升沿产生,即是硬件启动,不能用软件来启动。
3.方式2 --- 速率发生器
以上两种都是单一的技术过程,尽管方式1可以重触发,但是不是自动的。而方式2的重触发是自动的,即当计数减为0时,自动载入计数初值,并重新计数,于是便产生了周期性的定时信号,而且这个周期可以根据计数初值和脉冲的频率来修改,所以也称速率发生器。
4. 方式3 --- 方波方式(Square Wave Mode)
首先还得先理解什么叫做方波,然后就可以理解这种方式了。当计数初值为偶数时,计数期间就会经历偶数个脉冲宽度的低电平。但是如果计数初值为奇数时,低电平的宽度就是计数个脉冲宽度。我们称偶数个为对称的方波。如何才能得到偶数个呢?如果计数初值为偶数则不变,如果是奇数则先减1。不过在计数过程中不是减1,而是减2。
5. 方式4 --- 软件触发选通方式(Software Triggered Strobe)
顾名思义,每一次计数的启动都是通过指令来触发的。在写入完计数初值后立即触发。
6.方式5 --- 硬件触发选通方式(Hardware Triggered Strobe)
8253-5的初始化
8253共有3个计数器,使用任何一个之前都要写入方式控制字。虽然有三个计数器,但它们的控制字都是写入同一个地址,通过D
7,D
6位来标记是给哪个计数器。
第7章 串行接口
采用串行通信的原因是为了降低通信线路的价格和简化通信设备,因为串行通信通常只有两根线就行了,比起并行通信动则十几,几十根线成本价格具有明显的优势。并且可以利用现有的通信设备,因为目前常见的电话线,电视线等都是串行的,如果以它们的信号为载体就可以实现通信。
串行通信和并行通信的比较:
1.
并行通信的数据线之间通常贴得很近,彼此会产生电磁干扰,所以传输的距离比较近。而串行通信这种问题则小得多,所以传输的距离比较远。并行通信通常小于30米,而串行通信可以从几米到数千公里。
2.
但是在速度上,串行通信远远比并行通信慢得多,原因很简单。因为并行通信同一时刻可以传送多个位,而串行通信则只能一位一位地传。
3.
价格上串行通信具有明显优势,上面已经说明。
同步通信与异步通信
由于串行通信是一个位一个位的传送的,那么接受端如何知道一个字节的起点终点位呢?通常可以采用两种办法。第一种办法就是在字符的起点或终点设置特殊的标记位,当接收端检测到这样的标记位就认为是开始或者结束。另一种办法,就是在发送之前告诉对方,我要发送了,然后发一个对方接收一个,紧密配合,可以看得出,发收双方针对数据的传输是同步工作的。而第一种方法,接收方不用管发送方是什么时候发送的,只是根据数据的特征把数据取出来而已,所以它是异步的。由此出现了两种通信方式:
异步通信 和
同步通信。
在实际应用当中,异步通信应用比较广,因为同步通信中要求双方有同步信号才能进行同步的工作,但是在分布式的情况下想要做到很困难。
串行通信的传送方向
有三种方向:
单工:只能从一个方向传到另一个方向
半双工:能交替的进行双向传送。在一个时刻只能在一个方向上传送数据。
全双工:能在两个方向上同时进行数据传送。
可编程通信接口8251A(USART)
该芯片是通用同步/异步接收发送器,是专门为Intel CPU设计的,可用作CPU和串行外设的接口电路。
与CPU的连接信号:
1.
芯片中数据是在时钟的控制之下发送的,所以应该外接时钟信号线CLK。这个时钟频率与数据传输率是不一样的。
2.
C/D:8251只有8位的数据端口,控制信号和数据信号都是通过这8位端口进行传输的,C/D就是用来区分是控制信号还是数据信号的。
3.
WR,RD 用来控制读写的信号线
4.
RESET: 使得8251复位的引脚,该引脚信号生效的条件是:必须出现一个6倍时钟宽的高电平信号,才能复位。
5.
CS 片选输入端:只有该引脚有效时,才能够使用该芯片进行数据传输。
6.
D0-D7:双向8位数据线
8251A的初始化
8251A包含两种工作模式,就是前面说的异步方式与同步方式。工作方式是在方式指令字中指定的。方式指令和命令指令被写入的是同一个端口,它们又是如何区分的呢?这是根据写入的时机来区分的,如果在
复位之后第一次写入的控制字,就解释为方式指令,否则都是命令指令。
第8章 模拟接口
模拟接口实现模拟量与数字量的转换,当然包含两种:模/数转换 和 数/模转换。介绍DAC0832和ADC0809两种转换芯片的外特性,工作原理及其应用。本章重点要掌握ADC0809同CPU的连接与应用。
模拟接口的基本概念
模拟量的采集是通过传感器实现的,采集后并不是直接生成数字量,而是输出为电流或者电压量。这种电流或者电压要经过量程放大器放大,再传递给A/D转换器进行转换,才能得到最终需要的数字量。
电信号经过量程放大器放大以后,会包含一些杂波,有可能产生干扰,所以在放大后需要通过低通滤波器来降低噪声。
如果系统采集多个模拟量,不需要每个传感器都跟一个A/D转换器,因为模拟量的变化通常比较慢,共用一个A/D转换器已经可以满足需要,所以可以选用一个切换开关,每次可以选定一个传感器,这样的开关成为“多路开关”。
A/D转换是需要一定时间的,在转换时间内,如果输入的模拟信号发生变化,那么会影响转换的进行,所以采样过来的电信号必须保持不变。这可以通过“
采样-保持电路”来实现,不过如果输入信号变化缓慢的话,也可以不用该电路。
量化与编码
采样后的信号经量化后才能输入到计算机,采样信号经量化后成为数字信号的的过程称为量化过程。
量化过程存在误差,比如量化后的结果是1-5的话,那么1.1,1.2,1.3,1.4这些结果都是1,为了减少这些误差,只能把它分割为更多的区域,采用位数更多的A/D转换器。
数/模转换器芯片 DAC0832
每个数/模转换器只能输出一个模拟量,所以如果需要输出多个模拟量的话,就必需多个数/模转换器。
二次缓冲输入数据方式:当输出数据的过程中,如果采集数据,刚采集的数据就会把刚才输出寄存器中的内容更新,为防止这种情况,只有设置两个输出寄存器。
模数转换器芯片ADC 0809
ADC0809就有8个开关,也就是可以连接8个传感器,通过开关切换来转换某个传感器传来的电信号。
芯片的启动通过START信号来触发,转换结束后,输出EOC信号。
ADC0809同微处理器的连接
有两种连接方式:
1.
直接连接 ADC0809具有三态输出缓冲器,输出的结果可以直接同处理器连接。
2. 通过并行接口芯片同微处理器的连接
第9章 人 机 接 口
人机接口特指人与计算机进行交互的设备的一些接口。这些设备包括:键盘,显示器,打印机,鼠标器,光笔和触摸式屏幕等。本章重点是3个人机接口:键盘接口,LED显示器接口 和 并行打印机接口。
人机交互设备
常见的人机交互设备可分为
输入设备和
输出设备两类。
输入设备是人向计算机输入设备的设备。常见的输入设备有:键盘,鼠标,触摸屏。常见的输出设备有:显示器,打印机。
显示器有:CRT显示器,LED显示器和LCD显示器。其中LCD即我们通常说的液晶显示器。
打印机又分为:
击打式打印机,
喷墨打印机和
激光打印机,此外还有用于特殊用途的静电打印机,热敏打印机。
在人机交互设备与人机接口之间的信息传输中,目前大多采用并行通信方式,因为在计算机系统内部的数据传送也是采用并行通信方式,这为接口的设计带来方便。另外在联络方式上大部分采用中断控制方式以实现异步数据传输,至于在一些要求传输速度高,传输数据量大的情况下,可以采用DMA控制方式。
键盘接口
键盘是由一组排列成矩阵的按键开关组成,通常有
编码键盘和
非编码键盘两种类型。所谓编码键盘就是每一个键都有一个对应的编码直接产生。而非编码键盘则是根据按键的位置,通过一组电路的计算产生相应的编码。显然,编码键盘,每个键都配有相应的一些电路及硬件。而非编码键盘则为系统软件在定义键盘的某些操作上提供了更大的灵活性。
对于非编码键盘来说,按下键以后如何知道是哪一个键按下了呢?因为键盘通常排列成矩阵格式,所以可以用硬件或软件的方法对行,列分别进行扫描,去寻找按下的键。常用的方法有
行反转法,
行扫描法和
行列扫描法等多种。
显示器接口
LED显示器接口
七段LED分为
共阳极接法和
共阴极接法两种。
第10章 微机系统实用接口知识
由于设备的多样性,它们的接口也就会多样性,所连接的总线也就会不同,但是如果每个外设都有自己对应的总线,一方面硬件的设计将变得非常繁琐,另一方面也就是失去了总线存在的意义(多个设备通信的公共通道)。这就要求各外设所使用的总线能够尽可能的兼容。不过所有的总线有没办法完全兼容,所以出现了各种规格的总线。还有就是根据总线的规模,用途和应用场合的不同,总线也会不同,分为 1. 片总线 2。内总线 3。外总线。
片总线是专门给
CPU用的,CPU的各个引脚所连接的就是片总线。外总线则是用来连接主机外部设备的,外部设备可以是一般的设备,也可以是一台主机。应用最多的还是内总线,它用来连接微机内的各个芯片。
1. 总线标准
总线标准是国际正式公布或推荐的互连各个模块的标准,它是把各种不同的模块组成计算机系统时必须遵循的规范。所谓规范就是大家只要按照这种约定进行,不管对方是什么设备,只要是按照这种规范的,那么比较就能够保证连接正常,因为彼此连接什么设备事先是无法预知的,所以必须要有一个统一的规范。
这种规范描述连接的特点,互连接口的条件无非三条:
1. 尺寸,形状要一样
2. 各个引脚功能的定义必须一样
3. 电气规范必须一样,包括电平,动态转换时间,负载能力以及最大额定值
而制定规范的通常也有两个:
1. 某些计算机公司或厂商自己发展的一套标准,后来得到OEM的普遍接受,进而形成一种为国际工业界广泛支持的实用总线标准
2. 由标准化组织制定的标准,推出后即可由厂家和用户使用
其中标准化组织有 美国电气与电子工程师协会(IEEE),国际电工委员会(IEC)和美国国家标准局(ANSI)。这些组织一方面是自己开发和制定新的总线标准或建议草案,另一方面还对别的公司提出的并为国际工业界广泛支持的实用总线标准进行筛选,研究,修改和评价,给出一个统一的编号,作为对该总线标准的认可。
随着总线的不断发展,完善,一方面是新的总线标准不断产生,另一方面,有些不适合发展的一些总线技术逐渐被淘汰,而有些总线则进行了一些改进。
总线的负载能力
学过电路的肯定知道,当总线上连接了接口电路后,其电平会相应的下降,当下降到一定程度后就不能满足工作的需要,这时候我们说总线的负载能力不够了。
输出的信号无非是高电平与低电平两种,输出高电平时,这时候电流从信号源流到负载。而输出低电平时,电流从负载流到信号源,也就是吸收电流。当这种电流超过一定范围时,逻辑电平就会降低,甚至变到阀值以下。
负载能力总是有限的,所以当负载超过时,必须额外加装相应的设备来满足负载要求,这样的设备叫做
缓冲器 或
驱动器。最常用的是
三台缓冲器。其作用是驱动(也就是让电流加大,可以带动更多的负载)和隔离(减少负载对总线信号的影响)。
总线仲裁简介
如果一个设备具有控制总线的能力,能够启动数据信息的传输,这样的设备叫做
总线主设备。而只能对总线上的数据请求作出相应,但本身不具备总线控制能力的模块成为“总线从设备”。可以想象,如果一个系统只有一个总线主设备,由于总线只被一个占用,不会发生冲突现象。而如果存在多个总线主设备,就会出现多个主设备共享一个总线的情况,这时必须解决冲突问题,这样的情况叫做“
总线仲裁”。通常这是在多处理机环境中提出来的。对总线仲裁是通过优先级的办法实现的,相对应的会有一系列不同的实现算法。通常有三种总线分配的优先级技术 ---
串联,
并联和
循环。
1. 串联优先级判别法 各个外设与总线仲裁器串联起来,仲裁器总是根据离它最近的一个设备的请求最先响应。在这种方式中,如果离仲裁器比较近的设备始终在占用总线的话,其它设备可能无法得到响应。这样的串联优先级判别中的仲裁机构是三线链式的仲裁机构。这里三线是指
请求线,
允许线 和
总线忙,这和这种判别法的工作机制是对应的。首先是设备向仲裁器提出总线使用请求,如果允许的话,仲裁器发送允许信号,一旦设备占用了总线,设备就会发出总线忙信号,别的设备将不能再占用总线。
2. 并联优先级别判别法 串联优先级判别法中,各个模块是共用一条请求线的,谁离的最近谁第一个被处理。而在并联优先级别判别法中,各个模块都是独立的,都有自己的请求和允许线,不会受到别的模块的影响,只是在仲裁器中记录了各个模块的优先级,当发生冲突时会根据优先级的不同,为优先级最高的服务。
3. 循环优先级判别法 在并联优先级判别法中,一旦设定好了优先级就不会发生变化,所以各个模块的地位就会高低不平。而循环优先级判别法则会把优先级在各个模块之间移动,从而使每个总线模块使用总线的机会相同。
比较这三种优先级技术,串联法的实现最为简单,不需要使用外部逻辑电路。而循环法的则需要很复杂的仲裁电路,需要大量的外部逻辑才能实现。在现实应用中,并联方法比较好,它允许总线上链接很多的模块,而仲裁电路又不太复杂,是两种方法的折衷。
PC总线
PC/XT机的系统板上有三种总线:芯片总线,系统总线,系统扩充总线。其中系统总线和系统扩充总线都引出了I/O通道。
外部I/O适配器采用了专门的I/O总线,即“PC总线”,因为系统板上的I/O适配器已经占用了总线上的一部分控制和联络信号,而且外部I/O适配器之需要一部分总线信号,所以外部适配器的总线就单独拿出来了。
当前标准的微机系统中,通常采用三种总线标准,分别为
ISA,
EISA,
PCI总线。前两种为标准的I/O总线,PCI为局部总线。
PCI的出现是因为ISA和EISA的带宽太小,高速的显卡要求很高的带宽,传统的I/O总线已经不能满足需要。PCI总线的标准是Intel提出的。PCI总线是局部的总线。PCI具有以下的优点:
1.
突出的高性能。首先是数据传输率可以高达528MB/S远远高于前两种总线。还有就是支持突发工作方式。一般情况下,访问一个地址的数据都需要两个时钟周期,第一个周期给出地址,第二个周期传送数据。可是当要传送的数据连续时,只需要给出首地址就可以了,不用每个字节的传送都给出地址,这种传送成为“突发传送”
2.
良好的兼容性。PCI总线是局部总线,它的接口是和处理器独立的。所以它不会受处理器更新换代的影响,生命周期比较长。
3.
支持即插即用。ISA以及EISA上如果连接设备,需要手工去配制设备的地址,进行一些跳线处理,尽管EISA也具有即插即用,但是确是不完善的,还需要配置程序进行系统地配置工作。而PCI总线设备连接到主机后,在启动时,BIOS会自动给该设备分配一个地址,不用人工去指定。这就是所谓的“即插即用”。注意:这里的即插即用和我们现在的即插即用不是一个概念。现在有的设备可以通过USB接口,连接上之后不用重起主机就可以使用。而PCI的即插即用是指插上后不用手工去配制,但是必须电脑重新启动后才能够使用,而且插的时候还必须是在停机的情况下插入。现在的USB设备都是带电插拔。
4.
多主能力。允许多个主设备的存在。
5.
适度的保证了数据的完整性。PCI提供了数据和地址奇偶校验功能,保证了数据的完整和准确。
6.
优良的软件兼容性。
7.
定义了5V和3.3V两种信号环境
8.
相对的低成本。由于芯片经过了优化,以及体系结构的优良设计,减少了总线信号的引脚个数和PCI部件数,所以它的成本比较低。
目前在微机系统中还存在着ISA与PCI并存的现象,由于在性能,成本等方面PCI都已超过ISA,所以在不久的将来ISA就会被PCI完全替代。
实用接口知识
主板是PC机中最重要的部件之一,直接影响到主机的稳定性,据统计,PC机许多不明的司机原因有90%都与主板有关。
和其他部件一样,主板也会经历一系列的发展,一方面是新的一些需求的出现要求主板做出一些调整,另一方面当前的一些不合理设计也会导致其发生改变。具体的来说,有以下的原因:
1.
早期的是Baby-AT主板,它采用“竖板”设计,主板引出接口的空间太小。随着PC的发展,外部的接口越来越多,显然无法满足。
2.
早期的CPU功耗很小,所以不需要风扇。而目前的CPU都需要配置风扇。由于风扇的加入,大大增加了CPU的高度。原有的Baby-AT主板的CPU位置比较狭窄,没有空间插上。另外原Baby-AT有个不合理的地方,就是内存的位置处在电源底下,拆装很不方便。
3.
并没有对软硬盘,光驱的位置做出规定,所以经常造成它们的连线混乱,降低系统可靠性甚至产生电磁干扰,或者连线长度过长,使得许多高速硬驱无法发挥高速特征,制约PC机整体性能的进一步提高。
为解决这一问题,Intel提出了ATX设计规范,提出了全新的主板,机箱和电源尺寸的设计建议。除了解决了以上的问题外,ATX对电源系统也作了重大改进:
1.
之前的主板在掉电后就不再有任何电流了,而ATX规定电源关闭后还提供5V 100mA的弱电流,给内部的一小块电路供电,这一小块电路可以实现很多遥控,定时等功能。
2.
ATX还提供了3.3V的输出,使PC机能工作在低电压的工作状态,从而降低了整机的功耗。
芯片组
CPU是PC机的核心,其它所有的部件都是在它的指挥下进行的,它是PC的大脑。但是只有大脑的话什么东西都做不了,还需要一系列的部件供他指挥,调用才行。这些部件包括中断控制电路,DMA控制电路,总线控制电路,时钟发生电路等等。在286之前的早期微机中,这些电路都是单独的,占用了主板上很大的位置,而且给维修带来了很大的麻烦。随着超大规模集成电路的发展,这一系列的电路有可能做到一块芯片中了,于是出现了现在的
芯片组。为什么叫作“组”呢?因为它本身也是由几个(通常是1~3片)VLSI芯片组成的。
选择主板的重点是选择芯片组,芯片组一旦确定,主板以及系统的数据传送的控制方式,CPU及有关部件的可用频率等等特性也就确定了。
EIDE接口
首先说明的是我们平常所说的IDE接口,已不是正式意义上的IDE,而是指EIDE,传统的IDE由于存在很多的问题,现在已经被淘汰,只是习惯上我们还称这种扩展的为IDE接口。
IDE又被称为ATA接口,而EIDE就是ATA-2,现在已经发展为ATA-4。
硬盘机与主机进行数据交换的方式有两种:
1.
PIO(Programming Input/Output,编程I/O)模式。所谓编程就是通过CPU的I/O指令来对数据进行读写。
2.
DMA(Direct Memory Access,直接存储器存取)模式。是指数据不经过CPU而直接在硬盘和内存之间传送。现在所有新的芯片组都支持总线主控DMA,DMA传送有单字和多字两种传送方式。顾名思义,单字就是每次只能传送一个字,而多字可以传送多个字,具体传送多个字是由计数器指定的。
SCSI接口
在服务器端有一些普通PC所没有的要求,比如外设数量比较多,要求的数据传输率很高,所以尽管EIDE在普通PC上已经足够了,但是用在服务器上还是有点力不从心的。而SCSI标准则是直接针对服务器的这种需求产生的,能够满足多设备,高速度的要求。
SCSI的主要目标是提供一种
设备独立的机理。什么叫作设备独立呢?我们可能注意到,主机中的有些插口可以用来连接不同的设备,比如可以用来硬盘,也可以用来光驱,也就是接口并不是为哪一种设备特有的,只要符合规范的设备都可以使用,也就是这个接口与设备无关。
SCSI的发展经历了SCSI-1,SCSI-2,SCSI-3等不同的版本,其中SCSI-2又称为Fast SCSI。
尽管SCSI的优点比较多,但是价格也比较高,所以一般的用户还是应该把EIDE作为首选。
USB与IEEE1394
1. USB
机箱外部的设备,其接口都是形态各异的,在装卸的时候很是麻烦,不能插错。另一方面每种设备都有自己对应的驱动程序,PC机才能识别这一外设。
而USB是个万能插口,可以取代PC机上所有的端口(包括串行端口和并行端口),而用户可以将几乎所有的外设插头插在USB插口上。同时USB接口可以提供电源,所以有些设备甚至不用电源即可工作。
USB 1.0 的数据传输率为12MB/S,最多可以连接127个外设装置。
USB具有真正的“即插即用”特性,用户可以很容易的对外设进行安装和拆卸,这种拆卸可以在开机的状态下动态进行。
2. IEEE 1394
尽管USB具有非常多的优点,但是只能适合中低速度的外设。对于高速的外设就力不从心了。而IEEE 1394则是专门用于高速数据传输的外围设备同主机之间连接的串行接口标准。它的最高数据传输率可以达到惊人的1Gb/S。
这里需要说明的是,在USB 2.0中数据传输率发生了很大的变化,尽管比IEEE的略低,但是已经基本接近了,同样可以满足很多高速传输的场合,所以USB 2.0在高速传输的场合也得到了广泛的应用。
AGP
AGP的出现基于两个原因,一是显卡处理数据时需要很高的数据传输率,目前的PCI接口满足不了如此高的要求。另一方面由于显卡的显存比较贵,为了减少显卡的成本,可以共享内存中的内存。
相关问题讲解
1. 键盘的行列反转法
矩阵中,对行送全1,这时如果不变,则会每个点都保持1。而此时列送全0,如果行列相交,则会把刚才的1变成0。所谓相交,就是有键按下了。