8253具有3个独立的计数通道,采用减1计数方式。在门控信号有效时,每输入1个计数脉冲,通道作1次计数 *** 作。当计数脉冲是已知周期的时钟信号时,计数就成为定时。
一、8253内部结构
8253芯片有24条引脚,封装在双列直插式陶瓷管壳内。
1数据总线缓冲器
数据总线缓冲器与系统总线连接,8位双向,与CPU交换信息的通道。这是8253与CPU之间的数据接口,它由8位双向三态缓冲存储器构成,是CPU与8253之间交换信息的必经之路。
2读/写控制
读/写控制分别连接系统的IOR#和IOW#, 由CPU控制着访问8253的内部通道。接收CPU送入的读/写控制信号, 并完成对芯片内部各功能部件的控制功能, 因此, 它实际上是8253芯片内部的控制器。A1A0:端口选择信号,由CPU输入。8253内部有3个独立的通道,加上控制字寄存器,构成8253芯片的4个端口,CPU可对3个通道进行读/写 *** 作3对控制字寄存器进行写 *** 作。 这4个端口地址由最低2位地址码A1和A0来选择。如表所示。
3通道选择
(1) CS#——片选信号,由CPU输入,低电平有效,通常由端口地址的高位地址译码形成。
(2) RD#、WR#——读/写控制命令,由CPU输入, 低电平有效。RD#效时,CPU读取由A1A0所选定的通道内计数器的内容。WR#有效时,CPU将计数值写入各个通道的计数器中, 或者是将方式控制字写入控制字寄存器中。CPU对8253的读/写 *** 作。
4计数通道0~2
每个计数通道内含1个16位的初值寄存器、减1计数器和1个16位的(输出)锁存器。8253内部包含3个功能完全相同的通道,每个通道内部设有一个16位计数器,可进行二进制或十进制(BCD码)计数。采用二进制计数时, 写入的初值范围为0000H~0FFFFH,最大计数值是0000H,代表65536。 采用BCD码计数时,写入的初值范围为0000~9999,最大计数值是0000,代表10000。与此计数器相对应,每个通道内设有一个16位计数值锁存器。必要时可用来锁存计数值。(特别说明:8253计数器的值先减1再判断是否为0,为0就中断了,所以最大初始值为0,这样减1以后,不为0,所以为最大的,取决于CF标志位)
当某通道用作计数器时,应将要求计数的次数预置到该通道的计数器中、被计数的事件应以脉冲方式从CLK端输入, 每输入一个计数脉冲,计数器内容减“1”,待计数值计到“0”。 OUT端将有输出。表示计数次数到。当某个通道用作定时器时。 由CLK输入一定频率的时钟脉冲。根据要求定时的时间长短确定所需的计数值。并预置到计数器中,每输入一个时钟脉冲,计数器内容减“1”, 待计数值计到“0”。OUT将有输出,表示定时时间到。允许从CLK输入的时钟频在1~2MHz范围内。因此,任一通道作计数器用或作定时器用,其内部 *** 作完全相同,区别仅在于前者是由计数脉冲进行减“1”计数。 而后者是内时钟脉冲进行减“1”计数。作计数器时, 要求计数的次数可直接作为计数器的初值预置到减“1”计数器中。作定时器时, 计数器的初值即定时系数应根据要求定时的时间进行如下运算才能得到:
定时系数=需要定时的时间/时钟脉冲周期
①设置通道:向方式控制字寄存器端口写入方式选择控制字,用于确定要设置的通道及工作方式;
②计数/定时:向通道写入计数值,启动计数 *** 作;
③读取当前的计数值:向指定通道读取当前计数器值时,8253将计数器值存入锁存器,从锁存器向外提供当前的计数器值,计数器则继续作计数 *** 作。
④计数到:当计数器减1为0时,通过引脚OUTi向外输出“到”的脉冲信号。
计数初值输入存放在初值寄存器中,计数开始或重装入时被复制到计数器中。
锁存器在非锁存状态,其值随计数器的变化而变化;一旦锁存了计数器的当前值,直到锁存器值被读取后才能解除锁存状态。
5方式选择控制字
8253的初始化编程就是对其工作方式的确定。具体实现就是在8253上电后,由CPU向8253的控制寄存器写入一个控制字,就可以规定8253的工作方式、计数值的长度以及计数所用的数制等,另外根据要求将计数值写入8253的相应通道。
8253的一个方式控制字只决定一个技术通道的工作模式。
二、8253的通道工作方式
8253中各通道可有6种可供选择的工作方式, 以完成定时、计数或脉冲发生器等多种功能。8253的各种工作方式如下:
1方式0:计数结束则中断
工作方式0被称为计数结束中断方式。当任一通道被定义为工作方式0时, OUTi输出为低电平;若门控信号GATE为高电平,当CPU利用输出指令向该通道写入计数值WR#有效时,OUTi仍保持低电平,然后计数器开始减“1”计数, 直到计数值为“0”,此刻OUTi将输出由低电平向高电平跳变,可用它向CPU发出中断请求,OUTi端输出的高电平一直维持到下次再写入计数值为止。
在工作方式0情况下,门控信号GATE用来控制减“1”计数 *** 作是否进行。当GATE=1时,允许减“1”计数;GATE=0时,禁止减“1”计数; 计数值将保持GATE有效时的数值不变, 待GATE重新有效后,减“1”计数继续进行。
显然,利用工作方式0既可完成计数功能, 也可完成定时功能。当用作计数器时,应将要求计数的次数预置到计数器中,将要求计数的事件以脉冲方式从CLKi端输入, 由它对计数器进行减“1”计数,直到计数值为0,此刻OUTi输出正跳变, 表示计数次数到。当用作定时器时,应把根据要求定时的时间和CLKi的周期计算出定时系数,预置到计数器中。从CLKi,输入的应是一定频率的时钟脉冲,由它对计数器进行减“1”计数, 定时时间从写入计数值开始,到计数值计到“0”为止,这时OUTi输出正跳变,表示定时时间到。
有一点需要说明,任一通道工作在方式0情况下, 计数器初值一次有效,经过一次计数或定时后如果需要继续完成计数或定时功能,必须重新写入计数器的初值。
2方式1:单脉冲发生器
工作方式1被称作可编程单脉冲发生器。进入这种工作方式, CPU装入计数值n后OUTi输出高电平, 不管此时的GATE输入是高电平还是低电平, 都不开始减“1”计数,必须等到GATE由低电平向高电平跳变形成一个上升沿后,计数过程才会开始。与此同时,OUTi输出由高电平向低电平跳变,形成了输出单脉冲的前沿,待计数值计到“0”, OUTi输出由低电平向高电平跳变,形成输出单脉冲的后沿, 因此,由方式l所能输出单脉冲的宽度为CLKi周期的n倍。
如果在减“1”计数过程中, GATE由高电平跳变为低电乎,这并不影响计数过程,仍继续计数;但若重新遇到GATE的上升沿,则从初值开始重新计数, 其效果会使输出的单脉冲加宽,如教材图9-22(b)中的第2个单脉冲。
这种工作方式下,计数值也是一次有效,每输入一次计数值,只产生一个负极性单脉冲。
3方式2:速率波发生器
工作方式2被称作速率波发生器。进入这种工作方式, OUTi输出高电平,装入计数值n后如果GATE为高电平,则立即开始计数,OUTi保持为高电平不变; 待计数值减到“1”和“0”之间, OUTi将输出宽度为一个CLKi周期的负脉冲,计数值为“0”时,自动重新装入计数初值n,实现循环计数,OUTi将输出一定频率的负脉冲序列, 其脉冲宽度固定为一个CLKi周期, 重复周期为CLKi周期的n倍。
如果在减“1”计数过程中,GATE变为无效(输入0电平),则暂停减“1”计数,待GATE恢复有效后,从初值n开始重新计数。这样会改变输出脉冲的速率。
如果在 *** 作过程中要求改变输出脉冲的速率,CPU可在任何时候,重新写人新的计数值, 它不会影响正在进行的减“1”计数过程,而是从下一个计数 *** 作用期开始按新的计数值改变输出脉冲的速率。
4方式3:方波发生器
工作方式3被称作方波发生器。任一通道工作在方式3, 只在计数值n为偶数,则可输出重复周期为n、占空比为1:1的方波。
进入工作方式3,OUTi输出低电平, 装入计数值后,OUTi立即跳变为高电平。如果当GATE为高电平, 则立即开始减“1”计数,OUTi保持为高电平,若n为偶数,则当计数值减到n/2时,OUTi跳变为低电平,一直保持到计数值为“0”,系统才自动重新置入计数值n,实现循环计数。这时OUTi端输出的周期为n×CLKi周期,占空比为1:1的方波序列; 若n为奇数, 则OUTi端输出周期为n×CLKi周期,占空比为((n+1)/2)/((n-1)/2)的近似方波序列。
如果在 *** 作过程中, GATE变为无效,则暂停减“1”计数过程,直到GATE再次有效,重新从初值n开始减“l”计数。
如果要求改变输出方波的速率, 则CPU可在任何时候重新装入新的计数初值n,并从下一个计数 *** 作周期开始改变输出方波的速率。
5方式4:软件触发方式计数
工作方式4被称作软件触发方式。进入工作方式4,OUTi输出高电平。 装入计数值n后, 如果GATE为高电平,则立即开始减“1”计数,直到计数值减到“0”为止,OUTi输出宽度为一个CLKi周期的负脉冲。由软件装入的计数值只有一次有效,如果要继续 *** 作, 必须重新置入计数初值n。如果在 *** 作的过程中,GATE变为无效,则停止减“1”计数, 到GATE再次有效时,重新从初值开始减“1”计数。
显然,利用这种工作方式可以完成定时功能,定时时间从装入计数值n开始,则OUTi输出负脉冲(表示定时时间到),其定时时间=n×CLK周期。 这种工作方式也可完成计数功能,它要求计数的事件以脉冲的方式从CLKi输入,将计数次数作为计数初值装入后,由CLKi端输入的计数脉冲进行减“1”计数,直到计数值为“0”,由OUTt端输出负脉冲(表示计数次数到)。 当然也可利用OUTj向CFU发出中断请求。 因此工作方式4与工作方式0很相似,只是方式0在OUTi端输出正阶跃信号、方式4在OUTi端输出负脉冲信号。
6方式5:硬件触发方式计数
工作方式5被称为硬件触发方式。进入工作方式5, OUTi输出高电平, 硬件触发信号由GATE端引入。 因此,开始时GATE应输入为0, 装入计数初值n后,减“1”计数并不工作,一定要等到硬件触发信号由GATE端引入一个正阶跃信号,减“1”计数才会开始,待计数值计到“0”, OUTi将输出负脉冲,其宽度固定为一个CLKi周期,表示定时时间到或计数次数到。
这种工作方式下,当计数值计到“0”后, 系统将自动重新装入计数值n,但并不开始计数, 一定要等到由GATE端引入的正跳沿,才会开始进行减“1”计数, 因此这是一种完全由GATE端引入的触发信号控制下的计数或定时功能。如果由CLKi输入的是一定频率的时钟脉冲,那么可完成定时功能,定时时间从GATE上升沿开始,到OUTi端输出负脉冲结束。如果从CLKi端输入的是要求计数的事件,则可完成计数功能,计数过程从GATE上升沿开始,到OUTi输出负脉冲结束。GATE可由外部电路或控制现场产生,故硬件触发方式由此而得名。
如果需要改变计数初值, CPU可在任何时候用输出指令装入新的计数初值m,它将不影响正在进行的 *** 作过程, 而是到下一个计数 *** 作周期才会按新的计数值进行 *** 作。
从上述各工作方式可看出,GATE作为各通道的门控信号,对于各种不同的工作方式,它所起的作用各不相同。在8253的应用中,必须正确使用GATE信号,才能保证各通道的正常 *** 作。
7读取计数器的当前值
⑴直接读计数器:输出锁存器在非锁存状态会跟随计数器计数的变化而变化,直接读计数器是从锁存器得到计数器的当前值。但由于计数器处于工作状态,读出值不一定能稳定。
⑵先锁存再读取:①通过方式选择控制字对指定通道(SC1、SC0)的计数值锁入锁存器(RL1RL0=00), 锁存器一旦锁存了当前计数值,就不再随计数器变化直到被读取。②读计数器通道(有锁存器)。
可编程计数器与定时器8253有6种工作方式:(1) 方式0为计数结束产生中断;(2) 方式1为可编程单稳触发器;(3) 方式2为分频器;(4) 方式3为方波频率发生器;(5) 方式4为软件触发选通脉冲;(6) 方式5为硬件触发选通脉冲。
计数结束产生中断:当CLK端输入计数脉冲时,计数器能进行减1计数,减为0时,OUT端可输出高电平。可利用此高电平向CPU发中断请求,以实现定时中断处理。
可编程单稳触发器:当计数器工作时,利用GATE端输入的上升沿脉冲使OUT端开始变低电平,并开始作减1计数,若减至0,OUT端变高电平,形成一个单稳负脉冲,可利用此负脉冲作为某一电子应用电路的启动信号。
分频器:利用计数器的减1计数功能在OUT输出端产生一个其正、负脉冲宽度分别为(n-1)与1个输入脉冲时钟周期的分频脉冲信号。
方波频率发生器:利用计数器的减1计数功能在OUT端产生一个对称或基本对称的方波信号。可作为方波频率发生器使用。
软件触发选通脉冲是利用写入计数初值这个软件 *** 作来触发计数器工作的。
硬件触发选通脉冲是利用GATE端输入信号来触发的。
基于FPGA的可编程定时器/计数器8253的设计与实现
摘 要:本文介绍了可编程定时器/计数器8253的基本功能,以及一种用VHDL语言设计可编程定时器/计数器8253的方法,详述了其原理和设计思想,并利用Altera公司的FPGA器件ACEX 1K予以实现。
关键词:FPGA;IP;VHDL
引言
在工程上及控制系统中,常常要求有一些实时时钟,以实现定时或延时控制,如定时中断,定时检测,定时扫描等,还要求有计数器能对外部事件计数。要实现定时或延时控制,有三种主要方法:软件定时、不可编程的硬件定时、可编程的硬件定时器。其中可编程定时器电路的定时值及其范围可以很容易地由软件来确定和改变,功能较强,使用灵活。Intel的定时器/计数器为可编程定时器PIT,型号为8253,改进型为8254,就是为完成上述功能而设计出来的一种电路。
随着ASIC的发展,在实际工程中通用的8253PIT芯片表现出如下的不足:1 计数频率不够,8253计数速率最高2MHz,即使是其改进型8254也往往不能满足一些需要较高计数频率的工程。2 8253PIT没有复位信号,输出的初始状态不受控制。针对8253的这些局限性,在实际工程中往往需要重新设计8253,并把8253的部分功能作为一个独立的IP模块嵌入到设计中,以实现完成某种特定功能的ASIC。
8253的基本功能和内部结构
主要功能
每片内部包含有3个独立的16位计数通道;
每个计数器都可以按照二进制或二—十进制计数;
每个计数器的计数速率可高达2MHz;
每个计数通道有6种工作方式,可由程序设置和改变;
所有的输入/输出电平信号都与TTL兼容。
内部结构
8253的内部结构如图1所示。
1 数据总线缓冲器。这是8253与CPU数据总线连接的8位双向三态缓冲器,CPU通过数据总线缓冲器将控制命令字和计数初值写入8253芯片,或者从8253计数器中读取当前计数值。
2 读/写逻辑。这是8253内部 *** 作的控制部分。首先有片选信号CS的控制部分,当CS为高时,数据总线缓冲器处在三态,系统的数据总线脱开,故不能进行编程,也不能进行读写 *** 作。其次,由这部分选择读写 *** 作的端口(3个计数器及控制字寄存器),并控制数据传送的方向。
3 控制字寄存器。在8253初始化编程时,由CPU写入控制字以决定通道的工作方式。此寄存器只能写入而不能读出。实际上,8253的3个计数器通道都有各自的控制字寄存器,存放各自的控制字,初始化编程时,这3个控制字分三次共用一个控制端口地址写入各自的通道.它们是利用最高两位的状态不同来区分的。
4 计数器通道。包括计数器0、计数器1、计数器2。它们的结构完全相同,彼此可以按照不同的方式独立工作。每个通道包括:一个8位的控制寄存器;一个16位的计数初值寄存器;一个计数执行部件,他是一个16位的减法计数器;一个16位的输出锁存器。
每个通道都对输入脉冲CLK按二进制或二—十进制,从预置值开始减1计数。当预置值减到零时,从OUT输出端输出一信号。计数过程中,计数器受到门控信号GATE的控制。
8253的设计
根据8253的内部结构,设计8253主要分为两大部分:总线控制部分和定时/计数部分。
总线控制部分设计
这一部分主要完成数据的读/写,以及控制字的写入。用VHDL设计这部分前,应该了解8253的端口选择(见表1)和控制字(见图2)。
设计的关键在于对8253端口控制字的掌握。写信号到来时,首先要判断是控制字还是计数初始值。如果是初始值,其中先写低字节,再写高字节部分是重点,需要一个信号来判断写入的是新数据还是上一数据没写完的高字节部分.其他计数器的读/写大同小异。只要对8253的端口控制字了解清楚以及对读/写的时序有一定的了解,这一部分的逻辑很容易用VHDL语言描述出来.该进程可对外发出控制信号,表示控制字及数据写入完毕,可以进行计数器的计数 *** 作了。该控制信号可以作为下面介绍的计数部分的触发信号。
计数器部分设计
8253有3个独立的计数器,每个计数器有6种工作模式,完成不同的功能。现以方式4为例介绍VHDL设计,其他的可以在方式4基础上加以修改。
这种工作方式,当写入控制字后输出为高。当写入计数值后,再过一个时钟周期,计数执行部件获得计数初值,并开始减1计数。当计数到0后输出变低电平,此低电平一直维持一个时钟周期,然后又自动变为高电平,并一直维持高电平,计数器停止计数。这种方式计数是一次性的,只有输入新的计数值之后,才能开始新的计数。
下面介绍方式4的设计过程:
CPU写入控制字后,输出outs立即复位,方式4中复位后outs为高电平。CPU写入计数初值的下一个CLK脉冲,计数初值被送到计数执行部件并开始减1计数,又经过N个时钟周期后才输出一个负脉冲。当GATE=1时,允许计数,GATE=0时,禁止计数。这样就实现了方式4基本的软件触发功能。
if clk1'event and clk1='0' then ——时钟脉冲下降沿到来
if gate1='1' then ——门控位为1,允许计数
if ce1>"0000000000000001" then
ce1<=ce1-1;
——减1计数,ce为计数执行部件
elsif ce1="0000000000000001" then
out1<='0'; ——初值减到1时输出低电平
ce1<=ce1-1; ——继续减1
elsif ce1="0000000000000000" then
out1<='1'; ——初值减到0时输出高电平
end if;
elsif gate1='0' then
——门控位为0,禁止计数
null;
end if;
end if;
上面的小程序虽不完整但是却描述出了方式4的软件触发基本功能。若在计数过程中改变计数值,新值写入后的下一个CLK周期时,此计数值被写入计数执行部件并从新的计数值开始计数.如果写入的计数值是两个字节,那么写入第一个字节时计数不受影响,写入第二个字节后的下一个时钟周期,计数执行部件获得新值,并从新值开始重新计数,叫做软件再触发.软件再触发功能只要在上面的程序中加入相应的判断信号和控制信号即可实现。
完整的8253写过程流程
实际上完整的8253就是一个拥有多个进程的复杂结构体。读总线过程、写总线过程、每个计数器的6种工作方式都是一个独立的进程.进程之间是并行的,只要进程的敏感信号发生变化,该进程就被触发一次,而进程内部是按照时序顺序执行的。以写过程为例,写总线进程本身是靠敏感信号wr和cs来触发的,无论写入控制字还是写入计数初值后,写总线进程都会对外发出信号以表示某个计数器的控制字写入完毕或者某个计数器的某个工作方式的计数初值已经写入,可以进行计数了。而这些信号又相应的作为其他进程的敏感信号,进程之间的通信就是依靠这些信号来完成的。这些进程之间都是并发执行的,具体哪个进程被执行取决于控制字。图3给出了写过程的流程,读过程与之类似。
设计结果验证
本设计开发软件采用Altera公司的集成开发软件MAX+PLUS II 102完成。并用该公司的ACEX 1K系列FPGA芯片予以验证。
之所以选用ACEX 1K系列芯片,是因为它是一种低成本高密度的FPGA芯片系列,是首选的中规模器件产品。它具有如下特点:
ACEX 1K采用查找表(LUT)和EAB(嵌入式阵列块)相结合的结构,特别适用于实现复杂逻辑功能存储器功能,例如通信中应用的数字信号处理、多通道数据处理、数据传递和微控制等。
典型门数为1万到10万门,有多达49152位的RAM(每个EAB有4096位RAM)。
器件内核采用25V电压,功耗低,能够提供高达250MHz的双向I/O功能,完全支持33MHz和66MHz的PCI局部总线标准。
具有快速连续式、延时可预测的快速通道互连;具有实现快速加法器、计数器、乘法器和比较器等算术功能的专用进位链,以及实现高速多扇入逻辑功能的专用级连接。
通过仿真、综合,并下载到FPGA中进行验证,本设计可以很好地实现其功能。■
参考文献
1 曾繁泰,陈美金 VHDL程序设计
2 林明权 VHDL数字控制系统设计范例
汇编语言的科学定义,其实就是介于机器码(各种01)和高级语言(如C)之间的一种语言。你用C语言写一段程序,其实要在机器上运行的话,机器是不懂的,要经过编译器、汇编器编译,变成汇编,最终再变成机器码,机器根据这些机器码的01可以控制硬件电路完成你程序想执行的 *** 作。
1方式0:计数结束则中断
2方式1:单脉冲发生器 即可编程单脉冲发生器
3方式2:速率波发生器
4方式3:方波发生器
5方式4:软件触发方式计数
6方式5:硬件触发方式计数
详细资料请参阅:>
时钟频率 2MHz,欲得到周期 100ms (即 10Hz)的输出脉冲,需要分频。
分频系数=2,000,000 / 10=200,000。
即,计数器的初值,应该是 200,000。
至少需要两个计数器来完成。
一个计数 200、一个计数 1000,即可。
以上就是关于8253芯片的工作原理全部的内容,包括:8253芯片的工作原理、可编程计数器/定时器8253有哪几种工作方式、基于FPGA的可编程定时器/计数器8253的设计与实现等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)