[计算机软件及应用]软件设计第二章_第1页
[计算机软件及应用]软件设计第二章_第2页
[计算机软件及应用]软件设计第二章_第3页
[计算机软件及应用]软件设计第二章_第4页
[计算机软件及应用]软件设计第二章_第5页
已阅读5页,还剩96页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章第二章 计算机接口基础计算机接口基础端口操作中断与 DMA定时器、计数器串行接口并行接口(打印口)A/D、 D/A总线网络计算机与外设交换数据的方式计算机与外设交换数据的方式查询方式需要交换数据时,先查询标志,判断是否有数据交换中断方式一旦有数据可以交换,马上通知应用程序进行数据交换DMA方式有一批数据可以交换时,通知应用程序进行交换端口与端口操作端口与端口操作计算机与外设交换数据的接口接收外设数据、把数据送外设控制外设的工作方式接收外设的状态信息端口地址接口中的数据、控制、状态寄存器统一编址 (8051)与单独编址 (PC)端口操作 (PC)汇编: IN、 OUTTurbo C/C+ Builder: inportb、 outportbMS C/VC: _inp、 _outpDOS/Windows9XWindows2000/Windows XP(VIOPort类 )0 65535端口地址选择端口地址选择地址线 : A8 A7 A6 A5 A4 A3 (0200H 03FFH),开关位置 “ON“有效 ,置 “OFF“无效。基地址等于所有有效位数之和加上 0200H(A9=1)。ON 中断中断中断的概念CPU暂停正在执行的程序,去处理特殊事件的过程中断的用途高效实时处理数据交换微机、单片机、 PLC都有自己的中断系统故障处理与分时操作中断的分类软件中断硬件中断 不可屏蔽中断可屏蔽中断32位 CPU称为异常内存错误等串口、打印、硬盘等PC机的硬件中断系统机的硬件中断系统中断类型号 确定每个中断响应的优先级确定中断在中断向量表中的顺序PC机的硬件中断资源 16位机: 8个硬件中断32位机: 15个硬件中断类型号在 20H到 FFH之间 每个 ISA设备需要唯一的硬件中断资源 PCI设备可以共享同一个硬件中断资源说明PC机硬件中断资源机硬件中断资源 分配分配16位系统32位系统由 8259A管理中断向量表(中断描述符表)中断向量表(中断描述符表)内存中保存的每个中断处理程序入口地址16位系统:中断向量表32位系统:中断描述符表每个中断向量占 4个字节每个中断描述符占 8个字节置换中断向量中断处理的过程中断处理的过程外设通过中断控制器向 CPU请求中断CPU执行完当前指令,给中断控制器发送中断响应信号中断控制器把中断类型号发送给 CPUCPU进行入栈处理,保护现场CPU根据中断类型号,从中断向量表或中断描述符表中查出中断处理程序的入口地址将入口地址赋值给程序计数器( CS、 IP),转去执行中断处理程序处理完中断,恢复现场, CPU继续从断点处执行其它指令8259A中断控制器中断控制器 管理多个外部中断设备(每片 8259A可管理 8个硬件中断,可级联) 向 CPU发送中断请求信号,给 CPU提供中断类型号 提供不同中断的优先级管理 提供多种工作方式,并可编程改变 可以单独屏蔽某些中断特点设置中断屏蔽 (21H/A1H)8位对应 8个中断源,最低位为 IRQ0, 1表示屏蔽中断结束命令 (20H/A0H)中断结束时,设置为 20H,发送中断结束命令PC机中断机中断 程序的编写程序的编写主程序 设置中断屏蔽置换中断向量中断处理子程序保护现场开中断处理中断关中断发送中断结束命令恢复现场中断程序示例中断程序示例 主程序主程序串口接收数据if(sys.port=1) port=0x3f8;setvect(0xc,get_com_int);if(sys.port=2) port=0x2f8;setvect(0xb,get_com_int);c=inportb(0x21);if (sys.port=1) c=celse c=coutportb(0x21,c);置换中断向量设置中断屏蔽中断程序示例中断程序示例 中断程序中断程序void interrupt get_com_int()char c;enable();c=inportb(port);c=cbuffbuff_ip=c;buff_ip=buff_ip+1;if (buff_ip=bufflen) buff_ip=0;disable();outportb(0x20,0x20);开中断处理中断:接收串口数据关中断发送中断结束命令Windows系统中断程序处理系统中断程序处理必须编写虚拟设备驱动程序一般采用事件通知或查看标志的方法处理中断往往和 DMA结合起来使用Windows系统虚拟系统虚拟 设备管理程序设备管理程序VxDWDMVHardwareInt类QuickVxDVSharedHardwareInt类一个 VxD使用一个硬件中断多个 VxD共享一个硬件中断DriverWorksKInterrupt类产生 .sys文件Windows2000以上系统PCI设备产生 .vxd文件用于 Windows9X系统ISA设备采用 VC+编译Windows系统中断程序示例系统中断程序示例 1ptAiStart.TrigSrc = 0 ptAiStart.SampleRate = 1000ptAiStart.NumChans = 4ptAiStart.StartChan = 0ptAiStart.Count=1000ptAiStart.buffer = DRV_GetAddress(lBuffer(0)ErrCde = DRV_FAIIntScanStart(Handle, ptAiStart)ptAICheck.stopped = DRV_GetAddress(lStopped)ptAICheck.retrieved = DRV_GetAddress(iRetrieved)ptAICheck.HalfReady = DRV_GetAddress(lHalfReady)ErrCde = DRV_FAICheck(Handle, ptAICheck)查询标志Windows系统中断程序示例系统中断程序示例 2ptEvent.Enabled = 1ptEvent.EventType=DS_EVT_INTERRUPTptEvent.Count = txtInterruptCount.TextErrCde = DRV_EnableEvent(Handle, ptEvent)ThreadHandle = CreateThread(0, 0, AddressOf EventThread, vbNullString, CREATE_SUSPENDED, ThreadID)ptCheckEvent.EventType =RV_GetAddress(lngEventType)ptCheckEvent.Milliseconds = 1000lngError = DRV_CheckEvent(Handle, ptCheckEvent)在线程中检查事件8051单片机的中断系统单片机的中断系统提供 5个硬件中断2个外部中断ORG 0000HLJMP MAINORG 0003HLJMP INT0ORG 000BHLJMP TIMER0ORG 0013HLJMP INT1ORG 001BHLJMP TIMER1ORG 0023HLJMP COMMAIN: INT0: 2个内部定时器中断1个内部串口中断西门子西门子 S7300的中断系统的中断系统日时钟中断 (OB10-OB17)延时中断 (OB20-OB23)循环中断 (OB30-OB38)硬件中断 (OB40-OB47)每天的某个时刻指定的延时时间达到按一定的时间间隔外部信号请求DMA(Direct Memory Access)一次可以传输一批数据不经过 CPU,速度快不需要利用 CPU的寄存器,不必保护现场和恢复现场是外设与内存直接交换数据最快的方法直接在外设和内存间进行批量数据交换,不经过 CPU硬盘数据读写快速数据采集动态内存刷新特点DMA数据传送过程数据传送过程 外设向 DMA控制器发一个 DMA请求信号 DMA控制器收到请求后,向 CPU发总线请求信号,CPU处理完当前指令,给 DMA控制器发送总线允许信号, DMA控制器就获得了总线的使用权 将 DMA控制器中地址寄存器中内容送到地址总线上 DMA控制器向外设发送一个确认 DMA传输的信号,通知外设将数据送到数据总线上 数据送入地址总线所指向的内存单元 地址寄存器值 1、字节计数器值 1 重复 5、 6、 7至字节计数器值为 0 DMA传输结束, DMA控制器向 CPU发结束信号,将总线控制权交还给 CPU可编程可编程 DMA控制器控制器 8237A特点 具有 4个独立的 DMA通道。 每个 DMA通道可以分别允许或禁止 每个 DMA通道的请求具有不同的优先级 每个通道一次传送的数据最长 64KB 可在外设与内存、内存与内存间传送数据 可以级联使用,以扩充通道应用两片 8237A级联使用 (7个 通道)2: 软盘3: ECP打印口4: 级联其余:保留Windows系统系统 DMA程序处理程序处理必须编写虚拟设备驱动程序硬件要求 FIFO缓冲区FIFO半满或全满传送数据往往和中断结合起来使用Windows系统 DMA程序示例Para.Mode = Dma_Mode: Para.BaseAddress = /*以下设置 1000Hz频率 */outportb(0x40,0xA9); outportb(0x40,0x04);setvect(0x1c,get_sample_int).void interrupt get_sample_int()get_data.c1=inportb(port+1)get_data.c0=inportb(port);.outportb(0x43,0x36); /*以下恢复 18.2Hz频率 */outportb(0x40,0xFF); outportb(0x40,0xFF);高精度定时高精度定时多媒体定时器调用 API函数实现vtimeSetEvent:设置定时事件vtimeKillEvent:结束定时事件编写处理函数作为 timeSetEvent的参数提供 1ms的精确定时编写专门的线程实现精确定时QueryPerformanceFrequency:获取系统时钟频率QueryPerformanceCounter:获取当前脉冲计数值获取两次计数值,计算其差值,再除以时钟

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论