版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章输入/输出与中断技术6.1计算机接口概述
6.2输入/输出接口电路6.3CPU与外设的数据传输控制方式6.4ARM中的GPIO6.5中断技术6.6ARM中断系统基础本章小结习题6.1计算机接口概述
冯·诺伊曼体系结构的计算机硬件由控制器、运算器、
存储器、输入设备和输出设备等5部分组成。运算器和控制器通常集成在一片称之为中央处理器(CPU)的IC上。CPU和存储器构成了计算机的核心部分,称之为主机。将计算机中处理器和存储器之外的其他组成部分统称为外设。计算机是一个高速的数据自动化处理装置。计算机工作时,首先需要将数据的处理方法(算法)以及待处理的数据输入到计算机的内存中,处理器自动高速地执行预输入到存储器中的程序,完成预定的计算任务。用计算机语言描述的算法和数据合称为程序。计算机运行过程中,往往还需要输入新的数据,计算机处理好的数据也需要送出来用于显示、打印、传输或控制等。主机与外设交换信息称为输入/输出(I/O),其中将外界信息传送到主机的过程称为输入(Input),而将主机中的信息传送到外设的过程称为输
出(Output)。微处理器连接、访问存储器时,由于双方都是半导体器件,电路的电特性一致,一般也不需要应答,故而连接、访问控制相对来说比较简单。然而对于品种繁多的外设,它们的执行部件有些是机械或机电的(比如打印机、电磁阀),有些是光电的(比如鼠标、光驱等),大部分外设的工作频率低于甚至大大低于微处理器的工作频率,并且彼此之间的数据格式、性能、信号形式等差别也很大,因此,微处理器与大部分外设之间连接时,主机与外设间信号接口要进行匹配。另外,有些外设随机地要求处理器提供服务,微处理器和外设之间往往还需要联络、握手等信号,双方协商共同完成I/O操作。这就需要相应的电路用于完成主机与外设的桥接与控制,这就是I/O接口电路。
I/O接口电路主要用于解决下列问题:
(1)输出数据的锁存缓冲,协调主机与外设之间数据传输的速度差异。
(2)输入数据的三态隔离,确保非I/O传送期间处理器总线不被外设占用。
(3)信号形式匹配,将诸如光电、压力、温度等多种形式的物理信号统一转换成处理器可直接处理的数字电路信号或
反之。
(4)信号格式转换,将主机系统中的并行数据转换成外设协议数据格式或反之。
(5)产生和提供联络、控制等信号,保证处理器与外设之间数据传输的有效和可靠。
6.2输入/输出接口电路
6.2.1输入/输出接口电路的基本功能与端口分类
从一般意义上来说,“接口”具有物理连接的含义,如打印机接口、USB接口、串行接口等分别用于主机与其他外设的连接。从连接结构上看,接口电路一端连接着主机的系统总线,另一端则连接着物理设备。物理外设通过接口电路接入到计算机。主机通过对接口电路的访问,实现对外设的控制。由于从CPU角度看到的外设实质上是外设的接口电路,因此在计算机中就将外设接口简称为外设。它可以理解为物理外设的抽象,并不一定是具体的物理外设装置。在工作原理层上,主机与外设接口之间主要通过以下三类信息的交互,来完成数据的控制传送:
(1)外设的状态信息(输入):编码方式的二进制数据,用于标示设备的状态情况。主机需要了解外设的当前状态,来决定是否可以进行数据传送。
(2)数据信息(输入/输出):要传送的二进制目标数据。
(3)控制信息(输出):编码方式的二进制数据,控制外设的工作方式与具体操作等。
I/O接口电路中包含一组寄存器,分别用于存储这三类信息,称这些寄存器为端口寄存器或I/O端口(I/OPort),简称为端口。实际上,在计算机中所有的外设都可以抽象成为一组端口寄存器,CPU通过对各个端口寄存器的访问实现对外设的数据传输。对应于上述三种信息,外设接口电路中的端口寄存器也分为了三类:
(1)数据端口(寄存器):CPU和外设之间用来暂存传送数据的寄存器(如键盘输入数据、模/数转换数据、待打印的字符等)。在输入/输出过程中,对数据起锁存和缓冲的作用。
(2)状态端口(寄存器):用来存放外设或者接口部件本身状态的寄存器。
(3)控制端口(寄存器):用来存放CPU发往外设的控制命令的寄存器。
图6-1所示为I/O接口的典型结构。图6-1I/O接口的典型结构6.2.2I/O端口的编址
在计算机硬件系统中可以含有多个I/O接口,每个I/O接口中又可以含有多个I/O端口。为了能指定地访问各个I/O端口,这些端口寄存器在计算机系统中像存储器单元一样被编址,称之为端口地址,处理器通过端口地址可对各个端口寻址访问。
计算机系统中有两种I/O端口编址方式:
(1)统一编址方式:I/O端口与内存单元统一编址在一个地址空间,只是分布在不同的地址空间区域。这种编址模式下,处理器没有专用的I/O指令,使用内存访问指令访问I/O端口寄存器,CPU也没有专用的I/O访问控制管脚。
(2)独立编址方式:I/O端口与内存单元分别编址在I/O地址空间和内存地址空间。这种编址模式下,处理器有专用的I/O指令,使用专用的I/O指令访问I/O端口寄存器,使用存储器访问指令访问存储器各单元。CPU有专用的I/O访问控制管脚。需要注意的是,接口和端口是两个不同的概念。若干个端口加上相应的控制电路才构成接口,每个端口都有对应的确切地址,而接口对应的可能是一个地址空间。端口的概念着重于I/O驱动原理描述,接口的概念则较偏重连接性。输入/输出操作总是对端口而言,CPU对外设的输入/输出操作实际上就是对I/O接口中各端口的读/写操作。数据端口一般是双向的,数据是输入还是输出,取决于CPU对该端口地址进行操作时发往接口电路的是读还是写控制信号。由于状态端口只做输入操作,控制端口只做输出操作,因此,有时为了节省系统地址空间,可以在设计接口时,让这两个端口共用一个端口地址,再用读/写信号来分别选择访问。6.3CPU与外设的数据传输控制方式
外设的多样性使外设的属性差异极大。外设接入到计算机系统中时,处理器与外设之间的数据传送方式主要有无条件数据访问方式、状态查询数据访问方式、中断数据访问方式和直接存储器访问(DMA)方式等,下面分别介绍。6.3.1无条件数据访问方式
有一些外设,处理器在进行访问时不必关心其状态,这些设备永远处于“准备好”的状态,可随时访问,如状态开关(按键)、继电器、数码管、发光二极管等。CPU访问这类设备时,输入设备总是随时准备好向CPU提供数据,而输出设备也总是随时准备好接收CPU送来的数据。此类外设称为无条件外设。CPU对此类外设进行输入/输出操作时无需考虑外设的状态,故此类外设的访问方式也称为无条件传送方式。这类I/O设备的访问控制最简单,使用指令直接读/写数据端口即可。采用无条件传送方式的接口电路很简单。如无条件输入设备的计算机接入,考虑到外设数据保持时间相对于CPU的处理时间要长得多,输入数据不能影响系统总线的正常使用,因而外设数据要经过三态缓冲器和CPU数据总线相连,如图6-2(a)所示。外设的数据总是准备好的,随时可通过三态缓冲器上传到系统总线。当CPU执行该外设输入的指令(即读I/O地址指定的数据端口)时,读信号(RD)和地址数据(A[31:0])运算结果信号作为三态门缓冲器的使能信号,三态缓冲器被选通,物理外设中早已准备好的输入数据加载到数据总线送达CPU。三态缓冲器未被选通时,外设数据被高阻隔离。图6-2无条件数据访问接口电路对于无条件输出外设,由于系统总线速度很快,而物理外设的速度比较慢,这就要求CPU送出的数据在接口电路的输出端保持,因而一般需要一个锁存器,如图6-2(b)所示。CPU对端口地址指定外设执行输出指令时,写信号(WR)和地址数据(A[31:0])运算结果信号作为数据锁存器的锁存信号。于是相应的数据锁存器被选中,CPU输出的数据经过数据总线送入输出数据锁存器中,输出锁存器保持这个数据,供外设使用,直至下次新数据写入。6.3.2状态查询数据访问方式
有一些外设,处理器在进行访问时还需要关心其状态,只有状态许可时方可对外设进行访问。例如,对AD转换器的访问,只有模/数转换结束后,转换的结果才允许处理器取用。再如,使用串口外设进行数据通信时,只有串口发送缓冲区有空位置了,才允许CPU向其写入发送数据;只有接收缓冲区不空(有接收数据)时,方可从中读取串口接收到的数据等。这种需要满足一定条件进行数据访问的外设称为条件访问外设。CPU对此类外设进行输入/输出操作时需要考虑外设的状态,故此类外设的访问方式也称为条件传送方式。计算机中大多数外设都是条件访问方式。通常有程序查询外设状态方式(简称状态查询方式或程序查询方式)和中断控制方式两种外设条件访问控制的手段应用于条件外设的驱动。
状态查询方式的原理:在执行数据端口访问指令前,要先查询该设备的状态,当设备处于“准备好”状态时,CPU才执行对设备数据端口的输入/输出指令,与外设交换信息。为此,接口电路中既要有数据端口,又要有状态端口。状态查询方式I/O接口电路原理如图6-3所示,其I/O控制流程如图6-4所示。图6-3状态查询方式I/O接口电路原理图6-4状态查询方式I/O控制流程采用查询方式完成一次数据传送的过程如下:
(1) CPU从状态端口中读取状态字。
(2) CPU检测相应的状态位是否满足数据访问的就绪条件。
(3)如果不满足,则重复步骤(1)和(2);若外设已处于就绪状态,则访问数据端口,完成数据收发。分析查询方式I/O操作过程:传送一批数据时,由于外设的速度远慢于CPU的速度,因此,CPU将会在步骤(1)和(2)循环停等外设就绪,此时大量的CPU性能空消耗在了无效的查询等待中,致使整个系统的性能受到严重的影响。于是工程师们有了一个新的想法:能否将CPU查询外设状态改进为外设在就绪后主动将状态报告给CPU。即CPU在完成一次I/O访问后,继续做其他的运算处理,当外设再次就绪时主动通知CPU,CPU获知此外设已就绪,则进行一次数据访问。如此,CPU在外设数据输入/输出过程中也在并行地做其他的运算处理工作,有效地利用了CPU的查询等待时间,大大提高了计算机系统的整体性能。中断方式是解决此问题的有效方法。6.3.3中断数据访问方式
中断数据访问方式是指当外设需要与CPU进行信息交换时,由外设主动向CPU发出数据传送请求信号,CPU响应此请求信号后,暂停正在执行的程序,转去执行该外设的数据输入/输出操作程序,外设数据端口访问后,CPU再继续执行被暂停的程序。其接口电路原理如图6-5所示。图6-5中断方式I/O接口电路原理查询传送方式是由CPU来查询外设的状态,CPU处于主动地位,外设处于被动地位。中断传送方式则是由外设主动向CPU发出请求,等候CPU处理;在没有发出请求时,CPU和外设都可以独立进行各自的工作。目前绝大多数的微处理器都具有中断功能,可以实时高效地输入/输出访问,提高全系统的性能。中断技术已不局限于I/O处理,在其他许多方面也有重要的应用,例如实时控制、故障处理等。有关中断技术的具体内容参见下节。
CPU访问外设数据端口如同访问存储器单元一样,速度很快,而物理外设对数据端口中数据的处理比较慢。例如,数据串行通信时,处理器以核时钟速度、并行数据方式向串口写入待传送数据,而串口则要以约定的波特率逐比特将数据传送出去。串口消费数据的能力远远慢于CPU的数据传输能力。有的外设甚至是机械动作,对数据的消费就更慢了。比如针式打印机,在将处理器传送过来的数据进行打印时,其字符打印速度比处理器的数据传送速度要慢几个数量级。由此可见,输入/输出速度的瓶颈表现于I/O接口电路,根源却在物理外设。状态查询方式和中断方式都是进行有条件输入/输出控制的具体实现手段。中断方式的输入/输出外设访问,提高了CPU与物理外设的并行性,并由此提高了计算机系统的综合性能,是目前最常用的输入/输出方式。6.3.4DMA方式数据访问传输
比起状态查询方式,中断方式节省了CPU大量的用于查询外设工作状态的时间。在中断方式下,CPU不再需要轮流对每个外设进行查询,一方面可以使得CPU与外设并行工作,另一方面,由于外设具有申请CPU的主动权,可以很好地满足外设对CPU提出输入/输出服务要求的随机性,即具备了实时性。但是,中断方式仍然有诸多可改进之处,以适应一些特别的应用。例如在访问高速硬盘数据或传送动态显示数据时,一般不再简单地使用中断输入/输出方式。首先,在整个中断处理过程中都需要CPU参与,即使不需要CPU再处理的数据,如将某内存区域数据保存到硬盘,也要经过CPU。其次,在中断方式下,CPU在两个任务之间来回进行切换的时候,需要进行一些相应的现场保护和现场恢复的操作,这些操作对于I/O设备数据传输本身来说没有实际的意义,只是为了CPU能分别处理多个任务而进行的寄存器数据的保存和恢复(称之为系统开销)。每传送一个数据都产生一次中断申请,都需要重复进行现场保存、现场恢复等过程。在需要进行大量数据传输并且外设数据传输速度也比较高的情况下,中断频率也会随之增高,系统开销大增,中断控制方式的输入/输出不但不能提高效率,相反还会降低计算机的系统性能。再者,对于流水线处理器结构的计算机,中断产生的程序转移必然引起CPU指令流水线的清空与重建,这也会影响CPU对指令的执行效率。
DMA(DirectMemoryAccess,直接存储器访问)方式基于这样一个思路:用一个专用电路,其主要功能就是要与CPU协商获得系统总线的控制权,而后在高速外设和存储器之间桥接建立一条直接数据传输的临时通道,控制并完成数据块在内存与高速外设之间高速直接地传输,这个专用电路称为DMA控制器(DirectMemoryAccessController,DMAC)。由于DMAC控制外围设备与主存储器之间传送数据不需要执行程序,数据转储过程中也不需要用到CPU,因此,也就不需要CPU做现场的保存与恢复工作,甚至存储器地址增1和数据块长度计数器减1也由DMAC硬件实现,外设与内存间的数据直接通过总线传送而不经过CPU中转,从而使得DMA方式比中断等其他方式的数据传送速度大大提高。在DMA方式中,只有在DMAC初始化时,需要CPU进行一些编程,而整个数据的传送过程不需要CPU的干预,适合于大数据量的高速传送应用。CPU控制下的I/O设备到存储器的数据传送见图6-6;DMAC控制下的I/O设备到存储器的数据传送见图6-7,此时,CPU要暂时让出对系统总线的控制。
DMA方式适用于数据块的高速传送,其特点是:①外设对存储器可直接访问;②大批量数据可高速访问。DMA期间,CPU让出总线控制权,而处于“挂起”的暂停状态。图6-6CPU控制下的I/O数据传输通道图6-7DMA方式的I/O数据传输通道
6.4ARM中的GPIO
6.4.1概述
GPIO(GeneralPurposeInput/Outputports,通用输入/输出端口)是ARM系列芯片中的基本资源,可以分别用作输入管脚资源或输出管脚资源,主要应用于二值化数据(数字电路的0/1)的输入和输出,既可用于测取输入GPIO管脚的高/低电平状态,亦可在输出GPIO管脚上输出高/低电平。例如用于开关状态值输入、逻辑控制输出等,图6-8所示为GPIO分别用作按键开关的输入信道和发光二极管的输出控制信道。GPIO主要解决了输入数据的三态隔离、选通输入和输出数据的输出锁存缓冲。图6-8ARM芯片GPIO管脚的输入/输出应用设置为输入属性的GPIO在系统中用于将外部输入装置连接到系统(在图6-8中是3个按键),对输入的高低电平数据起着隔离的作用。在CPU读取该GPIO端口数据时,输入的高低电平数据经过该GPIO端口上到片内总线再传到CPU;CPU不读取该GPIO端口数据时,输入的高低电平数据被该GPIO端口三态隔离,不会影响片内总线的其他应用。设置为输出属性的GPIO在系统中用于将外部输出装置连接到系统(在图6-8中是3个LED),对输出数据起着锁存的作用。在CPU向该GPIO端口写数据时,输出数据经过片内总线传到该GPIO端口并被锁存,供外设随时使用;GPIO端口保持CPU本次写入的数据直到写入新数据。
LPC2000系列ARM的GPIO具有如下特性:
(1)在芯片复位后,所有GPIO口默认为输入状态。
(2)以端口(32 bit)字为单位对GPIO端口进行访问。
(3)可以独立控制GPIO口每位的方向属性(输入或输出模式)。
(4)可以独立设置GPIO口每位的输出属性,即输出状态(1/0)。
(5)对输入属性的GPIO位的输出操作无效;读输出属性的GPIO位,可得到该GPIO的当前输出状态值。
为了适应各种应用场合的需要,不同系列的芯片具有不同数量的GPIO,如LPC2132器件GPIO资源的具体描述见表7-2。6.4.2GPIO原理及端口寄存器说明
对于编程者而言,计算机中的各种资源都被抽象成了寄存器组,同样LPC2000系列芯片中的每个GPIO组件可以抽象为5个32位的寄存器,分别是PINSELx、IOxDIR、IOxSET、IOxCLR和IOxPIN,其中小写的x可以是0、1、2等,分别对应于不同的GPIO端口,不同的ARM器件型号有不同数量的GPIO端口,x值可能不一样。各寄存器的功能说明详见表6-1。CPU通过片内总线可以访问这些端口,并且通过访问这些端口设置管脚功能和GPIO输入/输出属性,实现数据的GPIO输入/输出等功能。
(1) PINSELx:该寄存器每2 bit控制一个多路选择开关(MUX1),通过对其编码可选择管脚的功能为GPIO功能或其他功能,默认值选择管脚为GPIO功能。关于该部分详见7.3节。只有通过PINSELx选择对应管脚为GPIO时,IOxDIR、IOxSET、IOxCLR和IOxPIN等端口寄存器才有意义。
(2) IOxDIR:该寄存器每1 bit控制一个多路选择开关(MUX2),通过对其按bit编码,可选择对应管脚的GPIO输入/输出属性:“0”—输入或“1”—输出。
(3) IOxSET、IOxCLR:该寄存器每1 bit控制一个多路选择开关(MUX3)。对IOxSET寄存器按bit写1时,对应的MUX3选择输出高电平1;对IOxSET寄存器写0时,不对MUX3产生影响。对IOxCLR寄存器按bit写1时,对应的MUX3选择输出低电平0;对IOxCLR寄存器写0时,不对MUX3产生影响。
(4) IOxPIN:该寄存器每1 bit随时反映对应管脚的状态,与GPIO输入/输出属性无关。但测取管脚状态时,一般会先设置GPIO为输入属性以免输出干扰。特别提示:即使某GPIO管脚输出高电平,也未必能从该管脚上读回1,管脚的状态和外部具体电路相关,例如管脚直接连接一个LED时,输出1,LED点亮,但由于二极管的钳位作用,读回的管脚状态还可能是0。
GPIO的工作原理参见图6-9。图6-9GPIO的工作原理
GPIO的应用方法及相关的寄存器编程可参见6.4.3小节。
注意:
(1)为了适合各种应用场合的需要,LPC2000系列芯片有多种型号。不同型号的器件具有不同的片内资源和不同数量的管脚,其GPIO资源差别也较大,具体资源情况可参见相应的芯片数据手册,在此仅通过表6-2简介了几种典型芯片的情况。
(2)不同型号芯片的GPIO资源不同,片内相应的寄存器数量也不同。前面各寄存器描述中的小写x用于具体指定端口号。例如,在编程P0端口GPIO输入/输出属性时,IOxDIR要写成IO0DIR,其他寄存器依此类推。
(3)这些寄存器都是32位的,并用寄存器位号对应于端口管脚号。例如,IO0DIR[3:2]2
bit就对应于设置P0[3:2](即P0.3、P0.2)两管脚的输入/输出属性,其他寄存器依此类推。
(4)
ARM寄存器只能整体访问,不支持位访问(仅访问其中的某一位)操作。那么在需要对其中某一比特访问时,应使用“读—修改—写”操作序列来完成。例如,欲将P0.3管脚设置为输出属性时,应使用语句2:
IO0DIR=0x01<<3;
//语句1,会影响其他管脚的属性,不建议使用
IO0DIR=IO0DIR|(0x01<<3);
//语句2,安全的操作方式,建议使用的方式6.4.3GPIO应用举例
图6-10所示为某一GPIO应用示例,两个按键K1、K2分别用于控制发光二极管LED和蜂鸣器BEEP,当K1键按下时LED点亮,K2键按下时则BEEP鸣响,反之熄灭、静音。在设计中的GPIO资源分配如表6-3所示。图6-10GPIO应用示例完成预约功能的程序首先设置相应端口的I/O属性,对输出端口输出初始状态,而后周期扫描输入端口,分析处理输入、控制输出。代码清单如下:程序在对IOxDIR寄存器操作时,使用了“读—修改—写”方式,为的是不影响其他位的I/O属性。而对IOxSET、IOxCLR寄存器操作时,直接对其进行了赋值,也不会影响其他位的输出情况,这是因为这两个寄存器都是只有写1的对应位有动作,写0的对应位无效,对输出不会产生影响。因此,对IOxSET、IOxCLR寄存器即使是按字写入,也只对为1的对应位管脚置1或清0操作。6.5中断技术
6.5.1基本概念
在日常生活中,您或许遇到过这样的情况:您正在读书,听到电话振铃,您会在书中夹片书签,放下书去接电话。在接电话的过程中,又有急促的敲门声,您又会告诉电话对端:请稍等,有人敲门!您放下电话,接待敲门来访者,之后继续接听电话,电话接听完后返回书桌从你的书签处继续阅读。很显然,电话振铃打断了您的阅读,急促敲门又打断了您的接听电话,在急迫的临时事件处理完后,您又继续阅读。对应到计算机中的处理过程为:执行主程序(读书),有中断申请(振铃),中断服务1(接听电话),又有中断申请(敲门),中断服务2(接待来访),继续接听电话,继续读书。“读书—电话—敲门”事件的处理过程如图6-11所示。
在计算机系统中,也有许多类似的情况发生。引入中断的最初目的是为能更有效地处理系统中的输入/输出,提高系统的整体性能。随着计算机应用的发展,中断技术也不再局限于I/O处理。图6-11“读书—电话—敲门”事件处理过程在CPU执行程序的过程中,一些急迫事件(中断申请)引起CPU暂停正在执行的程序,转去执行该事件的特定处理程序(中断响应),执行完毕后,CPU再返回到被暂停的程序继续执行,这个过程称为中断处理过程。由于CPU正在执行的原程序是被暂停执行,所以称为中断。相对被中断的程序来说,中断处理程序是临时嵌入的一段程序,所以,一般将被中断的原程序称为主程序,而将中断处理程序称为中断服务程序(InterruptServiceRouting,ISR)。在这个过程中,任何能够引起计算机中断的事件统称为中断源。首先由中断源提出中断申请,CPU根据当时的情况再对中断申请做出相应的处理(中断响应)。主程序执行过程中被打断的地方称为断点,也就是主程序下一条待执行指令所在内存的地址。在计算机系统中,实现中断处理过程的技术称为中断技术,实现该技术而设置的软件、硬件的总体称为中断系统。在计算机系统中,不同的系统构成、不同的应用目的,中断源的数量和分类差别极大,中断系统的具体实现也各有特点,但其目的、效果和基本原理都是相似的。常见的中断源主要是外设,如打印机、网卡、显卡、声卡、硬盘、光驱等。也有一些特殊的中断源,如软件中断,它是一条专用的指令,该指令的执行会触发处理器进行一次软中断处理;再如处理器出错监测中断源,当处理器出错(比如除数为零、存储器访问失败)时产生中断申请。就中断概念的原本含义而言,中断是一个异步事件,这个事件什么时间发生是随机的,中断产生后即希望尽快得到CPU的处理,提高系统对事件处理的实时性和处理器的综合效率。软中断则是由安排在程序指令序列中的软中断指令(SWI)引发的,在程序执行到什么位置产生软中断是确定的,它是一个同步事件。软中断指令主要是为支持操作系统而设置的,也是为用户模式提供系统功能调用接口等一些特殊的需要而设置的。6.5.2中断系统的功能
中断技术重要而复杂,由计算机的软硬件共同完成。在计算机系统中,可能有多个中断源,各中断源的特性不同,各种中断的处理差别很大,一个较为完整的中断系统应具备如下基本功能:
(1)对各中断源的分别屏蔽控制。用户可以通过软件分别控制各个中断源可否申请中断。只有开放了中断的中断源可以发出中断申请,而被屏蔽了中断的中断源不能发出中断申请。计算机系统中,中断屏蔽一般分级控制,既可以分别屏蔽各个中断源,也可以在CPU端进行总屏蔽控制,称之为CPU开中断或CPU关中断。当CPU开中断时,CPU可以响应中断申请;反之,当CPU关中断时即使有中断产生,CPU也不响应中断请求。如图6-12所示,当中断屏蔽端加高电平“1”时,中断请求信号方可继续传递。图6-12分级的中断屏蔽控制
(2)中断源优先级的设置与管理。多个中断源同时向处理器申请中断时,约定高优先级的中断请求优先传递(逻辑上表现为高优先级的中断源会优先得到处理器的响应)。通常使用一个优先级排队电路,对各个中断源的中断申请信号按预设的优先级进行排队,将当前最高优先级的中断申请送向处理器。中断优先级管理如图6-13所示。中断系统优先级还有另一层含义:高优先级中断能嵌套到低优先级的中断服务过程中。不同机型的中断优先级的设置、管理与实现的方式差别较大,后面将逐步详述ARM中的中断技术和中断系统。图6-13中断优先级管理示意图图6-13中,n为中断控制通道号;INT_Rn为中断请求信号n;INT_Vn为中断向量(中断号)n,用于标示具体的中断源。将INT_Rn、INT_Vn等相关于第n组中断源的全部资源称为“中断控制通道n”(INT_CHn)。中断优先级排队逻辑按通道号INT_CHn大小优先级排队,例如,约定通道号n数值小的INT_CHn优先级高,那么INT_CH0的优先级高于INT_CH1,依此类推。此种方式下,用户可将需要优先响应的中断源编程安排在n数值小的中断控制通道(INT_CHn)中。
(3)中断向量的设置与传递。计算机系统中的多个中断源通常对应于不同的事件,这些事件都有各自的处理方式,即不同的中断对应各自的中断服务程序(ISR)。这些ISR最终都是以目标代码的形式存储在内存的不同地址区域,每个ISR在内存的首地址称为中断向量。实质上,CPU在响应各中断时需要获得该中断的中断向量,并以此找到对应于该中断的ISR再运行之。那么,在中断系统中就要有一套机制,以控制各个中断(和多个中断)发生时,如何向CPU传递相应的中断向量。
(4)断点与现场保护。CPU在响应中断时,自动记录下被中断程序的断点(即主程序中下一条待执行的指令位置),以便中断服务完成后能准确地返回到断点处继续执行主程序。有的CPU还能自动记录当前程序状态字(CurrentProgramStatusRegister,CPSR),有的机型称为PSW(ProgramStatusWord)或FLAG),以便ISR返回时,CPU的状态现场也得以恢复。6.5.3中断处理过程
对于一个中断源的中断处理过程一般包括5个步骤,即中断请求、中断响应、断点保护、中断处理和中断返回。
1.中断请求
中断处理过程中,首先要有中断请求(中断申请)。中断请求是中断源向CPU发出的事件请求处理的申请。中断源约定的事件发生时,将该物理事件转换成一个电信号传到CPU,告知CPU本中断源有事件产生,向CPU提出中断申请。中断系统可以对各个中断源的中断申请信号进行屏蔽
控制,控制(允许/禁止)中断信号能否传向CPU。其原理见图6-14。当屏蔽控制端为高电平时,中断源事件信号可以通过与门产生中断申请;反之,中断源事件信号将被阻止继续
传送。图6-14中断申请与屏蔽在中断系统中,有两个寄存器分别用于中断状态标志和屏蔽控制,因此对应地称之为中断状态标志寄存器和中断屏蔽控制寄存器。中断状态标志寄存器按位分别标志各个中断源有无中断申请,例如,“1”表示对应中断源有中断申请,“0”表示无中断申请。该寄存器各位由中断源事件置位;由CPU指令清0或响应中断自动清0。中断屏蔽控制寄存器按位分别用于各个中断源的屏蔽控制,通过编程中断屏蔽控制寄存器的对应位是“1”或“0”,即可实现对应中断源的屏蔽与否。
2.中断响应
CPU总是在每条指令执行的最后一个时钟周期检测有无中断请求,若CPU处于开中断状态,则可以检测到中断申请并对其进行处理,这个过程称为中断响应。中断响应更重要的工作是要获得相应的中断向量,转移到对应的ISR并运行之。找到中断服务程序的入口一般有两种方式:非向量中断方式和向量中断方式。
(1)非向量中断方式。这类中断控制器的硬件比较简单,有统一、固定的中断响应入口地址。处理器响应非向量中断时,转到固定的内存单元地址取指令执行,那么要想区分多个中断源,还需要对中断源的申请状态进一步地分析。通常要在统一的中断服务程序中读取中断状态标志寄存器,并分析是哪一个中断源发出的中断申请,而后再调用对应的功能处理程序。
(2)向量中断方式。这类中断控制器的硬件要复杂些,中断源在发出中断申请的同时也发出中断源的标志信息。不同的计算机系统中,中断源的标志信息可能不同,如ARM系统的中断源标志是中断向量(即服务程序入口地址),X86系统的中断源标志是中断号。处理器响应这类中断时,同时也得到了对应的中断源标志信息,直接得到或可以直接换算出中断服务程序的入口地址。显然,向量中断的响应速度快于非向量中断。
CPU响应中断的同时,硬件自动屏蔽CPU中断(在ISR中可以指令方式重新允许CPU中断),以保证中断逻辑的正确
性。不同的CPU中断系统,中断响应的具体操作差别较大,具体的中断响应过程需要查阅相关的技术资料,但原理上是一致的。
注意:指令的执行过程中可能产生中断,但也要等到本条指令执行后,才可能响应中断,即中断可能随机发生,但中断响应只能发生在指令与指令之间。中断响应是由硬件自动完成的。
3.断点保护
CPU一旦响应中断,需要对其正在执行程序的断点信息进行保护,以便在中断处理结束后仍能回到该断点处继续执行。不同的机型在断点保护时,其保护的内容及备份目标单元不尽相同,除了保护断点外,有的机型还会保护程序状态字。多数机型使用堆栈(Stack)作为备份目标单元(如X86CPU),也有的机型使用专用寄存器作为备份目标单元(如ARM)。断点保护是由硬件自动完成的。
4.中断处理
中断处理的过程实际上就是CPU执行中断服务程序(ISR)的过程。CPU执行ISR时多数情况会使用公共寄存器资源,我们知道CPU中的寄存器通常用于暂存程序运算中的临时数据,CPU的这些公共寄存器当前的数据情况称为数据现场,为了保证主程序的运算正确性,在ISR程序中首先需保护那些在ISR中要占用的寄存器数据(即数据现场),之后方可使用这些保护了的寄存器资源。这个CPU寄存器数据保护的过程称为中断现场保护。中断现场保护的目的在于:当ISR处理完时,CPU(各个寄存器)可以原样地回到主程序继续执行。整个ISR都由用户编程实现,包括中断现场保护和中断服务业务的编码。中断现场保护工作通过将寄存器中的数据备份到内存的某个特别区域完成。实际应用中,这个内存的特别区域就是处理器的堆栈,用堆栈保护中断现场。
5.中断返回
执行完中断服务程序后,需返回到原先被中断的程序,此过程称为中断返回。使用专用的中断返回指令完成中断返回操作。为了保障主程序的运算正确性,在中断返回前要先恢复主程序的数据现场。中断返回指令的作用实际上是恢复断点,也就是保护断点的逆过程。
中断处理过程如图6-15所示,具体为:在执行主程序Cn指令过程中发生中断,处理器执行完Cn指令后响应该中断,转入到对应的ISR;在ISR中首先保护数据现场(断点的保护由硬件自动完成,之后完成相关业务的处理,再恢复主程序的原数据现场,ISR返回到主程序Cn+1指令处继续主程序的执行。图6-15中断处理过程前面我们探讨了计算机中的中断技术基本原理,在实际应用中,不同处理器中断系统的具体构成和工作过程有较大的差别,但原理相似。读者应能依据基础理论知识,针对具体的应用研究处理器的中断系统细节。6.6ARM中断系统基础
6.6.1ARM中的中断源
不同的应用目标和系统构成,其中具体的存储器、外设接口、功能部件等资源不尽相同。主要应用于嵌入式系统应用的ARM系列微控制器为了满足多方面的应用需求,在器件中集成了多种常用资源,从而提高了系统的集成度和可靠性,减小了系统的体积和功耗。这些资源大多数都需要与CPU交互,CPU对这些资源的控制可以使用查询方式,也可以使用中断方式。中断方式情况下,这些资源事件被处理器响应的实时性好,并且CPU的效率提高了许多。这些能以中断方式受控于CPU的资源统称为ARM中断源。
LPC2000系列ARM微控制器中常见的中断源有WDT(看门狗)、Timer(定时器/计数器)、PWM(脉宽调制器)、UART(通用异步收发器)、I2C(I2C接口)、SPI(SPI接口)、RTC(实时时钟)、ADC(模/数转换器)、EINT(外中断)、SWI(软中断)等。为此,拥有不同种类和资源数量的ARM微控制器构成了ARM系列微控制器的各种型号。用户可以依据自己的资源需要,选取一款性价比较好的器件应用到自己的应用设计中。6.6.2ARM中的向量中断控制器
不同的计算机系统,其中断系统的具体实现差别较大。ARM系列嵌入式处理器的中断系统的主要硬件构成就是向量中断控制器(VectorInterruptController,VIC),它是中断源与处理器连接的桥梁,如图6-16所示。通过对VIC编程可对ARM器件的各个中断源进行中断屏蔽控制、中断优先级控制、中断分类控制、中断向量传递、状态查询等。如前所述,计算机中的各种资源对于编程者都被抽象成了寄存器组,VIC也被抽象成了43个寄存器,用户通过对这43个寄存器编程实现中断系统的各项功能,满足用户对终端控制的各种需要。图6-16ARM的向量中断控制器在ARM技术中,中断和异常是两个不同的概念。中断是异常的特殊方式,异常的概念比中断的含义要广泛些。ARM技术中,将所有能导致处理器打断程序正常运行的事件都归为异常,如处理器复位也归为异常的一种,显然不能将复位理解成中断。在ARM中包含7种异常:复位异常、SWI异常(软中断异常)、未定义指令异常、数据中止异常、指令中止异常、IRQ异常和FIQ异常。关于ARM处理器的各种异常及其响应参见2.5节。
ARM技术中特将所有外设导致的异常称为中断。在ARM中,所有的中断都被中断系统处理成IRQ或FIQ两种异常之一,人们习惯上将以IRQ异常方式传递、响应的中断称为IRQ中断,将以FIQ异常方式传递、响应的中断称为FIQ中断。IRQ中断又根据中断服务程序入口地址的定位方式,被进一步划分为向量IRQ中断和非向量IRQ中断。ARM中的向量IRQ中断和非向量IRQ中断都是通过IRQ异常完成响应的,只是在中断服务程序(ISR)入口地址的传递细节上有差别。
ARM处理器与VIC协作,按以下规则工作:
(1)通过对VIC编程可将各中断源配置成FIQ中断、向量IRQ中断或非向量IRQ中断。
(2)对于FIQ类中断,ARM会从一个固定的地址(0x1C)进入其相应的中断服务程序(ISR)。
(3)对于IRQ类中断,ARM会从一个固定的地址(0x18)进入其相应的IRQ异常处理。VIC自动区分该中断是向量IRQ中断还是非向量IRQ中断,并将IRQ异常映射到相应的ISR入口处。
(4)ARM硬件默认FIQ中断优先级高于IRQ中断优先级;在IRQ异常中,ARM中断系统硬件默认向量IRQ中断优先级高于非向量IRQ中断;对于向量IRQ中断和非向量IRQ中断,用户都可软件编程自定义各IRQ中断源的优先级。
(5)在响应IRQ、FIQ中断时,硬件自动将当前的PC值保存到相应模式的LR(R14_irq、R14_fiq)中,CPSR值保存到相应模式的SPSR(SPSR_irq、SPSR_fiq)寄存器中,供中断返回使用。6.6.3ARM的中断响应过程
ARM的FIQ中断、IRQ中断是ARM的FIQ和IRQ两种异常的特例。FIQ中断只用于极为紧迫的事件处理,通常系统中仅安排一个FIQ中断源,以保证在发生FIQ中断时,处理器能尽快地进入到对应事件的处理程序。所以FIQ中断处理过程直接对应于FIQ异常的处理,FIQ中断服务程序的入口地址就是0x0000001C。系统中其他的中断源都安排为IRQ中断,发生IRQ中断时,硬件自动将IRQ中断处理为IRQ异常,到0x00000018单
元取指执行,在ARM异常向量表中0x00000018单元存放的
是“LDRPC,[PC,#﹣0xff0]”指令,该指令的具体操作是:用[PC,#﹣0xff0]数据对PC赋值,操作结果也就是按[PC,#﹣0xff0]数据跳转。而 [PC,#﹣0xff0]数据就是VIC准备好的IRQ中断服务程序的入口地址,以此完成对不同IRQ中断的响应。关于ARM7的IRQ中断技术参见7.6节。6.6.4ARM的中断返回
在处理完中断后,要从ISR返回到主程序断点处继续执行。从前面的介绍可知,ARM处理器响应IRQ和FIQ中断时,硬件自动完成当前PC值到LR_irq(或LR_fiq)寄存器的备份以及CPSR寄存器值到SPSR_irq(或SPSR_fiq)寄存器的备份。中断返回就是要借助LR和SPSR中的数据备份返回到主程序断点处,继续主程序的执行。注意:在断点返回前,应先恢复数据现场。由于ARM处理器三级流水线的存在,在使用LR寄存器值作返回时还需要修正。
如图6-17所示,CPU正在执行主程序指令C2,对指令C3正在译码,对PC指向指令C4进行取指。此时发生了IRQ(或FIQ)中断,CPU硬件会自动完成PC数据到LR的备份操作,即LR中保存了C4指令的单元地址。如果在ISR返回时,直接使用LR恢复PC,那么主程序的指令C3就不能得到执行了,显然不符合程序执行的要求。为此,需要进行返回调整:PC=LR-#0x04。IRQ中断服务程序、FIQ中断服务程序使用指令“SUBSPC,R14,#4”返回主程序。图6-17LR的数据情况6.6.5ARM的外中断
ARM系统的外中断资源主要用于其他外部随机事件到系统的引入,如行程开关、烟雾报警器等。当这些事件发生时,外部其他电路将对应的物理事件转换成电信号,处理器能及时响应、处理。在ARM系统中,该功能也可用于将处理器从掉电模式唤醒。
外部中断是通过管脚(EINTx)输入符合要求的信号而触发的中断。LPC2000含有4个外部中断输入管脚(EINT0、EINT1、EINT2和EINT3)。中断触发的信号形式有两种:边沿触发和电平触发。边沿触发可分为上升沿触发和下降沿触发;电平触发可分为高电平触发和低电平触发,应用中可编程选择信号的形式和有效方式。边沿触发的特点是EINT管脚有一个有效沿输入就触发一次中断申请,直到被响应或通过指令撤销。电平触发的特点是中断申请时刻跟随EINT管脚输入电平的有效状态。深刻理解、灵活运用两种外中断信号形式,对掌握中断技术很有帮助,读者在后续学习中应多体会。使用电平触发方式时(如图6-18所示),在处理器响应外中断进入ISR处理返回主程序前,如果EINT不撤销,ISR返回主程序后还会被中断,如此会造成一个事件被处理多次。因此,注意在ISR中要撤销本次EINT管脚上的中断申请信号,以免一个中断事件被多次响应。使用边沿触发方式(如图6-19所示),可以比较好地解决此问题,只有上升沿或下降沿触发一次中断申请。图6-18电平触发方式图6-19边沿触发方式
1.ARM外中断资源相关寄存器
用于外中断控制的寄存器有5个,详见表6-4。
1) EXTINT——外部中断标志寄存器
EXTINT寄存器如图6-20所示。图6-20EXTINT寄存器本寄存器中4个比特EINT[3:0]分别用于标示对应的4个中断输入,当对应的输入端有有效输入信号时,相应的比特置“1”,通过VIC向处理器申请中断。向EINT[3:0]按位写入“1”清零对应位。电平方式下,写“1”清操作只有在管脚处于无效状态输入时才有效。一旦EINT[3:0]中的一位被置位并开始执行相应的外部中断服务程序,在ISR中必须以软件方式清零该位。本寄存器的高位EXTINT[7:4]保留,用户不要修改其中的数据。为此,建议使用“读—修改—写”方式操作EXTINT寄存器。
2) EXTMODE——外部中断方式寄存器
EXTMODE寄存器如图6-21所示。图6-21EXTMODE寄存器本寄存器中的EXTMODE[3:0]位分别用来选择对应的EINT3~EINT0脚触发信号方式是电平或边沿。“1”为边沿方式,“0”为电平方式。芯片复位值EXTMODE[3:0]=0b0000,即电平方式是默认方式。
3) EXTPOLAR——外部中断极性寄存器
EXTPOLAR寄存器如图6-22所示。图6-22EXTPOLAR寄存器本寄存器中的EXTPOLAR[3:0]位分别用来选择对应的EINT3~EINT0脚触发信号的极性。在电平方式中,EXTPOLAR寄存器用来选择相应管脚是高电平或低电平有效。在边沿方式中,EXTPOLAR寄存器用来选择管脚上升沿或下降沿有效。“1”为上升沿/高电平方式,“0”为下降沿/低电平方式。芯片复位值EXTPOLAR[3:0]=0b0000,即低电平方式/下降沿是默认方式。
2.一个简单的外中断示例
例6.1
用一个按键模拟一个外中断触发,用蜂鸣器BEEP模拟控制状态;每一次外中断事件翻转一次控制状态输出,模拟一个外中断发出、响应和处理过程。
设计中设置P0.16管脚用作EINT0功能,连接开关K,信号方式设置为低电平有效;P0.7管脚用作GPIO功能,输出属性连接BEEP,如图6-23所示。图6-23外中断应用完成设计功能的汇编程序代码见程序清单6-2。
ResetAddr DCDResetInit
UndefinedAddr DCDUndefined
SWI_Addr DCDSoftwareInterrupt
PrefetchAddr DCDPrefetchAbort
DataAbortAddr DCDDataAbort
Nouse DCD0
IRQ_Addr DCD0
FIQ_Addr DCDFIQ_Handler
;未定义指令
Undefined
BUndefined
;软中断
SoftwareInterrupt
BSoftwareInterrupt
;取指令中止
PrefetchAbort
BPrefetchAbort
;取数据中止
DataAbort
BDataAbort
;快速中断
FIQ_Handler
BFIQ_Handler
ResetInit
;设置IRQ中断模式堆栈
msrCPSR_c,#0xd2
ldrSP,=0x40000500
;设置管理模式堆栈
msrCPSR_c,#0xd3
ldrSP,=0x40000800
ldrr0,=PINSEL0
movr4,#0x00
strr4,[r0] ; P0[15:0]管脚用作GPIO ldrr0,=PINSEL1
movr4,#0x01 ; P0.16用作外中断0
strr4,[r0]
ldrr0,=IO0DIR ; P0.7管脚用作输出
movr4,#BEEP
strr4,[r0]
ldrr0,=IO0SET ;初始态BEEP静音
movr4,#BEEP
strr4,[r0] ldrr0,=EXTMODE
ldrr4,[r0]
andr4,r4,#0xf0
strbr4,[r0] ;电平方式中断
ldrr0,=EXTPOLAR
ldrr4,[r0]
andr4,r4,#0xf0
strbr4,[r0] ;低电平有效EINT0 ldrr0,=VICIntSelect
movr4,#0x00
strr4,[r0] ;中断源为IRQ类
ldrr0,=VICDefVectAddr
;装载中断服务程序入口地址
ldrr4,=IRQ_Eint0
strr4,[r0]
ldrr0,=EXTINT
mov
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 暨南大学《劳动经济学》2021-2022学年第一学期期末试卷
- 品质部IPQC工作总结
- 二零二四年度物联网平台运营合同2篇
- 科学计算语言Julia及MWORKS实践 课件 30-一阶有控倒立摆
- 2024年汽车销售顾问年终总结心得
- 2024保洁个人工作总结
- 老年脊柱手术
- 铁路安检培训
- 道路管理规范
- 躁狂患症护理查房
- 队伍思想分析报告研判情况
- 统编人教版六年级语文上册习作《围绕中心意思写》精美课件
- 2024年四川绵阳市游仙发展控股集团有限责任公司招聘笔试冲刺题(带答案解析)
- 厦门2024年福建厦门市公安文职人员服务中心招聘笔试历年典型考题及考点附答案解析
- 2023秋教科版二年级科学上册2-3《书的历史》(教案)
- 2024年《建筑节能》理论考试题库(浓缩500题)
- 颅脑损伤病人的护理课件
- 水塘租赁合同样本范本版
- 特种设备安全总监岗位职责
- 2024助贷居间合同
- 低压电工安全技术培训课件
评论
0/150
提交评论