微型计算机的制作方法

文档序号:6573132阅读:611来源:国知局
专利名称:微型计算机的制作方法
背景技术
发明领域本发明涉及有多个外围电路的微型计算机。
现有技术微型计算机包括中央处理单元(CPU)和各种外围电路,比如数据和程序存储器、输入/输出端口和定时器-计数器。微型计算机被划分成专用和通用模型,其中的专用模型常常叫做ASIC(专用集成电路)。
对于专用微型计算机,它的外围电路是根据具体应用来设计的,因此能够获得良好的处理性能。另一方面,为它新设计的部分需要额外的开发时间,因此开发时间紧的时候,有时候不可能为其中包括微型计算机的装置及时地开发这样的微型计算机。
设计通用微型计算机的目的是对它加以广泛应用,因此微型计算机具有各种功能。但是,这些功能和性能并不总是能够满足具体应用中所需要的指标。因此,首先需要选择满足所需指标的一种模型。但是很难判断模型的功能是否满足所需指标,模型选择不当可能会在程序的设计过程中需要改变要使用的微型计算机的模型,或者改变应用的指标。不管是哪一种方式,微型计算机的模型选择不当都会导致应用程序开发的延迟。
通用微型计算机通过多个外围电路的相互协作能够实现一定的智能。例如,有一种功能叫做“输入捕获”,它是通过定时器-计数器和输入/输出端口互相协作来实现的。
这一功能使得每次检测到外部输入信号的上升沿或者下降沿的时候,都将定时器的计数值储存在一个专用寄存器中。这样,这一功能能够用于测量外部输入信号维持高电平或者低电平的时间长度。
下面将参考图21描述如何测量外部输入信号的周期,例如其中的定时器工作在4MHz的系统时钟频率上,作为外部输入信号,输入一个脉冲,它维持1.5微秒的高电平,0.5微秒的低电平。每次外部输入信号EXT_IN电平上升或者下降的时候,定时器的计数值T都被存入一个专用寄存器R,然后计数值T被复位,接下来定时器再一次开始计数。
除此以外,每次外部输入信号EXT_IN电平上升或者下降的时候,都发出一个中断请求。在流程图如图22所示,由于外部输入信号EXT_IN而导致中断请求的时候所执行的软件程序中,首先检查(S801)这个中断请求是不是由一个外部输入信号EXT_IN的上升沿引起的。
如果原因是外部输入信号EXT_IN的一个上升沿(S801中的“对”),就将寄存器R中的值作为周期(以后叫做“低电平周期”)储存起来,在这一段时间内外部信号EXT_IN保持低电平(S802)。如果不是(S801中的“否”),就将寄存器R中的值作为外部输入信号EXT_IN维持高电平的周期(以后叫做“高电平周期”)储存起来(S803)。
在这里,定时器的计数值被反复地写入同一个寄存器,因此有必要在寄存器被一个新值覆盖之前保存这个寄存器中的值。在下面讨论的实例中,对于外部输入信号的高电平周期只有0.5微秒的时间用来保存。它们对应于系统时钟频率是4MHz的中央处理单元的两种状态,在这两种状态中,不可能跳到软件中断子程序的地址并执行完这个子程序。
在这种情况下,为了能够进行测量,有必要使用两个输入捕获功能。具体而言,要测量的信号被输入给两个输入/输出端口,每个都有一个输入捕获功能,用两个定时器来测量两个时间。下面将通过参考图23来描述这一点。
在输入它的外部信号EXT_IN1的每个上升沿或者是下降沿,一个输入捕获功能将一个定时器的计数值T1保存在一个寄存器R1中,然后计数值T1复位,定时器又开始计数。在输入它的外部输入信号EXT_IN2的每个下降沿,另外一个输入捕获功能将另一个定时器的计数值T2存入寄存器R2,然后计数值T2复位,定时器又开始计数。
此外,在外部输入信号EXT_IN1的每个上升沿或者下降沿,以及在外部输入信号EXT_IN2的每个下降沿,都发出一个中断请求。发出中断请求的时候执行的软件程序的流程图在图24和25中画出。
因为外部输入信号EXT_IN1发出中断请求的时候,如果导致中断请求的是外部输入信号EXT_IN1的上升沿(S901中的“对”),就将相应寄存器R1中的值作为低电平周期保存起来(S902)。另一方面,因为外部输入信号EXT_IN2而发出中断请求的时候,从对应的寄存器R2的值减去寄存器R1中保存的低电平周期的值得到的值被作为高电平周期保存起来(S1001)。
但是在这种方法中,除了一个外部定时器以外还需要另外一个输入/输出端口。除此以外,在专用微型计算机中,来自单个终端的信号可以被馈入不同的电路块。更加重要的是程序员需要很长的时间来想到这一方法。
即使程序员想到了这一方法,也需要有另外一个有输入捕获功能的空闲输入输出端口。在采用微型计算机的装置的开发过程中,在开发微型计算机程序的时候,在多数情况下电路,包括微型计算机的设计都已经确定。
由于这些原因,如果在程序的设计过程中需要改变微型计算机具有特殊功能的输入/输出端口的分配,就会影响整个装置的开发计划。此外,在选择微型计算机模型的阶段,很难预见对信号进行测量将需要具有这种特殊功能的两个输入/输出端口。
通过这种方式,将通用微型计算机用于包括特殊操作的装置的时候,会碰到难以预计的困难,它常常会导致装置的整个开发过程被拖延。
此外,没有足够的时间用于开发专用微型计算机的时候,很难判断通用微型计算机的外围电路功能是否能够满足这个装置作为最终产品的指标,如同日本专利申请公布号H5-127913所公开的一样,可以通过使用可编程门阵列来同时开发所需要的外围电路功能和所需要的程序。
但是,正是因为作为可编程门阵列的基础的原理,用一个来实现外围电路功能会使得电路面积比其它情况下更大。此外,事先并不知道所需要的外围电路功能,因此有必要预留一些门。这样做比专用微型计算机的成本更高。此外,可编程门阵列的制造需要特殊工艺,因此将它跟其它装置一起做在单独一个芯片上需要特殊技术。因此,到目前为止还没有将微型计算机结合到装置中这样的工艺能够进入实用。
如上所述,专用微型计算机需要很长的开发时间。另一方面,如果采用通用微型计算机,常常很难判断是否能够提供满足装置指标的外围电路功能。所以,在程序的开发过程中人们发现通用微型计算机不满足装置的指标,因此不可避免地要改变通用微型计算机的模型,或者改变装置的指标。
即使程序员想到一种方法,通过利用通用微型计算机的有限外围电路功能能够满足这个装置所要求的指标,不能总是保证只是通过编程来实现,可能需要改变整个装置的电路。除此以外,程序员需要很长的时间才能想到这样一个特殊解决方案。在这两种情况下,装置的整个开发周期都会发生拖延。
更进一步,在设计装置的时候,从制造成本的角度来看,在多数情况之下通用微型计算机模型的选择范围都是有限的。然而,如果只有用更高价格才能使模型满足装置所要求的指标,那么就没有选择余地。这样会导致成本更高。
发明简述本发明的一个目的是提供具有智能化外围电路功能的一种微型计算机,比如专用微型计算机而不是通用微型计算机,而不需要在专用微型计算机的开发过程中采用特殊制造技术和工艺,也不需要花费很长的时间。
为了以上目的,本发明提供有多个外围电路的一种微型计算机,它有一个连接电路,能够将外围电路互相连接起来,通过执行一个程序来控制它们。
在这种结构中,通过执行程序利用连接电路将一个一个的基本外围电路互相连接起来,就能够实现那些单个基本外围电路不能实现的智能功能。这样就能够象采用通用微型计算机那种情形一样避免选择具有冗余功能的模型。此外,只要微型计算机中结合进预计必不可少的基本外围电路,就没有必要仔细地设计外围电路。这样能够缩短整个装置的开发周期。但是除此以外,在专用外围电路中的微型计算机里,软件程序的开发需要一个面包板,本发明中的微型计算机允许在调试软件程序的时候确定外围电路。这样做也会缩短开发周期。
简而言之,本发明中的微型计算机能够实现智能外围电路功能,就象专用微型计算机中那样,而不是通用微型计算机那样,不需要使用特殊的制造技术和工艺,也不需要在开发专用微型计算机的时候花费很长时间。除此以外,可以在设计软件程序的时候改变外围电路,从而提高效率。
附图简述通过以下描述,同时参考优选实施方案和附图,会更加了解本发明的这些和其它目的和特征。在这些附图中

图1是采用本发明的微型计算机的一个框图;图2说明构成第一个定时器的一个向下计数器;图3说明构成第二个定时器的一个向下计数器;图4说明逻辑电路的结构;图5说明构成输入寄存器的闩锁电路;图6说明构成输出寄存器的闩锁电路;图7说明构成连接电路的一部分选择器;图8说明构成连接电路的其它选择器;图9说明输入图7所示选择器端子的信号和所选端子的信号的状态之间的关系;图10是构造具有预定功能外围电路的一个程序实例的流程图;图11说明通过执行图10所示程序构造的外围电路的结构;图12是控制图1所示外围电路的一个实例的流程图;图13是控制图11所示外围电路另外一个程序实例的流程图;图14说明图11所示外围电路的工作过程;图15是构造具有预定功能的外围电路另外一个程序实例的流程图;图16说明通过执行图15所示程序构造的外围电路的结构;图17是控制图16所示外围电路一个程序实例的流程图;图18是控制图16所示外围电路另外一个程序实例的流程图;图19是控制图16所示外围电路再一个程序实例的流程图;图20说明图16所示外围电路的工作过程;图21说明现有技术中测量外部输入信号的高电平周期和低电平周期的操作实例;图22是图21所示操作所需要的程序实例的一个流程图;图23是现有技术中测量外部输入信号的高电平周期和低电平周期的另外一个操作实例;
图24是图23所示操作所需程序实例的一个流程图;和图25是图23所示操作所需要的另外一个程序实例的流程图。
优选实施方案在这以后,将参考附图来描述本发明的一个实施方案。图1是采用本发明的微型计算机的一个框图。在这个图中,引用数字1代表一个中央处理单元,引用数字2代表一个输入寄存器,引用数字3代表一个输出寄存器,引用数字4代表一个连接电路,引用数字5代表第一个定时器,引用数字6代表第二个定时器,引用数字7代表一个逻辑电路,引用数字8代表一条数据总线。
如图2和图3所示,属于外围电路的第一个定时器5和第二个定时器6中的每一个都包括一个向下计数器。向下计数器按照以下方式工作。
计数值按照时钟信号同步地下降1(没有画出)。计数是在输入到端子“开始”的信号的上升沿启动的,在输入到端子“停止”的信号的上升沿停止的。从端子OUT0~OUT7输出的8比特信号代表当前计数值。当计数值发生溢出的时候(也就是说当计数值等于00(十六进制)的时候),端子“溢出”的输出转变成高电平。在本说明书中,(Hex)表示一个十六进制数。
在输入端子“复位”信号的上升沿进行复位。具体而言,计数值被设置成等于输入给端子IN0~IN7的8比特信号代表的值,从端子“溢出”输出的信号变成低电平。此外,只要输入端子“复位”的信号维持高电平,就忽略给端子“开始”的输入(也就是说,即使上升沿出现在端子“开始”的输入端的时候,也不开始计数)。
在这个实施方案中有一个电路,当第一个定时器5发生溢出的时候它发出一个中断请求,还有一个电路,当第二个定时器6发生溢出的时候,它也发出一个中断请求。
如图4所示,属于外围电路基本组成之一的逻辑电路7包括一个三输入或门701、一个触发器702、一个反相器703、一个与门704、一个与门705、一个或门706和一个反相器707。
或门701接收输入信号IN1、IN2和IN3。触发器702在它的数据输入端D接收从它的反相端Q’输出的信号,在它的时钟信号端CK接收从或门701输出的信号,在它的复位端R接收输入信号D_RESET。反相器703接收输入信号TRG。
与门704接收从或门701输出的信号,以及从反相器703输出的信号。与门705从触发器702的反相端Q’接收输入信号TRG和输出信号。
或门706从与门704接收输出信号,以及从与门705输出的信号。从或门706输出的信号作为一个输出信号OUT1输出,并且通过反相器707作为一个输出信号OUT2输出。
在以上逻辑电路图7中当输入信号TRG是低电平的时候,输出信号OUT1和OUT2反映了从或门701输出的信号。具体而言,如果有任何输入信号IN1、IN2和IN3是高电平,输出信号OUT1就是高电平,输出信号OUT2是低电平;如果所有输入信号IN1、IN2和IN3都是高电平,输出信号OUT1就是低电平,输出信号OUT2就是高电平。
相反,当输入信号TRG是高电平的时候,如果输入信号D_RESET是高电平,输出信号OUT1就是高电平,输出信号OUT2是低电平;如果输入信号D_RESET是低电平,输出信号OUT1和OUT2就在输入信号IN1、IN2和IN3中的任何一个从它们都是低电平的状态转变成高电平的时候被反相。
如图5所示,是一个外围电路的输入寄存器2包括一个32比特闩锁电路。输入寄存器2将32比特的信号INREG0读入INREG31,按照时钟信号(没有画出)输入它的端子D0~D31,并且当中央处理单元1准备从预先确定的特定地址读出的时候从一个地址译码器输出的信号CPU_RD是高电平的时候,从它的输出端子O0~O31将信号INREG0~INREG31的最新读出值输入给数据总线8。具体而言,当信号CPU_RD是高电平的时候,数据总线8上面32比特信号CPU_BUS0~CPU_BUS31的值变成等于输入寄存器2最新读出的信号INREG0~INREG31的值。
给输入存储器2分配一个地址F00000000(16进制)作为中央处理单元1的存储器区。当程序中中央处理单元1读分配的这个地址的时候,信号CPU_RD转变成高电平。
如图6所示,是一个外围电路的输出寄存器3包括一个32比特的闩锁电路。中央处理单元1要写入预先确定的特定地址的时候,如果从地址译码器输出的信号CPU_WR是高电平,输出寄存器3就按照时钟信号(没有画出)通过它的端子D0~D31读取数据总线8上面的32比特信号CPU_BUS0~CPU_BUS31,从它的输出端O0~O31输出最新读出的值。从输出寄存器3的端子O0~O31输出的32比特信号OUTREG0~OUTREG31被输入给连接电路4。
给输出寄存器3分配一个地址F0000004(十六进制),作为中央处理单元1的存储器区域。当中央处理单元1在程序中向分配的这个地址进行写入的时候,信号CPU_WR转变成高电平。当信号CPU_WR是低电平的时候,从输出寄存器3端子O0~O31输出的信号OUTREG0~OUTREG31保持不变。
连接电路4包括选择器401~412,如图7所示,还包括选择器413~416,如图8所示。在每个选择器401~412中,按照输入端子S0、S1和S2的信号状态,选择端子D0、D1、D2、D3、D4和D5之一,输入给所选端子的信号从端子OUT输出。图9说明输入给端子的信号和选中的信号的状态之间的关系。在这个图中,“1”表示高电平,“0”表示低电平。
但是如果输入给端子CS的信号是低电平,即是当输入给端子S0、S1和S2的信号的状态发生改变的时候,从端子D0、D1、D2、D3、D4和D5中间的选择保持不变。换句话说,从端子OUT的输出保持不变。
每个选择器401~412都在其端子D0、D1、D2、D3、D4和D5分别接收从第一个定时器的端子“溢出”输出的信号OVERFLOW1、从第二个定时器6的端子“溢出”输出的信号OVERFLOW2、逻辑电路7的输出信号OUT1和OUT2以及从微型计算机外面送进来,引起中断的外部输入信号EXT_IN/INT。在这里,引起中断的外部输入信号表示上升沿和下降沿在电路中导致中断请求的信号。
选择器401、402、...、412分别在它们的端子D4接收从输出寄存器3的端子O16输出的信号OUTREG16,从它的端子O17输出的信号OUTREG17,……,以及从它的端子O27输出的信号OUTREG27。
选择器401分别在它的端子S0、S1和S2接收数据总线上的信号CPU_BUS0、CPU_BUS1和CPU_BUS2。选择器402分别在它的端子S0、S1和S2接收数据总线上的信号CPU_BUS3、CPU_BUS4和CPU_BUS5。
选择器403分别在它的端子S0、S1和S2上接收数据总线8上的输出信号CPU_BUS6、CPU_BUS7和CPU_BUS8。选择器404分别在它的端子S0、S1和S2上接收数据总线8上的信号CPU_BUS9、CPU_BUS10和CPU_BUS11。
选择器405分别在它的端子S0、S1和S2上接收数据总线8上的输出信号CPU_BUS12、CPU_BUS13和CPU_BUS14。选择器406分别在它的端子S0、S1和S2上接收数据总线8上的信号CPU_BUS15、CPU_BUS16和CPU_BUS17。
选择器407分别在它的端子S0、S1和S2上接收数据总线8上的输出信号CPU_BUS18、CPU_BUS19和CPU_BUS20。选择器408分别在它的端子S0、S1和S2上接收数据总线8上的信号CPU_BUS21、CPU_BUS22和CPU_BUS23。
选择器409分别在它的端子S0、S1和S2上接收数据总线8上的输出信号CPU_BUS24、CPU_BUS25和CPU_BUS26。选择器410分别在它的端子S0、S1和S2上接收数据总线8上的信号CPU_BUS27、CPU_BUS28和CPU_BUS29。
选择器411分别在它的端子S0、S1和S2上接收数据总线8上的输出信号CPU_BUS0、CPU_BUS1和CPU_BUS2。选择器412分别在它的端子S0、S1和S2上接收数据总线8上的信号CPU_BUS3、CPU_BUS4和CPU_BUS5。
选择器401~410都在它的端子CS上接收CPU 1地址译码器的信号CPU_WR_S1。选择器411~412都在它的端子CS上接收CPU 1地址译码器输出的信号CPU_WR_S2。
选择器401~410被分配一个地址F000008(十六进制),作为中央处理单元1的存储器区域。当程序中中央处理单元1对分配的这个地址进行写操作的时候,信号CPU_WR_S1转变成高电平。
选择器411和412被分配一个地址F00000C(十六进制),作为中央处理单元1的存储器区域。当程序中中央处理单元1对分配的这个地址进行写操作的时候,信号CPU_WR_S2转变成高电平。
从选择器401的端子OUT输出的信号被用作信号START1,输入给第一个定时器5的端子“开始”。从选择器402的端子OUT输出的信号被用作信号RESET1,输入给第一个定时器5的端子“复位”。从选择器403的端子OUT输出的信号被用作信号STOP1,输入给第一个定时器5的端子“停止”。
从选择器404的端子OUT输出的信号被用作信号START2,输入给第二个定时器6的端子“开始”。从选择器405的端子OUT输出的信号被用作信号RESET2,输入给第二个定时器6的端子“复位”。从选择器406的端子OUT输出的信号被用作信号STOP2,输入给第二个定时器6的端子“停止”。
从选择器407、408、409、410和411的端子OUT输出的信号分别被用作给逻辑电路7的输入信号IN1、IN2、IN3、TRG和D_RESET。从选择器412的端子OUT输出的信号被用作信号EXT_OUT输入微型计算机。
每个选择器413~416都按照输入其端子S0的信号在端子D1_0、D1_1、……和D1_7的组合跟它的端子D2_0、D2_1、……和D2_7的组合之间选择和输出从它的输出端子O0~O7输入端子的所选组合的8比特信号。
具体而言,当送给端子S0的信号是低电平的时候,选择端子的组合D1_0、D1_1、……、和D1_7,当送给端子S0的信号是高电平的时候,选择它的端子D2_0、D2_1、……、和D2_7的组合。如果输入端子CS的信号是低电平,即使输入端子S0的信号的状态发生改变,对端子的两个组合的选择仍然保持不变。
选择器413和414分别在它们的端子D1_0、D1_1、……、D1_7、D2_0、D2_1、……和D2_7接收从输出寄存器OUTREG0、OUTREG1、……OUTREG7、OUTREG8、OUTREG9、……和OUTREG15输出的低16位信号。
选择器415和416分别在它们的端子D1_0~D1_7接收从第一个定时器5输出端子OUT0~OUT7输出的8比特信号DOUT1_0~DOUT1_7,分别在它们的端子D2_0~D2_7接收从第二个定时器6输出端OUT0~OUT7输出的信号DOUT2_0~DOUT2_7。
选择器413、414、415和416分别在它们的端子S0接收数据总线8上面的信号CPU_BUS0、CPU_BUS1、CPU_BUS2和CPU_BUS3。
选择器413~416都在它们的端子CS接收从中央处理单元1的地址译码器输出的信号CPU_WR_S3。选择器413~416被分配一个地址F0000010(十六进制)作为中央处理单元1的存储器区域。当中央处理单元1在程序中对分配的地址进行写操作的时候,信号CPU_WR_S3转变成高电平。
从选择器413的端子O0~O7输出的信号被用作信号DIN1_0~DIN1_7,输入给第一个定时器5的端子IN0~IN7。从选择器414的端子O0~O7输出的信号被用作信号DIN2_0~DIN2_7,输入给第二个定时器6的端子IN0~IN7。
从选择器415的端子O0~O7输出的信号被用作信号INREG0~INREG7,输入给输入寄存器2的端子D0~D7。从选择器416的端子O0~O7输出的信号被用作信号INREG8~INREG15,输入给输入寄存器2的端子D8~D15。
程序采用32比特的寄存器Reg0~Reg31(没有画出)跟数据总线8交换数据。具体而言,当寄存器Reg0中的位是“1”的时候,数据总线8上面的信号CPU_BUS0就是高电平,当寄存器Reg0变成“0”的时候,它就变成低电平。数据总线8上面的信号CPU_BUS0是高电平的时候寄存器Reg0中的值就是“1”,数据总线8上面的信号CPU_BUS0是低电平的时候就是“0”。寄存器Reg1和数据总线8上面的信号CPU_BUS1之间的关系相同,寄存器Reg2和数据总线8上面的信号CPU_BUS2之间的关系也相同,……,寄存器Reg31和数据总线8上面的信号CPU_BUS31也相同。
图10是一个程序流程图,这个程序用于构造具有预定功能的外围电路。首先,按照以下方式设置寄存器Reg0~Reg29Reg0=1,Reg1=1,Reg2=0,Reg3=0,Reg4=0,Reg5=1,Reg6=0,Reg7=1,Reg8=0,Reg9=0,Reg10=1,Reg11=0,Reg12=0,Reg13=0,Reg14=1,Reg15=1,Reg16=1,Reg17=0,Reg18=1,Reg19=0,Reg20=1,Reg21=0,Reg22=0,Reg23=1,Reg24=0,Reg25=0,Reg26=1,Reg27=0,Reg28=0,以及Reg29=1(S101)。
下一步,要访问的地址在连接电路4的选择器401~410中设置。具体而言,对地址F000008(十六进制)进行写入访问(S102)。这样使得输入选择器401~410端子CS的信号CPU_WR_S1变成高电平,从而切换选择器401~410选中的信号。
下一步,按照以下方式设置寄存器Reg0~Reg2Reg0=0,Reg1=0,Reg2=1(S103)。接下来,要访问的地址在连接电路4的选择器411中设置。具体而言,对地址F00000C(十六进制)进行写入访问(S104)。这就使得输入选择器411端子CS的信号CPU_WR_S2变成高电平,从而切换选择器411选中的信号。
作为S101~S104中操作的结果,逻辑电路7的反相器707输出的信号OUT2、输出寄存器3的端子O17输出的信号OUTREG17以及逻辑电路7的或门706输出的信号OUT1,被分别用作第一个定时器5的端子“开始”的输入信号START1、端子“复位”的输入信号RESET1和端子“停止”的输入信号STOP1。
除此以外,逻辑电路7或门706的输出信号OUT1、输出寄存器3端子O20的输出信号OUTREG20以及逻辑电路7反相器707的输出信号OUT2被分别用作给第二个定时器6的端子“开始”的输入信号START2、给端子“复位”的输入信号RESET2和端子“停止”的输入信号STOP2。
除此以外,外部输入信号EXT_IN/INT、输出寄存器3端子O23的输出信号OUTREG23和端子O24的输出信号OUTREG24、端子O25的输出信号OUTREG25和端子O26的输出信号OUTREG26被分别用作逻辑电路7或门701的输入信号IN1、IN2和IN3、反相器703和与门705的输入信号TRG以及触发器702端子R的输入信号D_RESET。
下面按照以下方式来设置寄存器Reg0~Reg3Reg0=0,Reg1=1,Reg2=0,Reg3=1(S105)。接下来将要访问的地址设置在连接电路4的选择器413~416中。具体而言,对地址F0000010(十六进制)进行写入访问(S106)。这样就将输入选择器413~416的端子CS的信号CPU_WR_S3变成高电平,作为S105和S106中的操作结果,现在将输入寄存器3的端子O0~O7输出的信号OUTREG0~OUTREG7用作给第一个定时器5的端子IN0~IN7的输入信号DIN1_0~DIN1_7,将输出寄存器3的端子O8~O15输出的信号OUTREG8~OUTREG15用作给第二个定时器6的端子O8~O15的输入信号DIN2_0~DIN2_7,将第一个定时器5的端子OUT0~OUT7的输出信号DOUT1_1~DOUT1_7用作给输入寄存器2的端子D0~D7的输入信号INREG0~INREG7,第二个定时器6的端子OUT0~OUT7的输出信号DOUT2_1~DOUT2~7被用作输入寄存器2的端子D8~D15的输入信号INREG8~INREG15。这样就构成了图11所示的外围电路。
下一步将寄存器Reg0~Reg7的值全部设置为“1”,寄存器Reg8~Reg15的值全部设置成“1”,寄存器Reg17的值设置成“1”,寄存器Reg20的值设置成“1“”,寄存器R23的值设置成“0”,寄存器R25的值设置成“0”,寄存器R26的值设置成“1”(S107)。
下一步将要访问的地址设置在输出寄存器3中。具体而言,对地址F0000004(十六进制)进行写入操作(S108)。它使得给输出寄存器3的输入信号CPU_WR变成高电平,使输出寄存器3在数据总线8上读取信号。
作为S107和S108中进行的操作的结果,在第一个和第二个定时器5和6中,给端子IN0~IN7的输入全部是高电平,给端子“复位”的输入是高电平。此外,在逻辑电路7中,或门701的两个输入端而不是外部输入信号EXT_IN都是低电平,给触发器702的端子R的输入是高电平,给反相器703的输入和给与门705的一个输入是高电平。
这样,每次外部信号EXT_IN/INT上升的时候,给第一个定时器5的端子“开始”的输入以及给第二个定时器6的端子“停止”的输入也上升。此外,每次外部信号EXT_IN/INT下降的时候,给第一个定时器5的端子“停止”的输入以及给第二个定时器6的端子“开始”的输入也上升。
但是,由于给第一个定时器5的端子“复位”的输入以及给第二个定时器6的端子“复位”的输入都是高电平,第一个和第二个定时器5和6都是复位状态,因而不会进行计数。
图12画出了这个程序的一个流程图,这个程序用于测量外部输入信号EXT_IN/INT的高低电平周期。首先将寄存器中Reg17的值设置为“0”,寄存器Reg20中的值设置成“0”,寄存器Reg23中的值设置成“0”,寄存器Reg24中的值设置成“0”,寄存器Reg25中的值设置成“0”,寄存器Reg26中的值设置成“1”(S201)。下一步,要访问的地址被设置在输出寄存器3中。具体而言,对地址F0000004(十六进制)进行写入访问(S202)。
作为这一操作的结果,在逻辑电路7中,给或门701的两个输入而不是外部输入信号EXT_IN是低电平,给触发器702端子R的输入是高电平,给反相器703的输入和与门705的一个输入是高电平。此外,对第一个和第二个定时器5和6的端子“复位”的输入是低电平,这样第一个和第二个定时器5和6从复位状态恢复过来。
这样,第一个定时器5进入一种状态,它在外部输入信号EXT_IN/INT的下降沿从计数值FF(十六进制)开始计数,在外部输入信号EXT_IN/INT的上升沿停止计数。一方面,第二个定时器6进入一种状态,它在外部输入信号EXT_IN/INT的上升沿从计数值FF(十六进制)开始计数,在外部输入信号EXT_IN/INT的下降沿停止计数。
图13说明开始测量外部输入信号EXT_IN/INT的高低电平周期以后,在外部输入信号EXT_IN/INT的上升沿或者下降沿发出中断请求的时候,要执行的程序的一个流程图。首先,在输入寄存器2中设置要访问的地址。具体而言,对地址F0000000(十六进制)进行读访问(S301)。下一步,检查中断请求是不是外部信号EXT_IN/INT的上升沿(S302)。
如果在步骤S302中发现一个上升沿(S302中的“对”),就将寄存器Reg0~Reg7中的值保存在执行软件程序的时候使用的RAM之类中(S303)。接下来,寄存器Reg0~Reg7中的值全部设置成“1”,寄存器Reg17中的值设置成“1”,寄存器Reg20中的值设置成“0”,寄存器Reg23中的值设置成“0”,寄存器Reg24中的值设置成“0”,寄存器Reg25中的值设置成“0”,寄存器Reg26中的值设置成“1”(S304)。
下面在输出寄存器3中设置要访问的地址。具体而言,对地址F0000004(十六进制)进行写入访问(S305)。接下来将寄存器Reg17中的值设置为“0”(S306)。再将要访问的地址设置在输出寄存器3中(S311)。
相反,如果在S302中出现一个上升沿(S302中的“否”),寄存器Reg8~Reg15中的值就被保存到执行软件程序的时候要使用的RAM之类中(S307)。下一步,寄存器Reg8~Reg15中的值全部被设置成“1”,寄存器Reg17中的值被设置成“0”,寄存器Reg20中的值被设置成“1”,寄存器Reg23中的值被设置成“0”,寄存器Reg24中的值的设置成“0”,寄存器Reg25中的值被设置成“0”,寄存器Reg26中的值的设置成“1”(S308)。
下面将要访问的地址设置在输出寄存器3中。具体而言,对地址F0000004(十六进制)进行写入访问(S309)。寄存器Reg20中的值被设置成“0”(S310)。要访问的地址被设置在输出寄存器3中(S311)。
执行上述程序的时候,第一个定时器5的计数值T1,第二个定时器6的计数值T2,寄存器Reg0~Reg7中的值和寄存器Reg8~Reg15中的值随着外部输入信号EXT_IN/INT变化,如图14所示。在这里假设外部输入信号EXT_IN/INT的低电平周期是0.5微秒,它的高电平周期是1.5微秒,第一个和第二个定时器5和6工作在时钟频率4MHz上。
具体而言,当外部输入信号EXT_IN/INT上升的时候,第一个定时器5的计数值T1被存入寄存器Reg0~Reg7,然后保存寄存器Reg0~Reg7中的值,接下来暂时让第一个定时器5复位,使它的计数值T1等于FF(十六进制)。在这里,在外部输入信号EXT_IN/INT的上升沿,第一个定时器5停止计数,第二个定时器6从计数值FF(十六进制)开始计数。
相反,当外部输入信号EXT_IN/INT的电平下降的时候,第二个定时器6的计数值T2被存入寄存器Reg8~Reg15,然后保存寄存器Reg8~Reg15中的值,计算第二个定时器6被暂时复位,将它的计数值T2设置成FF(十六进制)。在外部输入信号EXT_IN/INT的下降沿,第二个定时器6停止计数,第一个定时器5从计数值FF(十六进制)开始计数。
在上面描述的工作过程中,外部输入信号EXT_IN/INT电平上升的时候保存的值是低电平周期,外部输入信号EXT_IN/INT电平下降的时候保存的值是高电平周期。
如上所述,在这个实施方案中的微型计算机里,通过执行一个程序将一个一个的基本外围电路(也就是第一个定时器5、第二个定时器6和逻辑电路7)利用连接电路4互相连接起来,就能够测量外部输入信号EXT_IN的高低电平周期。
在这里,用两个定时器来测量外部输入信号EXT_IN的高低电平周期,但这两个定时器是用具有中断功能的单独一个输入端口来控制的。也就是说,不需要多个输入端口来测量单个信号。
此外,跟前面参考图21描述的现有技术相比,储存在寄存器中的测量结果由于处理时间不够而被下一个测量结果覆盖的风险较小。从这两点能够看出,能够构造具有智能功能的外围电路而没有能够跟专用微型计算机的外围电路相比拟的最小冗余。
图15是构成具有预定功能外围电路程序流程图的另外一个实例。首先,按照以下方式设置寄存器Reg0~Reg29Reg0=1,Reg1=1,Reg2=0,Reg3=0,Reg4=0,Reg5=1,Reg6=0,Reg7=0,Reg8=1,Reg9=0,Reg10=0,Reg11=0,Reg12=0,Reg13=0,Reg14=1,Reg15=0,Reg16=0,Reg17=1,Reg18=0,Reg19=0,Reg20=0,Reg21=1,Reg22=0,Reg23=0,Reg24=0,Reg25=0,Reg26=1,Reg27=0,Reg28=0,以及Reg29=1(S401)。
下一步将要访问的地址设置在连接电路4的选择器401~410中。具体而言,对地址F0000008(十六进制)进行写入访问(S402)。这样就将输入选择器401端子CS的信号CPU_WR_S1变成高电平,切换选择器401~410选择的信号。
下一步按照以下方式设置寄存器Reg0~Reg5Reg0=0,Reg1=0,Reg2=1,Reg3=0,Reg4=1,Reg5=0(S403)。接下来在连接电路4的选择器411和412中设置要访问的地址。具体而言,对地址F000000C(十六进制)进行写入访问(S404)。这就使输入选择器411和412端子CS的信号CPU_WR_S2变成高电平,切换选择器411和412选中的信号。
作为S401~404中操作的结果,逻辑电路7反相器707的输出信号OUT2和输出寄存器3端子O17和O18的输出信号OUTREG17和OUTREG18被分别用作第一个定时器5端子“开始”的输入信号START1、端子“复位”的输入信号RESET1和端子“停止”的输入信号STOP1。
此外,第一个定时器5端子“溢出”的输出信号OVERFLOW1、输出寄存器3的端子O20的输出信号OUTREG20和端子O21的输出信号OUTREG21被分别用于第二个定时器6端子“开始”的输入信号START2、端子“复位”的输入信号RESET2和端子“停止”的输入信号STOP2。
此外,第一个定时器5端子“溢出”的输出信号OVERFLOW1、第二个定时器6端子“溢出”的输出信号OVERFLOW2、输出寄存器3端子O24的输出信号OUTREG24、端子O25的输出信号OUTREG25和端子O26的输出信号OUTREG26被分别用于逻辑电路7或门701的输入信号IN1、IN2和IN3、反相器703和与门705的输入信号TRG以及触发器702端子R的输入信号D_RESET。此外,逻辑电路7或门706的输出信号OUT1被用作外部输出信号EXT_OUT。
接下来,寄存器Reg0和Reg1被按照以下方式设置Reg0=0和Re0g1=1(S405)。然后,在连接电路4的选择器413~416中设置要访问的地址。具体而言,对地址F0000010(十六进制)进行写入访问(S406)。这样就将输入给选择器413~416的端子的信号CPU_WR_3变成高电平,切换选择器413~416选中的信号。
作为S405和S406中的操作结果,输出寄存器3端子O0~O7的输出信号OUTREG0~OUTREG7被用作第一个定时器5端子IN0~IN7的输入信号DIN1_0~DIN1_7,输出寄存器3端子O8~O15的输出信号OUTREG8~OUTREG15被作为第二个定时器6端子IN0~IN7的输入信号DIN2_0~DIN2_7。这样就构成了图16所示的外围电路。
下一步,寄存器Reg0~Reg7的值被设置成06(十六进制),寄存器Reg8~Reg15中的值被设置成02(十六进制),寄存器Reg17中的值被设置成“1”,寄存器Reg18中的值被设置成“0”,寄存器Reg20中的值被设置成“1”,寄存器Reg21中的值被设置成“0”,寄存器Reg24中的值被设置成“0”,寄存器Reg25中的值被设置成“1”,寄存器Reg26中的值被设置成“1”(S407)。
下一步在输出寄存器3中设置要访问的地址。具体而言,对地址F0000004(十六进制)进行写入访问(S408)。这样就将输入寄存器3的输入信号CPU_WR变成高电平,并且使输出寄存器3读取数据总线8上的信号。
作为S407~S408中的操作结果,在它们的端子IN0~IN7分别接收值06(十六进制)和02(十六进制)的第一个和第二个定时器5和6,它们的端子“复位”的输入变成高电平。此外,在逻辑电路7中,或门701的三个输入都是低电平,触发器702端子R的输入是高电平,反相器703的输入和与门705的一个输入都是高电平。于是,第一个和第二个定时器5和6是复位状态,它们的计数值分别设置在06(十六进制)和02(十六进制)。此外,外部输出信号EXT_OUT保持高电平。
图17是一个程序流程图,这个程序用于开始输出具有预定高低电平周期的脉冲,作为输出信号EXT_OUT。首先,将寄存器Reg17中的值设置为“0”,寄存器Reg18中的值设置成“0”,寄存器Reg20中的值设置成“0”,寄存器Reg21中的值设置成“0”,寄存器Reg24中的值设置成“1”,寄存器Reg25中的值设置成“1”,寄存器Reg26中的值设置成“0”(S501)。
下一步在输出寄存器3中设置要访问的地址。具体而言,对地址F0000004(十六进制)进行写入访问(S502)。接下来,将寄存器Reg24中的值设置成“0”(S503)。然后在输出寄存器3中设置要访问的地址(S504)。
作为这些操作的结果,第一个和第二个定时器5和6端子“复位”的输入被反相成低电平,这样第一个和第二个定时器5和6从复位状态恢复过来。此外,在逻辑电路7中,给或门701的一个输入被翻转成高电平,然后返回低电平,另外触发器702端子R的输入被翻转成低电平。这样,外部输出信号EXT_OUT被翻转成低电平。另外,第一个定时器5端子“开始”的输入被翻转成高电平,这样就使得第一个定时器5从计数值06(十六进制)开始计数。
在那以后,第一个定时器5的计数值发生溢出的时候,第一个定时器5端子“溢出”的输出翻转成高电平,第二个定时器6端子“开始”的输入和逻辑电路7或门701的一个输入翻转成高电平。这样,第二个定时器6从计数值02(十六进制)开始计数。另外,外部输出信号EXT_OUT翻转成高电平,第一个定时器5的端子“开始”的输入翻转成低电平。
第一个定时器5的溢出会导致中断请求。出现中断请求的时候,执行流程图如图18所示的程序。首先,寄存器Reg0~Reg7中的值被设置成04(十六进制),寄存器Reg17中的值被设置成“1”,寄存器Reg18中的值被设置成“0”,寄存器Reg20中的值被设置成“0”,寄存器Reg21中的值被设置成“0”,寄存器Reg24中的值被设置成“0”,寄存器Reg25中的值被设置成“1”,寄存器Reg26中的值被设置成“01”(S601)。
下一步,在输出寄存器3中设置要访问的地址。具体而言,对地址F0000004(十六进制)进行写入访问(S602)。下一步,寄存器Reg17中的值被设置成“0”(S603)。接下来,在输出寄存器3中设置要访问的地址(S604)。
作为这些操作的结果,在第一个定时器5中,将输入给端子IN0~IN7的值保持在04(十六进制),端子“复位”的输入变成高电平然后又变成低电平。这样,第一个定时器5暂时复位,于是它的计数值被设置成04(十六进制)。另外,第一个定时器5的端子“溢出”的输出被翻转为低电平,这样就将逻辑电路7或门701的所有三个输入变成低电平。
在那以后,当第二个定时器6的计数值发生溢出的时候,第二个定时器6端子“溢出”的输出翻转成高电平,逻辑电路7或门701的一个输入翻转成高电平。结果,外部输出信号EXT_OUT翻转成低电平。另外,第一个定时器5端子“开始”的输入翻转成高电平,这样就使得第一个定时器5从计数值04(十六进制)开始计数。
第二个定时器6的溢出导致一个中断请求。发生中断请求的时候,执行流程图如图19所示的程序。首先,寄存器Reg8~Reg15中的值被设置成0A(十六进制),寄存器Reg17中的值被设置成“0”,寄存器Reg18中的值被设置成“0”,寄存器Reg20中的值被设置成“1”,寄存器Reg21中的值被设置成“0”,寄存器Reg24中的值被设置成“0”,寄存器Reg25中的值被设置成“1”,寄存器Reg26中的值被设置成“0”(S701)。
接下来,在输出寄存器3中设置要访问的地址。具体而言,对地址F0000004(十六进制)进行写入访问(S702)。下一步将寄存器Reg20中的值设置成“0”(S703)。在输出寄存器3中设置要访问的地址(S704)。
作为这些操作的结果,在第二个定时器6中,将输入给端子IN0~IN7的值保持为0A(十六进制),端子“复位”的输入变成高电平,然后又变回低电平。这样,第二个定时器6暂时复位,使它的计数值被设置成0A(十六进制)。另外,第二个定时器6端子“溢出”的输出翻转成低电平,这样就将逻辑电路7或门701的所有三个输入变成低电平。
执行上述程序的时候,第一个定时器5的计数值T1,第二个定时器6的计数值T2,寄存器Reg0~Reg7的值,寄存器Reg8~Reg15的值,外部输出信号EXT_OUT按照图20所示的方式改变。在这里假设第一个和第二个定时器5和6工作在时钟频率4MHz上。
首先,在刚刚执行图15所示程序的初始状态中,外部输出信号EXT_OUT保持高电平。此外,第一个和第二个定时器是复位状态,它们的计数值分别设置在06(十六进制)和02(十六进制)。执行图17所示的程序的时候,见图20中的字母“A”,外部输出信号EXT_OUT翻转成低电平,第一个定时器5从计数值06(十六进制)开始计数。
1.5微秒以后,第一个定时器5发生溢出。这样,执行图18所示的程序,结果,如图20中的字母“B”所示,外部输出信号EXT_OUT翻转成高电平。此外,第二个定时器6从计数值02(十六进制)开始计数。另外,第一个定时器5复位,它的计数值设置为04(十六进制)。
0.5微秒以后,第二个定时器6发生溢出。这样,执行图19所示的程序,结果,如同图20中的字母“C”所示,外部输出信号EXT_OUT翻转成低电平。此外,第一个定时器5从计数值04(十六进制)开始计数。另外,第二个定时器6复位,它的计数值设置为0A(十六进制)。
1.0微秒以后,第一个定时器5发生溢出。于是执行图18所示的程序,结果,如同图20中的字母“D”所示,外部输出信号EXT_OUT翻转成高电平。此外,第二个定时器6从计数值0A(十六进制)开始计数。另外,第一个定时器5复位,它的计数值被设置为04(十六进制)。
2.5微秒以后,第二个定时器6发生溢出。于是执行图19所示的程序,结果,如同图20中的字母“E”所示,外部输出信号EXT_OUT翻转成低电平。此外,第一个定时器5从计数值04(十六进制)开始计数。另外,第二个定时器6复位,它的计数值设置为0A(十六进制)。
如上所述,在这个实施方案中的微型计算机里,通过执行一个程序用连接电路4将一个一个的基本外围电路(也就是第一个定时器5、第二个定时器6和逻辑电路7)连接起来,就能够产生具有预定高低电平周期的脉冲作为外部输出信号EXT_OUT。
在这个实施方案中,提供了基本外围电路第一个定时器5、第二个定时器6和逻辑电路7。但是,也可以用其它的通用外围电路替换它们,或者添加其它外围电路。除此以外,还可以改变从外围电路读/写数据的电路的个数、比特长度、地址转换形式等。更进一步,也可以改变通过利用连接电路从外围电路选择输入/输出,例如输入/输出端子的个数和比例,地址变换的形式,比特组等等。
权利要求
1.一种有多个外围电路的微型计算机,包括一个连接电路,它能够将多个外围电路互相连接起来,通过执行一个程序来控制。
2.权利要求1的微型计算机,其中的连接电路包括一个选择器,从多个输入中选择一个,然后按照程序给出的数据输出选中的输入。
3.权利要求1的微型计算机,其中通过执行程序将数据输入写入外围电路的电路是作为外围电路之一提供的。
4.权利要求1的微型计算机,其中通过执行程序从外围电路读取数据输出的电路是作为外围电路之一提供的。
5.权利要求1的微型计算机,其中从微型计算机外面输入信号的电路是作为外围电路之一提供的。
6.权利要求1的微型计算机,其中将微型计算机内部产生的信号输出给外界的电路是作为外围电路之一提供的。
7.权利要求1的微型计算机,还包括通过利用连接电路控制多个外围电路之间的互相连接,来实现预先确定的外围电路功能的装置。
全文摘要
包括多个外围电路的一种微型计算机有一个连接电路,它能够通过执行一个程序来控制这些外围电路的互连。这样做能够实现智能外围电路功能,比如跟专用微型计算机而不是通用微型计算机有关的那些,而不需要特殊制造技术或者工艺,或者花费很长的时间来开发专用微型计算机。
文档编号G06F15/78GK1362674SQ01143298
公开日2002年8月7日 申请日期2001年12月26日 优先权日2000年12月26日
发明者后吕忠广 申请人:夏普公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1