千家信息网

UART中断和DMA中断的区别有哪些

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,这篇文章主要讲解了"UART中断和DMA中断的区别有哪些",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"UART中断和DMA中断的区别有哪些"吧!单片机
千家信息网最后更新 2024年09月22日UART中断和DMA中断的区别有哪些

这篇文章主要讲解了"UART中断和DMA中断的区别有哪些",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"UART中断和DMA中断的区别有哪些"吧!

  单片机I/O设备的控制方式主要有三种:程序循环检测、中断驱动和直接内存访问。

  1、程序循环检测方式

  程序循环检测方式的基本思路是:在程序(一般是设备驱动程序)当中,通过不断地检测I/O设备的当前状态,来控制一个I/O操作的完成。具体来说,在进行I/O操作之前,要循环地去检测该设备是否已经就绪。如果是,就向控制器发出一条命令,启动这一次的I/O操作。然后,在这个操作的进行过程中,也要循环地去检测设备的当前状态,看它是否已经完成。总之,在I/O操作的整个过程中,控制I/O设备的所有工作都是由CPU来完成的。这种方式也称为是繁忙等待方式或轮询方式。它的缺点主要是:在进行一个I/O操作的时候,要一直占用着CPU,这样就会浪费CPU的时间。

  假设I/O地址采用的是内存映像编址方式,现在需要在打印机上打印一个字符串"ABCDEFGH"。对于操作系统来说,要完成这个任务,其实很简单,只要把这八个字符一个接一个地送到打印机设备的I/O端口地址就可以了。如图(a)所示,这八个字符被保存在系统内核的一个缓冲区当中,并用指针p来指向它们。status_ reg 这个内存单元对应于打印机控制器里面的状态寄存器, data register这个内存单元对应于它的数据寄存器,现在要做的事情,就是把这八个字符一个接一个地放到数据寄存器当中。

  它的基本思路是:逐个去打印每一个字符。在打印一个字符之前,首先用一个while语句来检测打印机的当前状态,看它是否已经就绪,如果还没有就绪,就在这里循环等待;如果已经就绪,就把当前的字符送入到打印机的数据寄存器当中。在本例中,由于采用了内存映像的编址方式,因此,在程序员眼中,状态寄存器和数据寄存器都被看成是普通的内存单元,对它们的访问也是普通的赋值操作,不需要专门的I/O指令。但是这个赋值操作的功能与普通的赋值操作不同,它相当于是给打印机发出了一个命令,让它去打印一个字符。另外,每次打印完-一个字符后,都要重新判断设备是否就绪,因为相对于CPU来说,打印机是一个慢速设备,它在执行打印命令时,不可能像CPU那么快,而是需要一定的时间来完成。因此,当CPU把一个字符交给它之后,必须循环等待一段时间, 才能去处理下一一个字符。

  2、中断驱动方式

  循环检测的控制方式,需要占用大量的CPU时间。假设打印机的打印速度为100字符/秒,在循环检测方式下,当一个字符被写入到打印机的数据寄存器后,CPU要等待10ms才能把下一个字符写进去,而这10ms的时间,就在循环等待中被白白浪费掉了。为了解决这个问题,一种办法就是让CPU在这10ms的时间内,先去运行其他的任务,然后等打印机处理完上一个字符后,CPU再接着处理下一个字符。这种方法被称为是中断驱动的控制方式。它的基本思路是:当一个用户任务需要进行I/O操作时,会去调用相应的系统函数,由这个函数来发起I/O操作,并将当前任务阻塞起来,然后调度其他的任务去使用CPU。当所需的I/O操作完成时,相应的设备就会向CPU发出一个中断,系统在中断处理程序当中,如果发现还有数据需要处理,就再次启动I/O 操作。在中断驱动的控制方式下,数据的每一次读写还是通过CPU来完成,只不过当I/O设备在进行数据处理时,CPU不必在那里等待,而是可以去执行其他任务。

  仍以打印字符的问题为例。如下图所示,在中断驱动方式下,对于用户程序来说,它所做的事情可能是:把需要打印的字符串放到一个缓冲区buffer中,然后调用一个系统调用函数print。在print 系统调用中,首先把用户缓冲区中的字符串复制到系统内核的字符数组p当中,然后打开中断。接下来是一个循环检测语句,判断打印机的当前状态是否就绪,当打印机就绪后,就把第一个字符放到数据寄存器里面去打印。接下来,未等该字符打印完,就去调用系统的调度器,选择另一个就绪任务去运行,而当前的这个任务,就会被阻塞起来。

  当打印机完成一个字符后,将向CPU发出一个中断。在中断处理程序当中,首先判断一下,如果所有的字符都已打印完,那么就去阻塞队列中,把用户任务唤醒,使它处于就绪状态;如果还有字符需要打印,就直接把下一个字符复制到打印机的数据寄存器当中,启动打印操作,而不需要再去循环地判断打印机是否就绪。接下来是一些后继处理,先向中断控制器发出一个确认信号,然后结束中断处理程序,返回到被中断的那个任务。

  3、直接内存访问方式

  在中断驱动的控制方式下,每一次数据读写还是通过CPU来完成,而且每一次处理的数据量很少,如1个字节,所以中断出现的频率就很高。而中断处理需要额外的系统开销,所以也会浪费一些CPU时间。因此人们又提出了一种新的解决办法,也就是直接内存访问(Direct Memory Access, DMA)的控制方式。它的基本思路是:让DMA控制器来代替CPU,完成I/O设备与内存之间的数据传送,从而空出更多的CPU时间,去运行其他的任务。

  仍以打印字符的问题为例。如下图所示,在DMA控制方式下,用户程序所做的事情是完全相同的,即把字符串复制到一个缓冲区buffer 当中,然后调用系统函数print。在print函数当中,首先也是把buffer 当中的字符串复制到系统内核的缓冲区p当中,然后对DMA控制器进行编程,设置它的各个寄存器的内容,包括内存起始地址、需要打印的字符个数、数据传输的方向等。之后,print 函数就完成了任务,所以就调用系统的调度程序,

  选择另一个就绪任务去运行,而当前的这个任务就会被阻塞起来。接下来,当CPU正在执行这个新任务的同时,DMA控制器会与设备控制器进行交互,把需要打印的字符,一个接一个地送到打印机控制器当中。在所有的字符都打印完之后,就向CPU发出一个中断,表明这一次的I/O操作已经全部完成了。因此,在中断处理程序里面,已经没有什么实质性的工作,先是向中断控制器发出一个确认信号,然后唤醒刚才被阻塞的任务。

  采用DMA控制方式,最大的优点是减少了中断的次数。原本每打印一个字符,都要产生一次中断,而现在当所有的字符都打印完后,才会产生一个中断,这样就减少了中断处理的开销。

感谢各位的阅读,以上就是"UART中断和DMA中断的区别有哪些"的内容了,经过本文的学习后,相信大家对UART中断和DMA中断的区别有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

字符 方式 控制 任务 打印机 数据 程序 设备 处理 系统 循环 内存 寄存器 检测 控制器 时间 状态 驱动 函数 字符串 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 北邮网络安全与密码学 郴州app软件开发就业 登录服务器后怎么安全退出来 数据库服务器查看实例 2k21 加速 服务器 方舟服务器pvp选择地点 系统换数据库 网络安全空间竞赛单兵渗透 如何把服务器设置到中国 数据库技术新进展论文 增强网络安全的手抄报图片 北京工控软件开发有用吗 松下电器大连软件开发年薪 文件服务器文件夹权限详解 专利数据库的功能和作用不包括 张禹艺术名家数据库 中学生与网络安全教育教案 金蝶商如何收缩数据库 我的世界1.16.4服务器插件 数据库缓存失败是什么原因 发邮箱说服务器错误 基于图形的软件开发工具 数据库原理与应用吉林大学出版社 物理服务器管理口协议 无纸化会议管理服务器厂家 山西曙光服务器虚拟化哪家好 对网络安全法的解读 智慧教育软件开发商 山东 潍坊 软件开发企业 网络安全问题处理机制
0