(57)【要約】【課題】  ＣＰＵのスリープ状態時に、ＣＲ発振回路が生成する低速且つ周波数ばらつきの大きいクロックに基づき動作する起動タイマを備えるマイクロコンピュータにおいて、正確なスリープ期間を判定することができる半導体集積回路を提供する。【解決手段】  ＣＲ発振回路が生成するクロックを、分周比が選択可能な分周回路に入力し、分周比を設定するとともに、水晶発振回路が生成するクロックにより基準期間信号を生成し、分周回路からのクロック信号出力の１周期と、基準期間信号との比から、起動時間設定レジスタ値の補正を行う手段を備える。【選択図】  図１
2011060159.tif 000002
【特許請求の範囲】
【請求項１】
第１クロック信号を生成する第１発振回路と、前記第１クロック信号よりも発振周波数が低い第２クロック信号を生成する第２発振回路と、前記第１クロック信号に基づき動作し、スリープ機能を有するＣＰＵと、前記第２クロック信号を入力とする分周比が選択可能な分周回路と、該分周回路により分周された第３クロック信号を入力とする起動タイマと、スリープ時間の設定値を格納するための起動時間設定レジスタと、前記起動タイマのカウント値と前記起動時間設定レジスタの値を比較し、スリープ時間の経過を判定する比較器と、を内蔵するマイクロコンピュータにおいて、
前記第２クロック信号のエッジのタイミングから、前記第１クロック信号に基づいた基準期間を示す信号を生成し、該基準期間内の第２クロック信号のサイクル数をカウントし、該カウント値に基づき前記分周回路の分周比を設定するとともに、前記基準期間と、前記第３クロック信号の１周期との差を、前記第１クロック信号によりカウントし、前記基準期間と前記第３クロック信号の１周期の比から、前記起動時間設定レジスタの値を補正する演算手段とを備えたことを特徴とするマイクロコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、第１クロック信号を生成する第１発振回路と、第１クロック信号よりも発振周波数が低く、且つ、発振周波数のばらつきが大きい第２クロック信号を生成する第２発振回路と、スリープ機能を有し、第１クロック信号に基づき動作するＣＰＵと、第２クロック信号に基づき動作するタイマによりスリープ時間判定を行うマイクロコンピュータに関する。
【背景技術】
【０００２】
クロック信号を停止することにより回路の動作を止め、消費電力を抑えるスリープ機能を有するマイクロコンピュータ（以下マイコン）は、ＣＰＵを動作させるための高速クロック信号を生成するための水晶発振回路と、低速クロック信号を生成するためのＣＲ発振回路と、ＣＲ発振回路が生成するクロック信号に基づいて動作する起動タイマを有するスリープ時間判定回路とを備えている。このようなマイコンは、ＣＰＵからのスリープ命令の実行により、水晶発振回路を停止し、スリープ状態へ移行する。それと同時に、スリープ時間判定回路は、起動タイマをリセットし、ＣＲ発振回路が生成するクロック信号に同期してカウント動作を開始する。そして、起動時間設定レジスタにより設定されたスリープ時間が経過すると、水晶発振回路を起動させ、ＣＰＵに対し割り込み命令を実行する。これによりマイコンは通常動作状態に復帰する。
【０００３】
ところで、マイコンに内蔵されるＣＲ発振回路は、発振周波数を決めるための抵抗と容量の製造ばらつきが大きく、ＣＲ発振回路が生成するクロック信号の周波数が大きくばらついてしまう。このため、スリープ時間設定値と、実際のスリープ時間との誤差が大きいという問題がある。そこで、この誤差を補正するために、ＣＲ発振回路が生成するクロック信号を、水晶発振器が生成する周波数精度の高いクロック信号により補正する方法が提案されている。
【０００４】
例えば、特許文献１には、水晶発振器からの基準クロックに基づき、ＣＲ発振回路からのクロックの予め設定された基準周期に対する誤差を求めて、スリープ時間が所定の期間となるように、スリープ時間の判定に用いるカウント値を補正するスリープ時間補正手段の開示がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平８−２０２９０５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
図４に、特許文献１で開示されたスリープ時間補正手段のブロック図を示す。同図に示すように、ＣＲ発振回路２０から出力されるクロック信号は、ダウンカウンタである分周カウンタ４２に入力され、この分周カウンタ４２のカウント値がゼロに達したことを、ゼロ比較器４４が検出し、ＣＰＵ４１に対して割り込み信号を発生させる。同様に、水晶発振器３０から出力される基準クロック信号は、ダウンカウンタである分周カウンタ４６に入力され、この分周カウンタ４６のカウント値がゼロに達したことを、ゼロ比較器４８が検出し、ＣＰＵ４１に対して割り込み信号を発生させる。
【０００７】
この回路構成による、スリープ時間の補正方法を以下に示す。
まず、所定の値を分周カウンタ４２、４６に設定（分周カウンタ４２の設定値を「ＣＴ１」、分周カウンタ４６の設定値を「ＣＴ２」）とする）し、分周カウンタ４２、４６のカウント動作を開始する。そして、分周カウンタ４２、４６がダウンカウントし、カウント値がゼロに達すると、ゼロ比較器４４又は４８から、ＣＰＵ４１に対し、割り込み信号が出力される。ＣＰＵ４１は、割り込み信号が出力された分周カウンタ４２、又は４６を再び元の設定値に戻し、カウント動作を再開させる。この作業を繰り返すことにより、一定期間における、ゼロ比較器４４からの割り込み信号の数「Ｃ１」と、ゼロ比較器４８からの割り込み信号の数「Ｃ２」を求める。この「Ｃ１」、「Ｃ２」より、ＣＲ発振器からのクロック信号と水晶発振器からのクロック信号に基づく割り込み周期の比を次式により算出する。
【０００８】
（数１）
補正値Ｋｅ＝Ｔａ×ＣＴ１×Ｃ１／（Ｔｏ×ＣＴ２×Ｃ２）  ・・・  （１）
（ただし、Ｔａ：ＣＲ発振回路のクロック周期、Ｔｏ：水晶発振回路のクロック周期）
【０００９】
そして、分周カウンタ４２の予め設定されていたカウント値ＣＴ１ＸをＫｅにより除算（ＣＴ１Ｘ／Ｋｅ）し、新たに分周カウンタ４２のカウント値に設定する。これにより、スリープ時間の補正を行う。
【００１０】
しかし、上記の方法では、ＣＲ発振回路が生成するクロック信号の周期と、水晶発振器が生成するクロック信号の周期比を、ＣＰＵに入力される割り込み信号の回数から算出しているため、ＣＰＵへの割り込み回数を増やさないと、高い精度で周期比を求めることはできない。このため、精度の高いスリープ時間の補正を行うには、処理に時間がかかるという問題がある。
【課題を解決するための手段】
【００１１】
係る問題を解決するためになされた請求項１に記載の発明は、第１クロック信号を生成する第１発振回路と、前記第１クロック信号よりも発振周波数が低い第２クロック信号を生成する第２発振回路と、前記第１クロック信号に基づき動作し、スリープ機能を有するＣＰＵと、前記第２クロック信号を入力とする分周比が選択可能な分周回路と、該分周回路により分周された第３クロック信号を入力とする起動タイマと、スリープ時間の設定値を格納するための起動時間設定レジスタと、前記起動タイマのカウント値と前記起動時間設定レジスタの値を比較し、スリープ時間の経過を判定する比較器と、を内蔵するマイクロコンピュータにおいて、前記第２クロック信号のエッジのタイミングから、前記第１クロック信号に基づいた基準期間を示す信号を生成し、該基準期間内の第２クロック信号のサイクル数をカウントし、該カウント値に基づき前記分周回路の分周比を設定するとともに、前記基準期間と、前記第３クロック信号の１周期との差を、前記第１クロック信号によりカウントし、前記基準期間と前記第３クロック信号の１周期の比から、前記起動時間設定レジスタの値を補正する演算手段とを備えたことを特徴とする。
【発明の効果】
【００１２】
本発明によると、ＣＲ発振回路が生成するクロック信号に基づき、スリープ時間をより正確に短時間で補正することが可能になる。
【図面の簡単な説明】
【００１３】
【図１】本発明に係るマイクロコンピュータの構成を表すブロック図である。
【図２】本発明のスリープ時間補正回路の実施例を表す回路図である。
【図３】本発明のスリープ時間補正回路の動作例を表すタイミングチャートである。
【図４】従来例のマイクロコンピュータの構成を表すブロック図である。
【発明を実施するための形態】
【００１４】
以下、本発明の実施形態を図面に基づいて説明する。
図１は、本発明に係るマイコンの構成を表すブロック図である。マイコン１０は、ＣＲ発振器２０、クロック分周回路６０、起動タイマ６２、比較器６４、起動時間補正回路６６、起動時間設定レジスタ６８、スリープ時間補正回路７０により構成されている。
【００１５】
クロック分周回路６０は、分周比が設定可能な分周回路で、ＣＲ発振器２０から出力されたクロック信号ＣＲＣＬＫを所定の分周比（Ｎ）により分周し、クロック信号ＣＲＣＬＫ２を出力する。
【００１６】
起動タイマ６２は、クロック分周回路６０から出力されたクロック信号ＣＲＣＬＫ２を入力し、ＣＰＵ４０からのスリープ命令を受けると、タイマをリセットし、クロック信号ＣＲＣＬＫ２のカウントを開始する。
【００１７】
起動時間設定レジスタ６８は、スリープ時間の設定を行うレジスタで、ＣＰＵ４０に割り込みをかけるための起動タイマ６２のカウンタ値を設定する。
【００１８】
起動時間補正回路６６は、スリープ時間補正回路７０から補正用の係数（Ｍ）と、起動時間設定レジスタ６８から起動時間設定値（ＣＴ１Ｘ）を入力し、起動時間設定値を補正して比較器６４へ出力する。
【００１９】
比較器６４は、起動タイマ６２からのカウント値と、起動時間補正回路からの起動時間補正値が一致したら、ＣＰＵ４０に対し、割り込み信号を出力する。
【００２０】
スリープ時間補正回路７０は、ＣＲ発振器から出力されたクロック信号ＣＲＣＬＫと水晶発振器から出力されたクロック信号ＣＰＵＣＬＫを入力し、ＣＰＵ４０からの起動命令により、クロック分周回路６０に対し、分周比（Ｎ）を出力すると共に、起動時間補正回路６６に対し、補正用の係数（Ｍ）を出力する。なお、分周比Ｎと、補正用の係数Ｍの算出は、以下のスリープ時間補正方法の説明において詳説する。
【００２１】
スリープ時間補正方法を、図１のブロック図と、図３のタイミングチャートを参照して説明する。スリープ時間補正回路７０において、水晶発振器３０から出力されるクロック信号ＣＰＵＣＬＫ（ＣＰＵＣＬＫ信号）に基づき、基準期間を示す信号（ＲＥＦ信号）を生成する。ここで、ＣＰＵＣＬＫ信号の１周期をＴCPUCLK、ＣＲ発振器２０から出力されるクロック信号ＣＲＣＬＫ（ＣＲＣＬＫ信号）の１周期をＴCRCLKとすると、図３に示すように、基準期間は、ＴCPUCLK×Ｌと表すことができる。また同様に、基準期間は、クロック信号ＣＲＣＬＫのＮサイクル分ＴCRCLK×Ｎ（ＴCRCLK2と表す）と、クロック信号ＣＰＵＣＬＫのＭサイクル分ＴCPUCLK×Ｍを足した期間で表わすことができる。
【００２２】
そこで、クロック分周回路６０の分周比に、上記「Ｎ」を設定するとともに、上記「Ｌ」、「Ｍ」の値から、補正値Ｋｅ＝ＴCPUCLK×（Ｌ−Ｍ）／（ＴCPUCLK×Ｌ）を求め、起動時間設定レジスタ６８の値をＫｅで割ることにより、スリープ時間を正確に補正することができる。
【００２３】
以下に、スリープ時間補正回路７０の具体的な回路例と動作について説明する。
図２に示すように、スリープ時間補正回路７０は、制御回路７１、Ｌカウンタ７２、Ｍカウンタ７３、Ｎカウンタ７４、立ち上りエッジ検出回路７５により構成される。
【００２４】
制御回路７１は、ＣＰＵからの起動命令により、各カウンタをリセットする。そして、立ち上がりエッジ検出回路７５により、クロック信号ＣＲＣＬＫの立ち上りエッジを検出し、ＲＥＦ信号をアクティブにする。ＲＥＦ信号のアクティブ期間の設定は、Ｌカウンタ７２の設定により行い、カウント値は、クロック信号ＣＲＣＬＫ２の目標とする周期に相当するカウント値に設定する。
【００２５】
Ｎカウンタ７４は、ＲＥＦ信号がアクティブの期間、クロック信号ＣＲＣＬＫのカウントを行う。これにより、ＲＥＦ信号がアクティブ期間のクロック信号ＣＲＣＬＫのサイクル数「Ｎ」が求められる。
【００２６】
Ｍカウンタ７３は、クロック信号ＣＬＫＣＲの立ち上りエッジによりリセットされ、イネーブル端子（ＥＮ）がアクティブの間、クロック信号ＣＰＵＣＬＫをカウントし、イネーブル端子がノンアクティブになると、そのカウント値を保持する。このため、制御回路７１がＲＥＦ信号をノンアクティブにした後、Ｍカウンタ７３には、クロックＣＬＫＣＲの立ち上りから補正処理が終了するまでの期間（ＴCPUCLK×Ｍ）（図３参照）に相当するクロック信号ＣＰＵＣＬＫのカウント値「Ｍ」が格納される。
【００２７】
次に、図１に示す起動時間補正回路６６の機能について以下に示す。
まず、クロック信号ＣＲＣＬＫ２の１周期（ＴCRCLK×Ｎ）と基準期間（ＴCPUCLK×Ｌ）との比を求める。
【００２８】
（数２）
補正値Ｋｅ＝ＴCPUCLK×（Ｌ−Ｍ）／（ＴCPUCLK×Ｌ）＝（Ｌ−Ｍ）／Ｌ  ・・・  （２）
【００２９】
次に、起動時間設定レジスタの予め設定されていたレジスタ値ＣＴ１ＸをＫｅにより除算（ＣＴ１Ｘ／Ｋｅ）し、起動時間補正回路６６の出力とする。
【００３０】
ただし、上記のＭの値が分かれば、起動時間補正値を、ハードウェアではなくソフトウェハにより具現化することもできる。
【００３１】
本願発明のスリープ時間の補正処理の例を以下に示す。水晶発振回路が生成するクロック信号の周波数が１０ＭＨｚ（周期ＴCPUCLK＝１００ｎｓ）、ＣＲ発振回路が生成するクロック信号の周波数が３２ｋＨｚ（周期ＴCRCLK＝３１．２５μｓ）で、ＣＰＵのスリープ状態への移行から１００ｓ後に通常動作状態に復帰をさせる場合を考える。
【００３２】
この場合、クロック分周回路６０のクロック分周比を「３２」に設定すると、クロック信号ＣＲＣＬＫ２は１ｋＨｚ（周期ＴCRCLK2＝１ｍｓ）となるため、起動時間設定レジスタ３２に「１００，０００」を設定すれば、マイコンは１００ｓ後にスリープ状態から復帰することができる。
【００３３】
ここで、ＣＲＣＬＫ発振回路が生成するクロック信号の周波数が、周波数ばらつきにより、３２ｋＨｚに対し、３０．５ｋＨｚ（周期ＴCRCLK＝３２．７９μｓ）となった場合を考える。
（１）補正処理を行わない場合
スリープ時間＝ＴCRCLK×クロック分周比×起動時間設定レジスタ値
＝３２．７９μｓ×３２×１００，０００
＝１０４．９ｓ
となり、目標の１００ｓに対し４．９ｓの誤差が生じる。
（２）補正処理を行った場合
クロック信号ＣＲＣＬＫ２の理想周波数は、１ｋＨｚ（ＴCPUCLK×Ｌ＝１ｍｓ）であるため、Ｌの値を「１０，０００」とする。
そして、クロック分周比は「３０」（∵  Ｎ＝ＴCPUCLK×Ｌ／ＴCRCLK＝３０．４９・・）となり、Ｍは「１６３」（∵  Ｍ＝（ＴCPUCLK×Ｌ−３０×ＴCRCLK）／ＴCPUCLK）となる。
これより、起動時間補正値は、
ＣＴ１Ｘ／Ｋｅ＝ＣＴ１Ｘ×Ｌ／（Ｌ−Ｍ）
＝１００，０００×１０，０００／（１０，０００−１６３）
＝１０１，６００
となるため、
スリープ時間＝ＴCRCLK×クロック分周比×起動時間補正値
＝３２．７９μｓ×３０×１０１，６００
＝９９．９ｓ
となり、目標値の１００ｓに対し、略一致する。
【符号の説明】
【００３４】
１０，１１：マイクロコンピュータ
２０：ＣＲ発振回路
３０：水晶発振回路
３１：水晶発振素子
４０，４１：ＣＰＵ
６０：クロック分周回路
６２：起動タイマ
６４：比較器
６６：起動時間補正回路
６８：起動時間設定レジスタ
７１：制御回路
７２：Ｌカウンタ（基準期間生成用）
７３：Ｍカウンタ（ＴCRCLKより短い期間の測定用）
７４：Ｎカウンタ（ＣＲＣＬＫ分周比設定用）
７５：立ち上がりエッジ検出回路
【図１】
2011060159.tif 000003
【図２】
2011060159.tif 000004
【図３】
2011060159.tif 000005
【図４】
2011060159.tif 000006