(57)【要約】【課題】  マイクロコントローラにおける低消費電力モードへの遷移を効率よく実現する。【解決手段】  通常モードおよび低消費電力モードを有するマイクロコントローラ（１０）において、ＣＰＵによる無限ループの実行を検出する無限ループ検出回路（１１）と、無限ループ検出回路の検出に応答してマイクロコントローラを通常モードから低消費電力モードに遷移させるモード制御回路（１６、５７）とを設ける。【選択図】    図１
2009080542.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵおよび周辺回路の双方が動作している通常モードと、前記ＣＰＵが待機状態であり前記周辺回路が動作している低消費電力モードとを有するマイクロコントローラであって、
前記ＣＰＵによる無限ループの実行を検出する無限ループ検出回路と、
前記無限ループ検出回路の検出に応答してマイクロコントローラを通常モードから低消費電力モードに遷移させるモード制御回路と
を備えることを特徴とするマイクロコントローラ。
【請求項２】
請求項１に記載のマイクロコントローラにおいて、
前記ＣＰＵの動作に関する設定情報を予め格納し、マイクロコントローラの起動時に前記ＣＰＵにより前記設定情報が読み出されるメモリ回路を備え、
前記設定情報は、前記無限ループ検出回路の有効／無効を示す情報を含み、
前記ＣＰＵは、前記メモリ回路から読み出された前記設定情報に基づいて前記無限ループ検出回路の有効／無効を設定する
ことを特徴とするマイクロコントローラ。
【請求項３】
請求項１に記載のマイクロコントローラにおいて、
前記モード制御回路は、
前記無限ループ検出回路の検出に応答して制御信号を活性化させる制御信号生成回路と、
前記制御信号の活性化に応答して前記ＣＰＵに対するクロックの供給を遮断するクロック遮断回路とを備える
ことを特徴とするマイクロコントローラ。
【請求項４】
請求項１に記載のマイクロコントローラにおいて、
前記無限ループ検出回路は、前記ＣＰＵにより指定されるアドレスを利用して前記ＣＰＵによる無限ループの実行を検出する
ことを特徴とするマイクロコントローラ。
【請求項５】
請求項１に記載のマイクロコントローラにおいて、
前記モード制御回路は、前記周辺回路の割り込み要求の発生に応答してマイクロコントローラを低消費電力モードから通常モードに遷移させる
ことを特徴とするマイクロコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、低消費電力モードを有するマイクロコントローラに関する。
【背景技術】
【０００２】
マイクロコントローラの低消費電力モードの一つとして、スリープモードが知られている。マイクロコントローラが通常モードに設定されている場合には、ＣＰＵ（Central Processing Unit）および周辺回路（タイマ回路など）の双方が動作中である（有効である）のに対して、マイクロコントローラがスリープモードに設定されている場合には、ＣＰＵが待機状態になり（無効になり）周辺回路のみが動作する（有効である）。従って、スリープモードは、周辺回路の動作は必要であるがＣＰＵの動作は不要であるような状況（例えば、周辺回路の割り込み要求が発生するまでＣＰＵにより実行されるべき処理がないような状況）にて、マイクロコントローラの消費電流を低減するために使用される。
【０００３】
図６は、従来のマイクロコントローラの一例を示している。図７は、図６のクロック制御回路を示している。マイクロコントローラ５０は、ＣＰＵ５１、ＣＰＵ５１が実行するプログラムなどを予め格納するＲＯＭ（Read Only Memory）５２およびＣＰＵ５１の処理結果などの各種データを一時的に格納するＲＡＭ（Random Access Memory）５３を備えるとともに、周辺回路としてタイマ回路５４および通信回路５５を備え、更に、クロック制御回路５６および論理回路５７を備えて構成されている（図６）。
【０００４】
ＣＰＵ５１は、ＲＯＭ５２、ＲＡＭ５３、タイマ回路５４、通信回路５５およびクロック制御回路５６に内部バスＢＵＳを介して接続されており、これらとの間でデータの授受を実施可能である。ＣＰＵ５１は、ＲＯＭ５２に格納されているプログラムに従って各種処理を実行する。なお、ＣＰＵ５１は、マイクロコントローラ５０の起動時に、ＲＯＭ５２に格納されている８ビットのモードデータ（ＣＰＵ５１の動作に関する設定情報）を読み出して８ビットのモードレジスタに格納する。例えば、モードデータにおいて、第０および第１ビットはバス幅（８ビット／１６ビット／３２ビット）を指定するビットであり、第２ビットはＲＯＭの有効／無効を指定するビットであり、第３〜第７ビットは予約ビットである。
【０００５】
タイマ回路５４は、所定条件が成立した場合（例えば、タイマ値が所定値に到達した場合）、クロック制御回路５６に供給される割り込み要求信号ＩＲ１を“０”から“１”に活性化させる。通信回路５５は、所定条件が成立した場合（例えば、通信動作が完了した場合）、クロック制御回路５６に供給される割り込み要求信号ＩＲ２を“０”から“１”に活性化させる。なお、図示を省略しているが、割り込み要求信号ＩＲ１、ＩＲ２は、割り込み制御回路にも供給される。割り込み制御回路は、割り込み要求信号ＩＲ１、ＩＲ２の何れかが活性化されると、活性化された割り込み要求信号に対して予め割り当てられた割り込み番号をＣＰＵ５１に通知するとともに、割り込み処理の実行をＣＰＵ５１に要求する。これにより、ＣＰＵ５１は、割り込み制御回路から通知された割り込み番号に対応する割り込み処理を実行する。
【０００６】
クロック制御回路５６は、内部クロック生成回路５６ａおよびスリープレジスタ５６ｂを備えて構成されている（図７）。内部クロック生成回路５６ａは、外部端子などを介して供給される外部クロックＣＫＥから内部クロックＣＫＩを生成する。内部クロックＣＫＩは、ＲＯＭ５２、ＲＡＭ５３、タイマ回路５４、通信回路５５および論理回路５７に供給される。スリープレジスタ５６ｂは、ＣＰＵ５１による内部バスＢＵＳを介したライトアクセスによりレジスタ値を変更可能である。また、スリープレジスタ５６ｂは、割り込み要求信号ＩＲ１、ＩＲ２の活性化に応答してレジスタ値が“０”に設定される。スリープレジスタ５６ｂから論理回路５７に供給されるスリープ信号ＳＬＰは、スリープレジスタ５６ｂのレジスタ値が“０”に設定されている場合に“０”に非活性化され、スリープレジスタ５６ｂのレジスタ値が“１”に設定されている場合に“１”に活性化される。
【０００７】
論理回路５７は、スリープ信号ＳＬＰが“０”に非活性化されている場合（即ち、スリープレジスタ５６ｂのレジスタ値が“０”に設定されている場合）、内部クロックＣＫＩをＣＰＵ５１専用の内部クロックＣＫＩ’として出力する。また、論理回路５７は、スリープ信号ＳＬＰが“１”に活性化されている場合（即ち、スリープレジスタ５６ｂのレジスタ値が“１”に設定されている場合）、内部クロックＣＫＩとは無関係にＣＰＵ５１専用の内部クロックＣＫＩ’を“１”に設定する。
【０００８】
従って、マイクロコントローラ５０では、ＣＰＵ５１による内部バスＢＵＳを介したライトアクセスによりスリープレジスタ５６ｂのレジスタ値が“０”から“１”に変更されると、スリープ信号ＳＬＰが“０”から“１”に活性化されてＣＰＵ５１に対するクロックの供給が遮断され、マイクロコントローラ５０が通常モードからスリープモードに遷移する。その後、割り込み要求信号ＩＲ１、ＩＲ２の何れかの活性化によりスリープレジスタ５６ｂのレジスタ値が“１”から“０”に変更されると、スリープ信号ＳＬＰが“１”から“０”に非活性化されてＣＰＵ５１に対するクロックの供給が再開され、マイクロコントローラ５０がスリープモードから通常モードに遷移する。
【０００９】
図８は、図６のマイクロコントローラで用いられるプログラムの一例を示している。図８のプログラムは、マイクロコントローラ５０の起動に伴って実行されるメインルーチン（Ｍａｉｎ）、タイマ回路５４の割り込み要求の発生に伴って実行されるタイマ割り込みルーチン（Ｔｉｍｅｒ）および通信回路５５の割り込み要求の発生に伴って実行される通信割り込みルーチン（Ｃｏｍｍｕｎｉｃａｔｉｏｎ）で構成されている。メインルーチン、タイマ割り込みルーチンおよび通信割り込みルーチンは、ＣＰＵ５１の動作が不要になった時点でＣＰＵ５１の消費電流を抑制すべくマイクロコントローラ５０が通常モードからスリープモードに遷移するように構成されている。
【００１０】
メインルーチンにおいては、タイマ回路５４や通信回路５５の初期設定などの各種設定処理が実行された後、マイクロコントローラ５０を通常モードからスリープモードに遷移させるべくスリープレジスタ５６ｂに“１”がライトされ、その後、モード遷移待機用の無限ループが実行される。タイマ割り込みルーチンにおいては、所望の割り込み処理が実行された後、マイクロコントローラ５０を通常モードからスリープモードに遷移させるべくスリープレジスタ５６ｂに“１”がライトされ、その後、モード遷移待機用の無限ループが実行される。通信割り込みルーチンにおいても、所望の割り込み処理が実行された後、マイクロコントローラ５０を通常モードからスリープモードに遷移させるべくスリープレジスタ５６ｂに“１”がライトされ、その後、モード遷移待機用の無限ループが実行される。
【００１１】
図９〜図１１は、図６のマイクロコントローラの動作例を示している。図９の動作は、図８のプログラムにおけるメインルーチン（Ｍａｉｎ）の実行中にマイクロコントローラ５０が通常モードからスリープモードに遷移する際の動作である。ＣＰＵ５１による内部バスＢＵＳを介したライトアクセスによりスリープレジスタ５６ｂのレジスタ値が“０”から“１”に変更されると、スリープ信号ＳＬＰが“０”から“１”に活性化される。これにより、ＣＰＵ５１専用の内部クロックＣＫＩ’が“１”に固定されてＣＰＵ５１に対するクロックの供給が遮断され、マイクロコントローラ５０が通常モードからスリープモードに遷移する。
【００１２】
図１０の動作は、図８のプログラムにおけるメインルーチン（Ｍａｉｎ）の実行中にマイクロコントローラ５０が通常モードからスリープモードに遷移した後に、タイマ回路５４の割り込み要求が発生して図８のプログラムにおけるタイマ割り込みルーチン（Ｔｉｍｅｒ）の実行が開始される際の動作である。タイマ回路５４からクロック制御回路５６（スリープレジスタ５６ｂ）に供給される割り込み要求信号ＩＲ１が“０”から“１”に活性化されると、スリープレジスタ５６ｂのレジスタ値が“１”から“０”に変更され、スリープ信号ＳＬＰが“１”から“０”に非活性化される。これにより、内部クロックＣＫＩがＣＰＵ５１専用の内部クロックＣＫＩ’として出力されてＣＰＵ５１に対するクロックの供給が再開され、マイクロコントローラ５０がスリープモードから通常モードに遷移する。
【００１３】
図１１の動作は、図８のプログラムにおけるタイマ割り込みルーチン（Ｔｉｍｅｒ）の実行中にマイクロコントローラ５０が通常モードからスリープモードに遷移する際の動作である。図９の動作と同様に、ＣＰＵ５１による内部バスＢＵＳを介したライトアクセスによりスリープレジスタ５６ｂのレジスタ値が“０”から“１”に変更されると、スリープ信号ＳＬＰが“０”から“１”に活性化される。これにより、ＣＰＵ５１専用の内部クロックＣＫＩ’が“１”に固定されてＣＰＵ５１に対するクロックの供給が遮断され、マイクロコントローラ５０が通常モードからスリープモードに遷移する。
【００１４】
なお、本発明に関連する先行技術としては、例えば、特許文献１が挙げられる。特許文献１には、コンピュータシステムにおいてＢＩＯＳ（Basic I/O System）のキーボード入力ルーチンを使用することなくキー入力待ちによる低消費電力モードへの移行を実現する技術が開示されている。
【特許文献１】特開平７−３１９５９１号公報
【発明の開示】
【発明が解決しようとする課題】
【００１５】
前述のように、マイクロコントローラ５０においては、マイクロコントローラ５０を通常モードからスリープモードに遷移させるにはスリープレジスタ５６ｂのレジスタ値を“０”から“１”に変更するためのプログラムが必要である。このため、スリープモードを頻繁に使用するような用途では、プログラム量の増加に伴ってＲＯＭ５２の容量を大きくする必要があり、チップ面積が増加してコストが増大してしまう。従って、マイクロコントローラ５０において通常モードからスリープモードへの遷移が効率よく実現されているとは言い難かった。
【００１６】
本発明は、このような問題点に鑑みてなされたものであり、マイクロコントローラにおける低消費電力モードへの遷移を効率よく実現することを目的とする。
【課題を解決するための手段】
【００１７】
本発明の一形態では、マイクロコントローラは、ＣＰＵおよび周辺回路の双方が動作している通常モードと、ＣＰＵが待機状態であり周辺回路が動作している低消費電力モードとを有するマイクロコントローラであって、無限ループ検出回路およびモード制御回路を備える。無限ループ検出回路は、ＣＰＵによる無限ループの実行を検出する。モード制御回路は、無限ループ検出回路の検出に応答してマイクロコントローラを通常モードから低消費電力モードに遷移させる。このような構成のマイクロコントローラでは、マイクロコントローラを通常モードから低消費電力モードに遷移させるためのレジスタ設定プログラムを不要にできるため、スリープモードを多用する場合でもプログラム量が増加することはない。従って、プログラムメモリの容量を小さくすることができ、チップ面積の削減による低コスト化を実現できる。このように、本発明の一形態では、マイクロコントローラにおける低消費電力モードへの遷移を効率よく実現可能である。
【発明の効果】
【００１８】
本発明によれば、マイクロコントローラにおける低消費電力モードへの遷移を効率よく実現することができる。
【発明を実施するための最良の形態】
【００１９】
以下、本発明の実施形態について図面を用いて説明する。なお、本発明の実施形態（図１〜図５）を説明するにあたって、図６〜図１１で説明した要素と同一の要素については、図６〜図１１で使用した符号と同一の符号を使用し、詳細な説明を省略する。
【００２０】
図１は、本発明の一実施形態を示している。図２は、図１のＣＰＵの要部を示している。図３は、図１のクロック制御回路を示している。マイクロコントローラ１０は、図６のマイクロコントローラ５０においてＣＰＵ５１およびクロック制御回路５６をＣＰＵ１１およびクロック制御回路１６に置き換えて構成されている（図１）。ＣＰＵ１１は、無限ループの実行を検出する機能（無限ループ検出機能）を有する点を除いて、図６のＣＰＵ５１と同一である。ＣＰＵ１１は、命令デコーダ１１ａ、モードレジスタ１１ｂおよび論理回路１１ｃを備えて構成されている（図２）。
【００２１】
命令デコーダ１１ａは、無限ループ検出機能を具現しており、内部バスＢＵＳを介してＲＯＭ５２から取得したデータ（命令コード）をデコードし、デコード結果に基づいて無限ループ検出信号ＤＥＴＳを“０”から“１”に活性化させる。例えば、命令デコーダ１１ａは、ＣＰＵ１１により次回指定されるアドレスがＣＰＵ１１により今回指定されたアドレスより前のアドレスである場合に、ＣＰＵ１１により無限ループが実行されたものと判断して無限ループ検出信号ＤＥＴＳを“０”から“１”に活性化させる。
【００２２】
モードレジスタ１１ｂ（８ビット）は、図６のＣＰＵ５１のモードレジスタと同様に、マイクロコントローラ１０の起動時に、ＲＯＭ５２から読み出されたモードデータ（８ビット）が格納される。例えば、モードデータにおいて、第０および第１ビットはバス幅（８ビット／１６ビット／３２ビット）を指定するビットであり、第２ビットはＲＯＭの有効／無効を指定するビットであり、第３ビットは無限ループ検出機能の有効／無効を指定するビットであり、第４〜第７ビットは予約ビットである。モードレジスタ１１ｂから出力されるモード信号ＭＤ０〜ＭＤ３は、モードレジスタ１１ｂにおける第０〜第３ビットのレジスタ値を示す信号である。
【００２３】
論理回路１１ｃは、モード信号ＭＤ３が“１”に設定されている場合（即ち、モードレジスタ１１ｂにおける第３ビットのレジスタ値が“１”に設定されている場合）、無限ループ検出信号ＤＥＴＳをクロック制御回路１６に供給される無限ループ検出信号ＤＥＴとして出力する。また、論理回路１１ｃは、モード信号ＭＤ３が“０”に設定されている場合（即ち、モードレジスタ１１ｂにおける第３ビットのレジスタ値が“０”に設定されている場合）、無限ループ検出信号ＤＥＴＳとは無関係に無限ループ検出信号ＤＥＴを“０”に設定する。このように、ＲＯＭ５２に予め格納されるモードデータの第３ビットは、無限ループ検出機能の有効／無効を指定するためのビットとして利用される。
【００２４】
クロック制御回路１６は、内部クロック生成回路１６ａおよびスリープレジスタ１６ｂを備えて構成されている（図３）。内部クロック生成回路１６ａは、図７の内部クロック生成回路５６ａと同一であり、外部端子などを介して供給される外部クロックＣＫＥから内部クロックＣＫＩを生成する。スリープレジスタ１６ｂは、ＣＰＵ１１から供給される無限ループ検出信号ＤＥＴの活性化に応答してレジスタ値が“１”に設定される点を除いて、図７のスリープレジスタ５６ｂと同一である。
【００２５】
従って、マイクロコントローラ１０では、ＣＰＵ１１による内部バスＢＵＳを介したライトアクセスによりスリープレジスタ１６ｂのレジスタ値が“０”から“１”に変更されると、あるいは、無限ループ検出信号ＤＥＴの活性化によりスリープレジスタ１６ｂのレジスタ値が“０”から“１”に変更されると、スリープ信号ＳＬＰが“０”から“１”に活性化されてＣＰＵ１１に対するクロックの供給が遮断され、マイクロコントローラ１０が通常モードからスリープモードに遷移する。その後、割り込み要求信号ＩＲ１、ＩＲ２の何れかの活性化によりスリープレジスタ１６ｂのレジスタ値が“１”から“０”に変更されると、スリープ信号ＳＬＰが“１”から“０”に非活性化されてＣＰＵ１１に対するクロックの供給が再開され、マイクロコントローラ１０がスリープモードから通常モードに遷移する。
【００２６】
図４は、図１のマイクロコントローラで使用されるプログラムの一例を示している。図４のプログラムは、図８のプログラムにおいてスリープレジスタに“１”をライトするための部分を省略して構成されている。マイクロコントローラ１０においては、ＣＰＵ１１により無限ループが実行されると、ハードウェアにて自動的に通常モードからスリープモードへの遷移が実施されるため、スリープレジスタ１６ｂに“１”をライトするためのプログラムが不要になる。従って、図８のプログラムに比べてプログラム量が少ない図４のプログラムを用いることが可能になる。
【００２７】
図５は、図１のマイクロコントローラの動作例を示している。図５の動作は、図４のプログラムにおけるメインルーチン（Ｍａｉｎ）の実行中にマイクロコントローラ１０が通常モードからスリープモードに遷移する際の動作である。ＣＰＵ１１により無限ループが実行されてＣＰＵ１１からクロック制御回路１６（スリープレジスタ１６ｂ）に供給される無限ループ検出信号ＤＥＴが“０”から“１”に活性化されると、スリープレジスタ１６ｂのレジスタ値が“０”から“１”に変更され、スリープ信号ＳＬＰが“０”から“１”に活性化される。これにより、ＣＰＵ１１専用の内部クロックＣＫＩ’が“１”に固定されてＣＰＵ１１に対するクロックの供給が遮断され、マイクロコントローラ１０が通常モードからスリープモードに遷移する。
【００２８】
なお、図４のプログラムにおけるメインルーチン（Ｍａｉｎ）の実行中にマイクロコントローラ１０が通常モードからスリープモードに遷移した後に、タイマ回路５４の割り込み要求が発生してタイマ割り込みルーチン（Ｔｉｍｅｒ）の実行が開始される際の動作は、図１０の動作と同様である。また、タイマ割り込みルーチン（Ｔｉｍｅｒ）あるいは通信割り込みルーチン（Ｃｏｍｍｕｎｉｃａｔｉｏｎ）の実行中にマイクロコントローラ１０が通常モードからスリープモードに遷移する際の動作は、図５の動作と同様である。
【００２９】
以上のような本発明の一実施形態では、マイクロコントローラ１０を通常モードからスリープモードに遷移させるためのレジスタ設定プログラム（スリープレジスタ１６ｂに“１”をライトするためのプログラム）を不要にできるため、スリープモードを頻繁に使用する場合でもプログラム量が増加することはない。従って、プログラムメモリとして機能するＲＯＭ５２の容量を小さくすることができ、チップ面積の削減による低コスト化を実現できる。また、プログラム開発時に、マイクロコントローラ１０におけるスリープモードへの遷移を意識することなくプログラムを作成できるという利点もある。更に、ハードウェアにて自動的に通常モードからスリープモードへの遷移が実施されるため、プログラム全体を通してチップ全体の平均消費電流を低減することができる。また、ＲＯＭ５２に予め格納されるモードデータを利用して無限ループ検出機能の有効／無効を設定する機能を実現しているため、専用外部端子あるいは専用レジスタを設ける場合に比べて低コストで機能を実現できる。
【００３０】
なお、前述した本発明の一実施形態では、無限ループ検出機能が命令デコーダ１１ａにより具現される例について述べたが、本発明はかかる実施形態に限定されるものではなく、ＣＰＵ１１による無限ループの実行を検出可能であればその他の手段を用いてもよいことは言うまでもない。
【００３１】
以上、本発明について詳細に説明してきたが、前述の実施形態およびその変形例は発明の一例に過ぎず、本発明はこれらに限定されるものではない。本発明を逸脱しない範囲で変形可能であることは明らかである。
【図面の簡単な説明】
【００３２】
【図１】本発明の一実施形態を示す説明図である。
【図２】図１のＣＰＵの要部を示す説明図である。
【図３】図１のクロック制御回路を示す説明図である。
【図４】図１のマイクロコントローラで用いられるプログラムの一例を示す説明図である。
【図５】図１のマイクロコントローラの動作例を示す説明図である。
【図６】従来のマイクロコントローラの一例を示す説明図である。
【図７】図６のクロック制御回路を示す説明図である。
【図８】図６のマイクロコントローラで用いられるプログラムの一例を示す説明図である。
【図９】図６のマイクロコントローラの動作例（その１）を示す説明図である。
【図１０】図６のマイクロコントローラの動作例（その２）を示す説明図である。
【図１１】図６のマイクロコントローラの動作例（その３）を示す説明図である。
【符号の説明】
【００３３】
１０‥マイクロコントローラ；１１‥ＣＰＵ；１１ａ‥命令デコーダ；１１ｂ‥モードレジスタ；１１ｃ‥論理回路；１６‥クロック制御回路１６ａ‥内部クロック生成回路；１６ｂ‥スリープレジスタ；５２‥ＲＯＭ；５３‥ＲＡＭ；５４‥タイマ回路；５５‥通信回路；５７‥論理回路；ＢＵＳ‥内部バス；ＣＫＥ‥外部クロック；ＣＫＩ、ＣＫＩ’‥内部クロック；ＤＥＴ、ＤＥＴＳ‥無限ループ検出信号；ＩＲ１、ＩＲ２‥割り込み要求信号；ＭＤ０〜ＭＤ３‥モード信号；ＳＬＰ‥スリープ信号
【図１】
2009080542.tif 000003
【図２】
2009080542.tif 000004
【図３】
2009080542.tif 000005
【図４】
2009080542.tif 000006
【図５】
2009080542.tif 000007
【図６】
2009080542.tif 000008
【図７】
2009080542.tif 000009
【図８】
2009080542.tif 000010
【図９】
2009080542.tif 000011
【図１０】
2009080542.tif 000012
【図１１】
2009080542.tif 000013