第7章微型计算机与外设间的数据传递本章内容提要7.1CPU与外设数据传递方式概览7.28259A中断控制器7.38237ADMA控制器2020/2/263I/O:Input/Output,输入/输出接口DMA:DirectMemoryAccess,直接存储器存取方式I/O接口是位于系统与外设间、用来协助完成数据传送和控制任务的逻辑电路PC机系统板的可编程接口芯片、I/O总线槽的电路板(适配器)都是接口电路2020/2/264为什么要有I/O接口(电路)?微机的外部设备多种多样工作原理、驱动方式、信息格式、以及工作速度方面彼此差别很大它们不能与CPU直接相连,必须经过中间电路再与系统相连这部分电路被称为I/O接口电路2020/2/265接口电路的内部结构CPU与外设主要有数据、状态和控制信息需要相互交换,于是从应用角度看内部:⑴数据寄存器保存外设给CPU和CPU发往外设的数据⑵状态寄存器保存外设或接口电路的状态⑶控制寄存器保存CPU给外设或接口电路的命令2020/2/266接口电路的外部特性主要体现在引脚上,分成两侧信号面向CPU一侧的信号:用于与CPU连接主要是数据、地址和控制信号面向外设一侧的信号:用于与外设连接提供的信号五花八门功能定义、时序及有效电平等差异较大7.1CPU与外设数据传递方式概览7.1.1程序控制数据传送方式1.无条件数据传送2.查询式数据传送流程图输入接口电路输出接口电路【例7-1】假设接口的数据输入端口地址为40H,数据输出端口地址为42H,状态端口地址为44H。(1)假定状态寄存器中第1位为输入状态标志,为1时表示输入缓冲器中已经有1个字节准备好,可以进行输入;为0时表示输入缓冲器处于忙状态。(2)假定状态寄存器中第0位为输出状态标志,为1时表示输出缓冲器为空,CPU可以向外设输出数据。编写程序,要求:实现从输入设备输入一串数据到内存缓冲区,再将内存缓冲区中数据送到输出端口输出,串长度为100。MOVDI,OFFSETBUFFERMOVCX,100;设置循环次数CLDDATA_IN:INAL,44H;读入状态信息TESTAL,02H;检测标志位寄存器第1位是否为1JZDATA_IN;标志位为0,则数据未准备好,继续读入状态信息INAL,40H;数据准备好,可以从输入端口读入数据ANDAL,7FH;将数据存入缓冲区,数据位宽为7位STOSBLOOPDATA_INMOVCX,100DATA_OUT:INAL,44H;读入状态信息TESTAL,01H;检测标志位寄存器第0位是否为1JZDATA_OUT;标志位为0,则设备忙,继续读状态信息LODSB;设备空闲,从数据输出端口输出数据OUT42H,ALLOOPDATA_OUT……具体程序如下:7.1.2中断数据传送方式1.中断相关概念中断:中断源分类:外部中断和内部中断外部中断分为:非屏蔽中断和可屏蔽中断2.中断处理过程中断请求:中断源发出中断优先级判优:按中断优先级排队中断响应:内部中断或非屏蔽中断可屏蔽中断且IF=1中断响应周期:断电保护、获得中断服务程序的入口地址中断处理:现场保护、执行中断服务程序中断返回:恢复现场7.1.3直接存储器存取(DMA)方式7.28259A中断控制器7.2.18259A的引脚及功能D7~D0:双向数据线CAS2~CAS0:级联控制信号INT:中断请求输出信号IR7~IR0:中断请求输入端A0:内部寄存器选择信号CS:片选信号WR:写信号RD:读信号SP/EN:INTA:中断响应信号7.2.28259A的内部结构7.2.38259A的中断响应过程①当某中断请求IRi有效时,中断请求寄存器IRR的相应位置1;②IRR中的某中断请求IRi进入中断服务寄存器ISR中的对应位,若IMR中的相应位为0,则该中断请求信号送入优先级分析器PR,在8259A的INT端输出高电平,向CPU发出中断请求;③CPU进入中断响应周期,发出两个中断响应信号INTA。8259A接收到第一个INTA后,将ISR中具有最高优先级的中断请求的相应位置1,IRR中的对应位清0;④8259A接收到第二个INTA后,将相应的中断类型号送到数据总线上;⑤中断响应周期结束后,发出中断结束命令,使相应的ISR复位。7.2.48259A的初始化编程1.初始化命令字ICW1:D7~D5:无意义D4:特征标志位D3(LTIM):设置中断请求输入端IRi的触发方式D2(ADI):设置调用地址间隔D1(SNGL):指示单片还是多片级联D0(IC4):指示是否需要初始化ICW4ICW2:D7(T7)~D3(T3):中断类型号的高5位D2(ID2)~D0(ID0):中断类型号的低3位ICW3:主片D7~D0:分别与IR7~IR0对应从片D7~D3:未用D2(ID2)~D0(ID0):指示从片接到主片的哪个IRICW4:D7~D5:未用D4(SFNM):设置嵌套方式D3(BUF):设置缓冲方式D2(M/S):设置在缓冲方式下本片是主片还是从片D1(AEOI):设置中断结束方式D0(μPM):设置CPU模式2.操作命令字OCW1:D7(M7)~D0(M0):分别与IR7~IR0对应OCW2:D7(R):设置中断优先级方式D6(SL):控制L2~L0是否有效D5(EOI):设置中断结束方式D4和D3:OCW2的标志位D2(L2)~D0(L0):中断源编码D7~D5组合的命令编码OCW3:D7:设置中断优先级方式D6(ESMM)和D5(SMM):设置特殊屏蔽方式D4和D3:标志位D2(P):设置查询方式D1(RR)和D0(RIS):设置读IRR或ISR命令【例7-2】某微机系统使用单片8259A管理中断,接口地址为20H和21H,中断为上升沿触发,与IR0~IR3对应的中断类型号为08H~0BH,IR4~IR7不使用。根据要求编写8259A的初始化程序。MOVDX,20HMOVAL,12H;上升沿触发,单片不写ICW4,ICW1=00010010=12HOUTDX,AL;A0=0,写ICW1MOVDX,21HMOVAL,08H;设置中断类型号08HOUTDX,AL;A0=1,写ICW2MOVAL,0F0H;屏蔽IR4~IR7,OCW1=11110000=0F0HOUTDX,AL;写OCW17.2.58259A的连接8259A的级联8259A的访问控制实训7-18259A的应用设系统分配给8259A的端口地址是20H和21H,中断类型号为40H,中断请求信号以跳变方式由IR2引入。当CPU响应IR2请求时,输出字符串“A8259AINTERRUPT!”。中断10次后程序退出。DSEGSEGMENTMESSDB'A8259AINTERRUPT!',0AH,0DH,'$'COUNTDB10;计数值为10DSEGENDSSSEGSEGMENTSTACKSTADB100HDUP(?)TOPEQULENGTHSTASSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEG,SS:SSEGSTART:CLIMOVAX,DSEGMOVDS,AXMOVAX,SSEGMOVSS,AXMOVSP,TOP中断处理程序如下:;8259A初始化MOVAL,13HOUT20H,AL;写ICW1,单片,边沿触发MOVAL,40HOUT21H,AL;写ICW2,中断类型号40HMOVAL,01HOUT21H,AL;写ICW4,非自动结束MOVAX,SEGINT-P;设置中断向量MOVDS,AX;中断服务子程序入口段基址送DSMOVDX,OFFSETINT-P;中断服务子程序入口偏移地址送DXMOVAL,42H;将IR2的中断类型号42H送入ALMOVAH,25H;25H功能调用,置中断向量INT21HINAL,21H;读IMRANDAL,0FBH;允许IR2请求中断OUT21H,AL;写中断屏蔽字OCW1WAIT:STI;开中断CMPCOUNT,0;判断10次中断是否结束JNZWAIT;未结束,等待MOVAH,4CH;结束,返回DOSINT21HINT-PPROC;中断服务子程序PUSHDS;现场保护PUSHAXPUSHDXSTI;开中断MOVDS,AXMOVDX,OFFSETMESSMOVAH,09HINT21HDECCOUNT;控制10次循环JNZNEXTINAL,21H;读IMRORAL,04H;屏蔽IR2请求OUT21H,ALNEXT:CLI;关中断MOVAL,20H;写OCW2,送中断结束命令EOIOUT20H,ALPOPDX;恢复现场POPAXPOPDSIRET;中断返回INT-PENDPCSEGENDSENDSTART7.38237ADMA控制器7.3.18237A的引脚及功能READY:准备就绪信号RESET:复位信号CLK:时钟输入信号AEN:地址允许信号ADSTB:地址选通信号IOR:双向三态I/O读控制信号IOW:双向三态I/O写控制信号MEMR:三态输出的存储器读控制信号MEMW:三态输出的存储器写控制信号DREQ0~DREQ3:DMA请求信号DACK0~DACK3:DMA响应信号HRQ:保持请求信号HLDA:保持响应信号DB0~DB7:双向三态数据总线A3~A0:双向三态地址线A7~A4:三态地址输出线CS:片选信号EOP:过程结束信号7.3.28237A的内部功能结构控制寄存器:状态寄存器:暂存寄存器:8位,暂时存放要传送的输出基地址寄存器:16位,存放相应通道地址寄存器的初始值地址寄存器:16位,存放DMA传送期间的当前地址基字节数寄存器:16位,存放相应通道字节数寄存器的初始值字节数寄存器:16位,存放当前字节数方式寄存器:请求寄存器:屏蔽寄存器:内部寄存器地址7.3.38237A的工作方式单字节传送方式块传送方式请求传送方式级联传送方式实训7-28237A在PC/XT系统中的应用在IBMPC/XT系统中,8237A的4个独立的DMA通道分别指定给一个专门的外部设备。通道0用于动态RAM刷新;通道2用于实现软盘驱动器和内存之间的数据传输,其工作方式包括数据的写入、读出和校验等,故这个通道被设置成字节传送、读写方式、不能自动初始化;通道3用于实现硬盘驱动器和内存之间的数据传输;通道1为用户保留,用于提供其他传输功能,如网络通信功能。系统中采用固定优先级,其中,动态RAM刷新操作的优先级最高,硬盘与内存之间的数据传送操作的优先级最低。8237A的端口地址为:0000~000FH,系统为页面寄存器分配的I/O端口地址为:通道1为83H,通道2为81H,通道3为82H。系统BIOS对8237A初始化程序和测试程序为:MOVAL,04MOVDX,DMA+8;DMA+8为控制寄存器的端口号OUTDX,AL;输出控制命令,关闭8237AMOVAL,00MOVDX,DMA+0DH;DMA+0DH是复位命令端口号OUTDX,AL;发复位命令,清除先/后触发器MOVDX,DMA;DMA是通道0的地址寄存器端口号MOVCX,0004WRITE:MOVAL,0FFHOUTDX,AL;写入地址低位OUTDX,AL;写入地址高位,此时16位地址为FFFFHINCDXINCDX;指向下一个通道LOOPWRITE;使4个通道的地址寄存器中均为FFFFHMOVDX,DMA+0BH;DMA+0B为方式寄存器的端口MOVAL,58H;对通道0进行方式选择,单字节读传送OUTDX,AL;地址加1变化,设置自动初始化功能MOVAL,41H;对通道1设置方式,单字节校验传输OUTDX,AL;地址加1变化,无自动初始化功能MOVAL,42HOUTDX,AL;对通道2设置方式,同通道1MOVAL,43HOUTDX,AL;对通道3设置方式,同通道1MOVDX,DMA+8;DMA+8是控制寄存器的端口号MOVAL,0;对8237A设置控制命令,DACK有效OUTDX,AL;DREQ有效,固定优先级,启动工作MOVD