专利名称:一种通用计时计数器的制作方法
技术领域:
本发明涉及计算机领域,尤其涉及计算机系统的的计数和计时系统。
目前,计算机在很多领域中得到了广泛的应用,在通讯领域中的应用尤为广泛。在计算机系统中,通用计时计数器(TIMER/COUNTER)是不可或缺的重要组成部分,目前经常采用的计数计时芯片是Intel公司生产的8254,另外ATMEL公司的AT91M63200等芯片内部的计数器也都是16位的,这些芯片都只能计到64k的计数长度,在很多情况下是无法满足要求的。为了增加计数长度,在计数器芯片所使用的内部时钟信号设立了多个选择端,这多个被选的时钟信号都是系统时钟的分频信号,由另外一个时钟产生器提供,这个时钟产生器位于系统时钟部件,只能向外提供几个不同频率的时钟,比如系统时钟的2分频,8分频,32分频,128分频,最大到1024分频信号。随着芯片集成度的进一步提高,8254后来被集成到CPU中,但是其框架结构一直都没有改变。由于16位的计数器只能计到64k个脉冲,当采用外部时钟计数时最多只能计64k个外部时钟信号,在很多应用是不够的;当采用内部时钟作为通用计时计数器的计数时钟的时候,系统时钟的数量虽然可以提高一些,但是分频时钟信号最多只有1024分频,所以即使使用内部时钟和内部的时钟分频器,最多也只能计64M个系统时钟脉冲;为了达到要求的比较长的计数时间,只能向CPU发出中断,通过CPU访问存储器的操作来增加计数时间;而且,当采用内部分频时钟的时候,不论这个时钟信号是作为计数器计器的计数时钟还是作为计数使能信号,由于计数的颗粒度比较大,所以计数的精度都比较低,在采用1024分频信号的情况下,虽然可计的最大系统时钟的脉冲数是64M个,但是计数是以1024个系统时钟的周期作为最小单位的,在很多有精度要求的应用上不能满足要求。对于和8254相兼容的通用计时计数器,因为内部沿用了以前的8位总线结构,所以对16位的内部计数器的编程要对其进行两次,而且对顺序有要求;对于其它的通用计时计数器,只要是采用16位计数器的结构,不论是写入计数值还是读出当前的计数值,编程的时候步骤都比较多。而且因为采用16位内部计数器,不同频率的时钟源有好几个,在内部就需要多路选择器,相应的控制逻辑就比较复杂。
本发明的目的是提供一种计数时间长、精度高、芯片设计和编程简单的通用计时计数器,以克服现有技术中通用计时计数器存在的计数时间短,编程复杂,芯片设计复杂,计数精度低等缺点。
为了实现上述目的,本发明构造了一个通用计时计数器,其特征在于,包括配置寄存器TCCFG、控制字寄存器TCCON、状态寄存器TCSTA、初值寄存器TCPVAL、内部计数器TCCOUNTER、选择器一、选择器二和32位总线接口;内部总线和所述的内部计数器TCCOUNTER都是32位宽度;32位外部总线通过32位总线接口与32位内部总线相连,32位内部总线和配置寄存器TCCFG、控制字寄存器TCCON、状态寄存器TCSTA、初值寄存器TCPVAL以及内部计数器TCCOUNTER相连;配置寄存器TCCFG的另一端连接至选择器一和选择器二;选择器一接收外部时钟信号、系统时钟信号和配置寄存器TCCFG的信号,输出时钟输入信号clkin,作为内部计数器TCCOUNTER的时钟;选择器二接收外部门控信号和配置寄存器TCCFG的信号,同时与电源端和地端相连接,输出门控信号gate,作为内部计数器TCCOUNTER的门控信号;内部计数器TCCOUNTER同时接收系统时钟信号和初值寄存器TCPVAL输出的信号,通过32位内部总线和其他各寄存器相连接。
从上述技术方案可以看出,本发明所构造的计数器计时器以32位为基础,各种操作都基于32位总线宽度,因此编程简单,读写控制容易;同时,由于采用的是32位的计数器,使得最大的计数数量能够多达4G,对于需要达到同一个较大的定时值,和以前的计时器计数器相比,采用本方法的计时器计数器将能够以更小的时间实现对精度的要求。如果采用100M的时钟频率,采用二进制计数可以以10ns的精度采样40秒的时间,如果采用同样的16位的计数器以10ns的精度计数,则只能计0.6毫秒的时间;如果16位的计数器也要达到40秒的采样时间,则其计时精度只能为0.6毫秒,可以看出,本发明的计数精度高、计数时间长,而且减少了对CPU的中断频率。另一方面,因为采用32位计数器,内部总线也是32位,写入计数初值和读出当前的计数值的时候都可一次操作完成,不需要以一定的顺序完成,也不需要先写入控制字来控制顺序,从而使得编程和电路设计大大简化。
下面结合附图对本发明作进一步描述;
图1是现有技术中的一种通用计时计数器原理图;图2是现有技术中的另一种通用计时计数器原理图;图3是本发明所构造的通用计时计数器原理图。
图1所示的是目前广泛使用的一种计数器多路选择器将一个时钟信号选择进去给计数器做时钟,然后计数器根据总线上写过来的计数初值在适当的条件下开始计数,到一定的情况下,改变输出信号的值,其中,计数器时钟可以是选择外部时钟,也可以是选择系统时钟的分频信号。由于内部总线是8位的,因此内部的16位计数器被分为两部分,一个是高位,一个是低位,从而计数器的初值也要分两次写,这样给读写操作带来很多不便,需要用较多的操作次数,还要配合适当的控制字。并且计数器是16位的,计数长度不够。
图2所示的是另一种计数器多路选择器将一个时钟信号选择进去给计数器做时钟,然后计数器根据总线上写过来的计数初值在适当的条件下开始计数,到一定的情况下,改变输出信号的值,其中,计数器时钟可以是选择外部时钟,也可以是选择系统时钟的分频信号。和图1不同的是,图2的计数器的内部总线是16位的,因此内部的16位计数器可以一次读写,而不象图1所示的计数器那样需要分两次,尽管如此,这种计数器还是有明显不足,同图1所示的计数器一样,也是16位的,计数长度不够。
从图1和图2所示的通用计时计数器原理图可以看出,现有的通用计时计数器中,内部的计数器都是16位的,只能计到64k的计数长度,无法满足要求,为了增加计数长度,在计数器芯片所使用的内部时钟信号需要设立多个选择端,这样也只能计到64k个脉冲,当采用外部时钟计数时,最多只能计64k个外部时钟信号,在很多应用是不够的;当采用内部时钟作为通用计时计数器的计数时钟的时候,能计的系统时钟的数量虽然可以提高一些,但是分频时钟信号最多只有1024分频,所以即使使用内部时钟和内部的时钟分频器,也只能计64M个系统时钟脉冲;通过向CPU发出中断的方式虽然可以增加计数时间;但是计数的精度比较低,在采用1024分频信号的情况下,虽然可计的最大系统时钟的脉冲数是64M个,但是计数是以1024个系统时钟的周期作为最小单位的,在很多有精度要求的应用上不能满足要求。对于和8254相兼容的通用计时计数器,因为内部沿用了以前的8位总线结构,所以对16位的内部计数器的编程要对其进行两次,而且对顺序有要求;对于其它的通用计时计数器,只要是采用16位计数器的结构,不论是写入计数值还是读出当前的计数值,编程的时候步骤都比较多。而且因为采用16位内部计数器,不同频率的时钟源有好几个,在内部就需要多路选择器,相应的控制逻辑就比较复杂。
图3所示的本发明所构造的通用计时计数器中,主要是采用了一个32位的计数器作为内部的计数器;而且内部总线也为32位,计数器的32位的写入总线和读出总线都直接连到32位的内部总线上;TCCFG为配置寄存器;TCCON为控制字寄存器;TCSTA为状态寄存器;TCPVAL为初值寄存器;TCCOUNTER为计数器,这些寄存器及计数器都是32位的。32位外部总线通过32位总线接口与32位内部总线相连,32位内部总线和配置寄存器TCCFG、控制字寄存器TCCON、状态寄存器TCSTA、初值寄存器TCPVAL以及内部计数器TCCOUNTER相连;配置寄存器TCCFG的另一端连接至选择器一和选择器二;选择器一接收外部时钟信号、系统时钟信号和配置寄存器TCCFG的信号,输出时钟输入信号clkin;选择器二接收外部门控信号和配置寄存器TCCFG的信号,同时与电源端和地端相连接,输出门控信号gate;内部计数器TCCOUNTER同时接收系统时钟信号和初值寄存器TCPVAL输出的信号,通过32位内部总线和其他各寄存器相连接。时钟输入信号clkin是用来给内部计数器TCCOUNTER做时钟的,但是为了使整个系统用同一个时钟(系统时钟),在本发明中并不是直接用时钟输入信号clkin作为时钟输入端,而是取其上升沿作使能信号用的。门控信号gate是作为内部计数器TCCOUNTER的门控信号;系统时钟是内部所有触发器的时钟端;配置寄存器TCCFG是控制通用计时计数器的配置的,它与选择器一和选择器二相连,目的是控制选择系统时钟还是外部时钟,以及门控信号的选择;控制字寄存器TCCON是连接到内部计数器TCCOUNTER上,用以控制计数器工作模式的工作模式以及计数值的类型(二进制还是十进制);状态寄存器TCSTA中有两位,一个是当前状态,是连在输出信号上的,还有一位是判断装载与否,是连在内部计数器TCCOUNTER的控制逻辑上的;TCPVAL是初值寄存器,用来存储外部总线上写过来的计数初值,TCPVAL还和内部计数器TCCOUNTER相连,当满足一定条件后,将这个计数初值输出到内部计数器TCCOUNTER上去;内部计数器TCCOUNTER是整个通用计时计数器的主体部分,除了配置寄存器TCCFG外,其他部分都和它有连线关系。当系统复位后,所有的寄存器的值都是0,通用计时计数器的时钟输入信号clkin是被禁止的,计数器不工作,计数器输出端为高电平。首先从32位内部总线上向控制字寄存器TCCON写入通用计时计数器的控制字,用以确定计数器的工作模式。在计数器复位后、写控制字寄存器TCCON之前,无论计数到多少,计数器的输出端都不会发生变化。在控制字写完的时候,根据工作模式的不同将输出端置高或置低;同时将计数器的一些内部信号同步复位,使计数器开始一次新的计数过程。此次同步复位时,只是复位内部一些控制信号,并不会复位计数器主体。计数器在写完控制字寄存器TCCON之后,并没有开始新的计数过程,只有等到计数初值装入到计数器以后,内部计数器TCCOUNTER根据设定的计数初值开始新的计数过程。计数初值装入计数器的条件有多种,根据工作模式的不同而不同,即使在一个模式下,也有多种装入情况,详细资料可以参照Intel8254的六种工作模式说明。在计数过程中,重新写计数初值或者是门控信号gate发生变化后,计数器该如何变化是和计数器的工作模式相关的。当计数器计到一定的数值时,输出端要发生相应的变化。计数器在计数的同时,还要对状态寄存器TCSTA不停的更新,保证读到的状态是当前的工作状态。TCCFG主要是控制时钟输入信号clkin端和门控信号gate的,这个寄存器可以在任意时刻改写,以方便软件控制计数器。外部总线有自身的读写时序,在经过32位总线接口转换后,变成片选信号和数据在同一个时钟周期内,同时还给外部总线提供应答信号。内部寄存器的片选信号是在总线接口部分对外部总线上的地址信号进行译码得到的。当外部总线读内部寄存器的状态的时候,总线接口还可以将内部寄存器的数据传递到外部总线上去,完成读操作。
当然,不是每次设置计数器都得先写控制字寄存器TCCON。在总线复位通用计时计数器后,如果开始使用计数器,必须先写一次控制字寄存器TCCON,用以确定工作模式,然后再写TCPVAL。如果写完一次控制字寄存器TCCON后,只改变计数初值,而不改变工作方式,就可以直接写TCPVAL。
权利要求
1.一种通用计时计数器,其特征在于,包括配置寄存器(TCCFG)、控制字寄存器(TCCON)、状态寄存器(TCSTA)、初值寄存器(TCPVAL)、内部计数器(TCCOUNTER)、选择器一、选择器二和32位总线接口;内部总线和所述的内部计数器(TCCOUNTER)都是32位宽度;所述的32位内部总线通过所述的32位总线接口与32位外部总线相连,同时和所述的配置寄存器(TCCFG)、控制字寄存器(TCCON)、状态寄存器(TCSTA)、初值寄存器(TCPVAL)以及内部计数器(TCCOUNTER)相连;所述的配置寄存器(TCCFG)的另一端连接至所述的选择器一和所述的选择器二;所述的选择器一接收外部时钟信号、系统时钟信号和所述的配置寄存器(TCCFG)的信号,输出时钟输入信号clkin,作为内部计数器(TCCOUNTER)的时钟;所述的选择器二接收外部门控信号和所述的配置寄存器(TCCFG)的信号,同时与电源端和地端相连接,输出门控信号gate,作为内部计数器(TCCOUNTER)的门控信号;所述的内部计数器(TCCOUNTER)同时接收系统时钟信号和所述的初值寄存器(TCPVAL)输出的信号,通过所述的32位内部总线与其他各寄存器相连接。
2.根据权利要求1所述的通用计时计数器,其特征在于,所述的控制字寄存器(TCCON)所选择的计数值类型包括二进制数和十进制数。
3.根据权利要求1所述的通用计时计数器,其特征在于,所述的状态寄存器(TCSTA)中有两个状态位,一位表示当前状态,连接至输出信号;另一位判断装载与否,与内部计数器(TCCOUNTER)相连接。
4.根据权利要求1所述的通用计时计数器,其特征在于,所述的配置寄存器(TCCFG)控制对系统时钟和外部时钟的选择以及对门控信号的选择。
5.根据权利要求1所述的通用计时计数器,其特征在于,所述的32位总线接口对32位外部总线进行时序转换、对内部各寄存器的地址解码以及传递总线数据。
全文摘要
本发明公开了一种应用于计算机领域中的通用计时计数器,包括配置寄存器TCCFG、控制字寄存器TCCON、状态寄存器TCSTA、初值寄存器TCPVAL和内部计数器TCCOUNTER;所述的内部计数器TCCOUNTER和内部总线都是32位宽度,其32位的写入总线和读出总线都直接连到32位的内部总线上;从而克服了现有技术中计数时间短、编程和芯片设计复杂、计数精度低的缺点,使得计数时间长、精度高、芯片设计和编程简单。
文档编号G06F1/16GK1365035SQ0110742
公开日2002年8月21日 申请日期2001年1月9日 优先权日2001年1月9日
发明者鹿甲寅, 冯凯武, 张明娟, 邹伟 申请人:深圳市中兴集成电路设计有限责任公司