(57)【要約】【課題】汎用タイマカウンタとコンペアレジスタとでインターバルタイマを実現するタイマ回路において、ソフトウェア処理によってコンペアレジスタの値を更新すると、ＣＰＵが他の優先順位の高い処理を行なっている場合にはインターバルタイマによる割り込み間隔が大きくずれることになりソフトバグを起こす可能性がある。【解決手段】汎用タイマカウンタとコンペアレジスタとでインターバルタイマを実現するタイマ回路において、インターバル時間を示す値が設定された幅レジスタと、タイマカウンタの値と幅レジスタの値とを加算する加算器をさらに設け、タイマカウンタとコンペアレジスタの値が一致したときに、加算器の加算値をコンペアレジスタに供給し新たなコンペアレジスタ値として設定する。これにより、コンペアレジスタの値はソフトウェア処理を介することなく設定される。【選択図】      図１
2004171040.tif 000002
【特許請求の範囲】
【請求項１】
クロック信号に応じてカウントするタイマカウンタと、コンペアレジスタと、前記タイマカウンタの値と前記コンペアレジスタに設定された値とを比較し一致したときに一致信号を出力する比較器と、インターバル時間を示す値が設定された幅レジスタと、前記タイマカウンタの値と幅レジスタに設定された値とを加算する加算器とを有し、前記一致信号に応じて前記加算器から出力される加算値を前記コンペアレジスタに設定することを特徴とするタイマ回路。
【請求項２】
前記タイマ回路は、前記加算器から出力される加算値と前記コンペアレジスタに設定されている値とが供給されており、前記一致信号が活性化されているときには前記加算値を前記コンペアレジスタに供給し、前記一致信号が活性化されていないときには前記コンペアレジスタに設定されている値を前記コンペアレジスタに供給する選択回路をさらに有することを特徴とする請求項１記載のタイマ回路。
【請求項３】
前記コンペアレジスタはクロック信号に応じて前記選択回路から供給された値が設定されることを特徴とする請求項２記載のタイマ回路。
【請求項４】
前記タイマ回路は、ＣＰＵからのアクセス命令を受け取るＣＰＵアクセス制御回路をさらに備え、前記コンペアレジスタ設定回路は、前記アクセス命令に応じて前記加算器から出力される加算値を前記コンペアレジスタに設定することを特徴とする請求項１記載のタイマ回路。
【請求項５】
前記タイマ回路は、外部トリガ信号を受け取り前記外部トリガ信号のエッジを検出する外部エッジ検出回路をさらに備え、前記コンペアレジスタ設定回路は、前記外部エッジ検出回路の検出結果に応じて前記加算器から出力される加算値を前記コンペアレジスタに設定することを特徴とする請求項１記載のタイマ回路。
【請求項６】
クロック信号に応じてカウントするタイマカウンタと、比較器と、複数のコンペアレジスタと、前記複数のコンペアレジスタに対応して設けられた複数のコンペアレジスタ設定回路とからなるタイマ回路であって、前記コンペアレジスタ設定回路それぞれは、インターバル時間を示す値が設定された幅レジスタと、前記タイマカウンタのカウント値と前記幅レジスタの値とを加算する加算器と，前記比較器により前記タイマカウンタのカウント値と前記コンペアレジスタに設定されたコンペア値とが比較され一致したときに出力される一致信号に応答して前記加算器の出力を前記コンペアレジスタに設定することを特徴とするタイマ回路。
【請求項７】
前記複数のコンペアレジスタ設定回路に設けられた幅レジスタのそれぞれは異なるインターバル時間を示す値が設定されていることを特徴とする請求項６記載のタイマ回路。
【請求項８】
クロック信号に応じてカウントするタイマカウンタと、複数のコンペアレジスタと、前記タイマカウンタの値と前記複数のコンペアレジスタのそれぞれの値とを比較し一致したときにそれぞれ一致信号を出力する比較器と、前記複数のコンペアレジスタに対応して設けられた複数の幅レジスタと、前記タイマカウンタの値と一致した値が格納されたコンペアレジスタに対応して設けられた幅レジスタの値を選択し前記タイマカウンタの値に加算する加算器と、前記複数のコンペアレジスタに対応して設けられ前記一致信号に応じて前記加算器の出力を前記コンペアレジスタに設定する複数のコンペアレジスタ設定回路とを有することを特徴とするタイマ回路。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、マイクロコンピュータ等に内蔵されているタイマ回路に関し、特に一定間隔で割り込みを入れるインターバルタイマを実現するタイマ回路に関する。
【０００２】
【従来の技術】
ひとつのタイマカウンタと複数のコンペアレジスタを搭載している汎用タイマにて、インターバルタイマを実現する場合、一般的に、コンペアレジスタ及び汎用タイマカウンタはバスを介して中央処理装置（ＣＰＵ）と接続されており、ソフトウェア処理によってこれらをインターバルタイマとして動作させている。（例えば、特許文献１参照。）特許文献１では、タイマカウンタのカウント値とコンペアレジスタのコンペア値が一致し一致信号が出力されると、ＣＰＵは一致信号に応じてタイマ回路の割り込みルーチンを起動する。このタイマ回路の割り込みルーチンにおいて、コンペアレジスタに設定されていた値にインターバル時間を加算したものを新たなコンペアレジスタの値として設定し、割り込みルーチンを終了するものが開示されている。このようにソフトウェアで処理することによりインターバルタイマとして動作することになる。
【０００３】
ところが、汎用タイマカウンタのカウント値とコンペア値が一致したときに、他の優先順位の高い処理が行なわれており、一致信号が出力されたときに割り込みルーチンが起動できない場合が考えられる。このような状態を図５を参照して説明する。
【０００４】
このインターバルタイマにおいて、コンペアレジスタに値Ａがコンペア値として設定されているとする。また、このインターバルタイマによって、タイマカウンタのカウント値の間隔Ａごとに割り込み信号が発生されるものとする。また、タイマカウンタは、複数のインターバル時間の割り込みを入れるタイマ回路として動作させるために、間隔Ａよりも大きい値までカウントできるもので構成されている。
【０００５】
まず、タイマカウンタがカウントアップし、カウンタ値がコンペア値Ａと等しくなる（ア）の時点にて、当該インターバルタイマからの割り込み信号が発生する。ＣＰＵはこの割り込み信号に応答してタイマ回路の割り込みルーチンを起動する。ところが、（ア）の時点で、ＣＰＵが他の優先順位の高い処理を実行している場合には、この割り込みルーチンを起動することができない。かくして、（ア）の時点で生じた割り込み信号に対する割り込みルーチンは該優先順位の高い処理の終了後に行なれることとなる。すなわち、該優先順位の高い処理が（イ）にて終了したとすると、その後、（ア）の時点で生じた割り込み信号に対するタイマ回路の割り込みルーチンが行なわれ、それまで設定されていたコンペア値に間隔Ａを加算した値をコンペア値として更新する処理が行なわれるのである。しかし、この時点でタイマカウンタの値が更新されたコンペア値（２Ａ）を上回っていた場合、インターバルタイマによって入れられる割り込み信号は、タイマカウンタがオーバーフローし再びカウンタ値がコンペア値と等しい値２Ａを示すまで発生しないこととなってしまう。これにより、インターバルタイマによる割り込みの間隔が大きくずれることとなり、結果、ソフトバグが引き起こされる可能性がある。
【０００６】
このような状態を回避するために、割り込みルーチンが起動された時点のタイマカウンタ値を読み出し、読み出されたタイマカウンタ値に対してインターバル時間を加算し、この加算値を新たなコンペアレジスタ値として更新することが考えられる。しかし、このために読出、加算、更新の最低３命令を処理することになり、ソフトウェアの処理時間が長くなってしまう。その結果、ソフトウェアでの処理能力が低下するという問題点が生じる。また、ＣＰＵでの処理速度に比べタイマカウンタのカウントアップ動作が速い場合には、カウント値を読み出すタイミングが遅くなりインターバルの間隔がずれてしまうという問題が生じる。
【０００７】
特許文献１には、タイマカウンタの値とコンペアレジスタに設定されたインターバル時間の値とを比較し一致すると、一致検出回路から一致信号が出力され、この一致信号によりタイマカウンタがクリアされる技術が開示されている。これにより、タイマカウンタの値がコンペアレジスタに設定されたインターバル時間の値だけ歩進するたびにクリアされるため、ＣＰＵの割り込みルーチンが不要となり、ソフトウェアの実行時間の短縮を図ることができる。しかしながら、インターバル時間を複数設定するインターバルタイマとして利用することはできない。
【０００８】
【特許文献１】
特開平１１−９５８６４号公報
【０００９】
【発明が解決しようとする課題】
以上のように、インターバルタイマをソフトウェア処理で実現すると、インターバルタイマのための割り込みルーチンよりも優先度の高い処理が行なわれていた場合に、インターバルタイマによる割り込みの間隔が大きくずれることによるソフトバグを引き起こすという課題が存在する。
【００１０】
また、割り込みルーチンにおいて、割り込みルーチンが起動された時点でタイマカウンタ値を読み出し、読み出されたタイマカウンタ値に割り込み間隔を加算し、加算した値をコンペアレジスタに更新するという処理を行なうことにすると、割り込みルーチンでの処理時間が長くなり、そのためにソフトウェアでの処理時間が長くなり、インターバルタイマを設けたことによりソフトウェア処理能力が低下するという課題が存在する。また、ソフトウェアでの処理時間が長くなることによって、インターバル時間にばらつきが生じるという課題が存在する。
【００１１】
本発明の目的は、複数のインターバル時間を設定することができるインターバルタイマとして動作するタイマ回路において、ソフトバグを引き起こさないタイマ回路を提供することにある。また、ソフトウェア処理能力を低下させないタイマ回路を提供することにある。また、インターバル時間のばらつきが少ないインターバルタイマを実現するタイマ回路を提供することにある。
【００１２】
【課題を解決するための手段】
本発明によるタイマ回路は、クロック信号に応じてカウントするタイマカウンタと、コンペアレジスタと、タイマカウンタの値とコンペアレジスタに設定された値とを比較し一致したときに一致信号を出力する比較器と、インターバル時間を示す値が設定される幅レジスタと、タイマカウンタの値と幅レジスタの値とを加算する加算器と、一致信号に応じて加算器から出力される加算値をコンペアレジスタに設定することを特徴とする。
【００１３】
すなわち、本発明によるデータ処理装置は、ＣＰＵと、ＣＰＵとバスを介して接続されたタイマ回路とを備え、タイマ回路は、クロック信号に応じてカウントするタイマカウンタと、コンペアレジスタと、タイマカウンタの値とコンペアレジスタに設定された値とを比較し一致したときに一致信号を出力する比較器と、インターバル時間を示す値が設定される幅レジスタと、タイマカウンタの値と幅レジスタの値とを加算する加算器とを有し、一致信号に応答してＣＰＵが処理を行なっているか否かにかかわらず加算器の出力をコンペアレジスタに設定することを特徴とする。
【００１４】
以上のように、本発明によれば、タイマカウンタ値とインターバル時間とが加算された値が一致信号に応じてＣＰＵが処理を行なっているか否かにかかわらずコンペアレジスタに供給される。すなわち、コンペアレジスタの値は一致信号に応答して自動的に設定することができる。よって、コンペアレジスタの値はソフトウェア処理を介することなく設定することができる。
【００１５】
【発明の実施の形態】
本発明の好適な実施の形態について、図１〜図４を用いて説明する。
【００１６】
（第１の実施の形態）
図１を参照して、第１の実施の形態について説明する。
【００１７】
図１は、データ処理装置に含まれる複数の割り込み間隔で割り込みを入れるインターバルタイマを実現するタイマ回路であり、データ処理装置に含まれる図示しない中央処理装置（ＣＰＵ）とバスを介して接続されている。タイマ回路１００は、ＣＰＵにバス１０を介して接続されており、タイマカウンタ１１と、コンペアレジスタ１２ａ、１２ｂと、それぞれ異なるインターバル時間でコンペアレジスタのコンペア値を設定する第１及び第２のコンペアレジスタ設定回路１３ａ、１３ｂと、コンペアレジスタに設定された値とタイマカウンタの値とを比較し両者が一致したときに一致信号を出力する比較器１４と割り込み制御回路１５とで構成されている。
【００１８】
タイマカウンタ１１は、図示されていない入力クロック信号に応じてカウントアップし、ＣＰＵによりバス１０を介して初期値が設定される。コンペアレジスタ１２ａ、１２ｂは、入力クロック信号に応じて供給されたデータを格納するレジスタであって、バスを介して初期値が設定される。
【００１９】
コンペアレジスタ設定回路１３ａ、１３ｂの構成は実質同一であるので、第１のコンペアレジスタ設定回路１３ａについて説明する。なお、図１において同一の構成要素は同一の参照番号で示す。
【００２０】
第１のコンペアレジスタ設定回路１３ａは、インターバル時間を示す値が設定された幅レジスタ１６と、幅レジスタ１６に設定された値とタイマカウント値とを加算する加算器１７と、加算器１７の加算結果をコンペアレジスタ１２に供給するタイミングを発生するタイミング生成回路とで構成される。幅レジスタ１６は、コンペアレジスタ１２と同様にバスを介して初期値が設定される。
【００２１】
タイミング生成回路は、選択器１８及び選択器１９とからなる。選択器１８は、比較器から出力される一致信号に応じて選択信号を出力し、選択器１９は、選択信号に応じて加算器１７の加算結果及びコンペアレジスタ１２に設定されているコンペア値のいずれかの値を選択しコンペアレジスタ１２に供給する。すなわち、選択信号が活性状態のときには加算器１７の加算結果をコンペアレジスタ１２に供給し、選択信号が非活性状態ときにはコンペアレジスタに設定されているコンペア値を供給する。
【００２２】
ここで、コンペアレジスタ１２に供給する値を選択するものとしたが、コンペアレジスタに設定されている値をフィードバックすることなく加算器１７の加算結果のみを供給し、選択信号に応じてコンペアレジスタに入力されるクロック信号をマスクしてもよい。すなわち、選択信号が活性状態のときにはクロック信号を供給し加算結果をコンペアレジスタに書き込み、選択信号が非選択状態のときにはコンペアレジスタに供給されるべきクロック信号をマスクするものとしてもよい。
【００２３】
割り込み制御回路１５は、比較器１４から出力される一致信号に応じて割り込み制御信号ＩＮＴ１（又はＩＮＴ２）を発生する。また、割り込み制御回路１５はバス１０に接続され、割り込み制御信号ＩＮＴ１（又はＩＮＴ２）に基づき図示しない周辺回路の割り込み処理を行なう。
【００２４】
次に、図１及び図２を参照して、本タイマ回路のインターバルタイマとしての動作を説明する。例として、第１の割り込みタイミング設定回路によって実現されるインターバルタイマの動作を説明する。ここで、コンペアレジスタにはバスを介してＡという初期値が設定されているとする。
【００２５】
タイマカウンタ１１は、入力クロックによって順次カウントアップされる。比較器１４は、カウントアップするタイマカウンタの値とコンペアレジスタ１２に設定されている値とを比較し、入力クロック信号に応じてカウントアップされたタイマカウンタの値とコンペアレジスタの値が一致した（ア）のタイミングで、一致信号を出力する。すなわち、一致信号は入力クロック信号に同期して出力されることとなる。この一致信号に応じて選択器１８から出力される選択信号が活性化され、この選択信号に応じてタイマカウンタ値と幅レジスタ１６に設定されている値との加算値が選択されコンペアレジスタ１２に供給される。このような動作によりコンペアレジスタの値は２Ａとなる。したがって、次の割り込みタイミングはタイマカウンタ値が２Ａを示す（イ）のタイミングとすることができる。つまり、ＣＰＵが処理を行なっているか否かにかかわらずタイマカウンタとコンペアレジスタの値が一致したときに自動的にコンペアレジスタ１２に設定される値が更新される。（イ）のタイミングにおいても、（ア）のタイミングと同じように、一致信号に応じてコンペアレジスタの値が更新されることにより、コンペアレジスタの値は３Ａとなる。このようにして、タイマ回路はインターバル時間Ａで一致信号を出力することができる。
【００２６】
したがって、ＣＰＵが他の優先順位の高い割り込み処理を行なっていたとしても、タイマ回路のコンペアレジスタの値を更新することができる。また、ソフトウェア処理を介していないため、ソフトウェア処理能力が低下することもない。さらに、入力クロック信号に同期して出力される一致信号に応じてコンペアレジスタにデータが供給され、コンペアレジスタは入力クロック信号に同期してデータを格納するため、コンペアレジスタに設定されるインターバル時間の間隔のばらつきを低減することができる。
【００２７】
なお、図１に示されるタイマ回路は、ＣＰＵアクセス制御回路２０と外部エッジ検出制御回路２１をさらに備えていてもよい。
【００２８】
ＣＰＵアクセス制御回路２０は、ＣＰＵからのインターバル開始アクセス命令を受け取り、割り込み制御回路１５にて対象となる割り込み処理を許可すると共に、タイマカウンタ値と幅レジスタに設定されている値との加算値をコンペアレジスタに再設定するためのＣＰＵアクセス制御信号を発生する。
【００２９】
また、外部エッジ検出制御回路２１は、外部信号のエッジを検出し、割り込み制御回路１５にて対象となる割り込み処理を許可すると共に、タイマカウンタ値と幅レジスタに設定されている値との加算値をコンペアレジスタに再設定するための外部エッジ制御信号を発生する。
【００３０】
このとき、選択器１８は、これらＣＰＵアクセス制御信号、外部エッジ制御信号及び一致信号を供給し、いずれかが活性状態となった場合に選択信号を出力するように構成すればよい。
【００３１】
このようにＣＰＵアクセス制御回路２０をさらに備えることによって、通常のインターバルタイマとしての動作のみならず、ＣＰＵアクセスによるコンペアレジスタの更新が可能である。すなわち、ＣＰＵアクセスからインターバル時間経たタイミングを容易に得ることができる。これにより、ＣＰＵがソフトウェア処理を実行し、その処理からあるインターバル時間をもって割り込み処理を行なう場合には、ソフトウェア処理であれば、タイマカウンタ値を読み出し、タイマカウンタ値にインターバル時間を加算し、加算したものを新たなコンペアレジスタ値として更新する、という処理を行わなければならないところ、ＣＰＵからのインターバル開始アクセスのみで実現可能となる。この結果、ＣＰＵへの負荷が削減できるとともに、ＣＰＵで処理することによって生じていた割り込みタイミング発生に対する誤差を低減することができる。
【００３２】
また、外部エッジ検出制御回路２１を有することによって、外部トリガ入力からのインターバル時間計測機能をも実現することができる。すなわち、外部信号のレベル変化を検出し、検出したタイミングからインターバル時間を計測して割り込み制御信号を発行することができる。このような処理をソフトウェアで実行した場合には、外部信号を受け取り、割り込み分岐命令によって、タイマカウンタ値の読み出し、タイマカウント値にインターバル時間を加算し、加算値を新たなコンペアレジスタ値として更新する、という一連の処理を行なわなければならない。しかしながら、本発明ではこのような処理を行なわずに、外部信号のレベル変化を検出するのみで実現可能となる。したがって、ＣＰＵへの負荷が削減できるとともに、ＣＰＵで処理することによって生じていた割り込みタイミング発生に対する誤差を低減することができる。
【００３３】
（第２の実施の形態）
次に、第２の実施の形態について図３を参照して説明する。なお、図１と同一の構成要素は同一の参照番号で示し、その説明を省略する。
【００３４】
第２の実施の形態によるタイマ回路は、図１に示す第１の実施例と比較して、タイマカウンタ値と幅レジスタの値を加算するための加算器の構成が異なる。図３に示されるタイマ回路１０１は、回路規模を削減するために、複数のインターバル時間を設定するためにそれぞれ設けられていた加算器をまとめた加算回路２２としている。加算回路２２は、加算器２３と、タイマカウンタ値にいずれの幅レジスタの値を加算すべきかを選択するために選択信号に応じて幅レジスタの値を選択する選択回路２４が追加されている。
【００３５】
図３のような回路構成にした場合には、複数のコンペアレジスタへの書換えタイミングが同一タイミングとなった場合に誤動作してしまうため、そのための制御がさらに必要となる。この制御方法として、書換えタイミングが重なった場合に、書き換えタイミングをずらし優先順位の高いコンペアから設定する方法と、１カウントアップ毎にクロックを複数個発するように設計し、クロック毎に対応するコンペアを分けて制御する方法とがある。
【００３６】
（第３の実施の形態）
図４は、３つの割り込み間隔で割り込みを入れるインターバルタイマを実現するタイマ回路を構成した本発明の第３の実施の形態である。図１と同一の構成要素は同一の参照番号で示し、その説明を省略する。
【００３７】
すなわち、タイマ回路１０２は、幅レジスタ、加算器、タイミング生成回路及びコンペアレジスタからなる割り込み設定回路２５が３種類ずつ設けられいる。比較ユニット２５には、タイマカウンタとそれぞれのコンペアレジスタ値とを比較するべく比較回路が３つ内蔵されており、それぞれのコンペアレジスタ値とタイマカウンタ値が一致したときに一致信号を出力する。このように割り込み設定回路を複数設けることによって異なる割り込み間隔で割り込みを入れるインターバルタイマを実現することができる。
【００３８】
【発明の効果】
上述のとおり、本発明によれば、ＣＰＵがインターバルタイマによる割り込み処理よりも優先順位の高い処理を行なっていたとしても、自動的にコンペアレジスタが更新することができるため、ソフトバグを発生することがない。また、複数のインターバル時間でもって割り込みを入れるインターバルタイマとして動作させても、コンペアレジスタの値はソフトウェア処理を介することなく更新することができるため、ソフトウェア処理能力を低下させることがない。また、コンペアレジスタの値がソフトウェア処理を介することなく自動的に更新されるためインターバル時間のばらつきを低減することができる。
【図面の簡単な説明】
【図１】本発明によるタイマ回路の第１の実施の形態の構成図である。
【図２】図１のタイマ回路の動作を示すタイミング図である。
【図３】本発明によるタイマ回路の第２の実施の形態の構成図である。
【図４】本発明によるタイマ回路の第３の実施の形態の構成図である。
【図５】従来のタイマ回路の動作を示すタイミング図である。
【符号の説明】
１０    バス
１１    タイマカウンタ
１２    コンペアレジスタ
１４    比較器
１５    割り込み制御回路
１６    幅レジスタ
１７、２３    加算器
１８、１９、２４    選択器
２０    ＣＰＵアクセス制御回路
２１    外部エッジ検出制御回路
【図１】
2004171040.tif 000003
【図２】
2004171040.tif 000004
【図３】
2004171040.tif 000005
【図４】
2004171040.tif 000006
【図５】
2004171040.tif 000007