概述
介绍显卡之前,必须得和大家交待清楚,那么多的外部设备,cpu是如何与他们交流。
大家都学过微机接口技术吧?没学过也没关系,反正我也只是笼统地说说^_^,保证大家一定能看得懂。
按理说,如果硬件种类较少,让cpu直接同硬件进行IO操作也不是很过分,但现实不是这样的,计算机能发展到今天这样兴盛,是和诞生各种各样的硬件分不开的。微型计算机通过外部设备与外面的世界互换信息,外部设备种类繁多,原理各异,有机械式、电动式、电子式,输出的信号也多种多样,有模拟量、数字量、开关量。它们都有自己特性,数据格式不相同,有的外设是用串行数据,有的是并行数据,并且它们都在自己的时序下工作,无论它们的速度如何,在cpu看来都太慢了。
让cpu小朋友与每个“个性不同,脾气迥异”的硬件大大们打交道,这也太为难cpu了,您看,通过执行jmp $这样的死循环语句就能看得出,人家cpu可是个踏实低调的主,所以,“交际”这类活动对它还是少点好。再说,同任何一个设备打交道,cpu那么速度那么快,它不得嫌弃别人慢吗,为了减少自己的等待时间,还得为低速设备准备数据缓冲区。cpu用的信号都是TTL电平,外设大多数都是机电设备,机电设备可不能用TTL电平驱动,这还不算完呢,cpu系统总线上传送的都是并行数据(所以你听到的都是8位、16位、32位cpu…),外设可是并行、串行都有,还得转换格式,想想就麻烦啊。看来,不可能让cpu一一适应它们,否则cpu要做的工作太多了。
cpu面临的问题,就像校长面临一群学生一样,让校长亲自管理每个学生的学习,即使是肌肉男施瓦辛格也得累倒,于是,班主任的出现帮了大忙,每个班主任负责一批学生,由他们了解学生的情况后再向校长汇报,这样校长他不需要过人的体格,工作起来也会游刃有余了。人创造出来的东西必然脱离不了人的思维,cpu工程师们也给cpu找了“班主任”,在cpu和外设之间加了个代理,总之,以后cpu有什么事就同它接触就行了。什么速度不匹配,缓冲区之类的,全都由代理来搞定。举个例子,如果是串行设备,cpu就同串行接口通信,把数据发给它后,数据再经由串行接口发给串行设备,串行设备有了反馈后,把数据发送给串行接口,再经串行接口返回给cpu,并行设备也是如此。
任何不兼容的问题,都可以通过增加一“层”来解决。在cpu和外设之间的这一层就是IO接口。IO接口形式不限,它可以是个电路板,也可以是块芯片,甚至可以是个插槽,它的作用就是在cpu和外设之间相互做协调转换,如cpu和外设速度不匹配,它就是变速箱,cpu和外设信号不通用,它就是翻译机。
这样通过加了中间层后,工作就被划分成多个部分,每个部分都有专人负责,大家都轻松了,多好啊。
不过,说的还是有点抽象是吗?那就整点具体的,机箱里的声卡就是驱动音响设备的IO接口,本章介绍的显卡也同样是一种IO接口,它是用来驱动显示器的。也许您打开机箱后也未发现我说的声卡和显卡,那是不是就没有它们呢?当然不会,要是听不到声音看不到图像,人们买电脑干吗?用来学习的?哈哈,你懂的。其实它们被集成在主板芯片组中了,您用的就是传说中的集成声卡和集成显卡。这下清楚多了吧,下面咱们还是继续说点抽象的。
IO接口是连接cpu与外部设备的逻辑控制部件,既然称为逻辑,就说明可分为硬件和软件两部分。硬件部分所做的都是一些实质具体的工作,其功能是协调cpu和外设之间的种种不匹配,如双方由于速度不匹配,那IO接口就实现数据缓冲以减少等待时间,数据格式不匹配,IO接口就在这两种格式间互相转换。IO接口内部实际上也是由软件来控制运作的,这就是所谓的“逻辑”部分,所以软件是指用来控制接口电路工作的驱动程序以及完成内部数据传输所需要的程序。
既然提到了软件,这就意味着编程,这样一来,IO接口芯片又可按照是否可编程来分类,可分为可编程接口芯片和不可编程接口芯片。
接口的作用是连接处理器和外部设备,如果外部设备很简单,傻瓜型的、不需要设定就直接能用,就可以用不可编程接口芯片与处理器连接,不可编程接口芯片是种非常简单的IO接口。
当然物理设备还是很贵重的,并且计算机中的IO接口数量也是有限的,所以我们当然希望IO接口功能越多越好,可以设置多种工作模式,甚至允许多个外部设备通过同一个IO接口芯片与处理器连接。计算机与IO接口的通信是通过计算机指令实现的,当我们需要定制某些功能时,我们也必须用计算机指令告诉IO接口:哪些设备连接在此IO接口上、此IO接口的工作模式等。这种通过软件指令选择IO接口上的功能、工作模式的做法,称为“IO接口控制编程”。这通常是用端口读写指令in/out来实现的,后面会说到。
cpu太忙了,它的时间特别宝贵,为了简化cpu访问外部设备的工作,能够轻松地同任何硬件通信,大家就约定好IO接口的功能:
1.设置数据缓冲,解决cpu与外设的速度不匹配。
cpu和外设速度上的差异可以通过设置缓冲区来解决,也就是说,数据先存储在缓冲区里,等需要的时候(无论缓冲区是否满了)就传送出去。
2.设置信号电平转换电路。
cpu和外设的信号电平不同,如cpu所用的信号是TTL电平,而外设大多数是机电设备,故不能使用TTL电平驱动,可以在接口电路中设置电平转换电路来解决。
3.设置数据格式转换
外设是多种多样的,输出的信息可能是数字信号、模拟信号等,而cpu只能处理数字信号。数字信号需要经过数/模转换(D/A)成模拟量才能被送到外设以驱动硬件,模拟量也同样需要经过模/数(A/D)转换成数字量才能被cpu处理。所以接口电路中需要包括A/D转换器和D/A转换器。另外,即使双方使用的都是数字信号,这也牵涉到格式和字长的问题,如cpu使用的是8位或16位或32位并行数据,而外设用并行或串行数据都有可能,所以IO接口中必须能够识别格式并且转换成对方需要的形式才行。
4.设置时序控制电路来同步cpu和外部设备
硬件的工作也是按照某种时序,它们都有自己的时序系统,就像cpu工作在自己的晶振时序上一样。双方时序不同,接口电路就要协调这两种不同的时间计法。如,cpu发控制信号、定时信号给IO接口电路,IO接口用它们来控制和管理硬件。随后硬件有了反馈后,其应答信号也需要通过接口返回给cpu,这样cpu先“问”,硬件后“回答”,就实现了一次握手,之后便可以实现IO的同步操作。
5.提供地址译码
cpu同多个硬件打交道,每个硬件要反馈的信息很多,所以一个IO接口必须包含多个端口(即IO接口上的寄存器)来存储这些信息内容。但同一时刻,只能有一个端口和cpu数据交换,这就需要IO接口提供地址译码电路,使cpu可以选中某个端口,使其可以访问数据总线。
在后来新加入的硬件只要符合此约定就能同cpu数据交换,这样cpu就可以轻松应对种类万千的硬件啦。
后面的内容下半场再说。
最后
以上就是拼搏网络为你收集整理的一步步编写操作系统 14 CPU与外设通信——IO接口 上的全部内容,希望文章能够帮你解决一步步编写操作系统 14 CPU与外设通信——IO接口 上所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复