【実施例1】
【0039】
以下、
図2の回路の動作を説明する。
まず電源が投入された時に、システムリセット信号源135は、タイマカウンタ回路145内のカウンタ220、及び、全てのフリップフロップ回路240、245、及び、250をリセットする。他の実施例として、システムリセット用フリップフロップ回路250はCPU101によってリセットされるようにしてもよい。電源が投入された後、CPU101は初期化処理を行う。初期化処理において、CPU101は、まずレジスタ255に適当な比較対象値を設定する。
【0040】
比較対象値は、比較器230が割込み要求信号を発生させるときに用いる値である。比較器230は、第2のクロック信号のカウント値と比較対象値とを比較し、一致した場合に割込み要求信号を発生させる。そして、CPU101は割込み要求信号を受信し、割込み処理を実行する。したがって、割込み処理は、第2のクロック信号のカウントが開始された後、第2のクロック信号のカウント値が比較対象値に達するまでカウントされる間の時間(比較対象時間)が経過するときに実行される。したがって、所定の時間間隔ごとに、割込み要求信号が発生する。これにより、CPU101は、所定の時間間隔で割込み要求信号を受信し、割込み要求処理を実行する。ここで、比較対象時間は、第2のクロック信号のカウント値が比較対象値に達するまでカウントされる間の時間であって、(第2のクロック信号の周期)×(比較対象値)によって得られる。
【0041】
ここで、割込み処理とは、処理の優先順位が少なくとも応用プログラムより高い処理である。そして、割込み処理がトリガされると、CPU101は、応用プログラムの処理を中断するとともに、割込み処理を開始する。
【0042】
システムリセット用フリップフロップ回路250は、マイクロコンピュータ100の電源投入時などにシステムリセット用信号が発生された場合にのみ、CPU101又はシステムリセット信号源135によってリセットされる。その後、初期化処理において、CPU101はシステムリセット用フリップフロップ回路250をセットする。カウンタ220は、システムリセット用フリップフロップ回路250がセットされた後、第2のクロック信号のカウントを開始する。ソフトウェアからリセットする手段を設けない理由は、CPUで致命的なエラーが発生した場合にシステムリセット用フリップフロップ回路250がリセットされないようにするためである。CPUで致命的なエラーが発生した時、システムリセット用フリップフロップ回路250がリセットされないよう動作することが保証されている場合、ソフトウェアがシステムリセット用フリップフロップ回路250をリセットする手段を設けてもよい。
【0043】
比較器230は、第2のクロック信号のカウント値とレジスタ255が保存している比較対象値とを比較する。つまり、第2のクロック信号のカウントが開始又は再開されてから比較対象時間が経過していないか確認する。第2のクロック信号のカウント値と比較対象値とが一致した場合、比較器230は、割込み要求信号を発生させ、割込み要求信号用フリップフロップ回路245をセットし、数クロック後にリセットする。割込み要求信号用フリップフロップ回路245は、割込み要求信号を短いパルス幅であるパルス信号に波形整形する。パルス信号に整形された割込み要求信号は、CPU101に供給される。
【0044】
他の実施例として、比較器230が割込み要求信号を短いパルス幅であるパルス信号として発生させることができる場合、比較器230は、割込み要求信号用フリップフロップ回路245を介することなくCPU101に割込み要求信号を供給することができる。CPU101は、割込み要求信号を受信すると、割込み処理を実行する。
【0045】
カウンタ220は、第2のクロック信号のカウント値がカウント上限値に達したか否かを確認する。つまり、カウンタ220は、第2のクロック信号のカウントが開始又は再開されてから、カウンタ上限時間が経過していないか確認する。ここで、カウンタ上限時間は、第2のクロック信号のカウント値がカウント上限値に達するまでカウントされる間の時間であって、(第2のクロック信号の周期)×(カウント上限値)によって得られる。
【0046】
カウンタ220は、第2のクロック信号のカウント値がカウント上限値に達したことを確認すると、CPUリセット信号を発生させ、CPUリセット信号用フリップフロップ回路240をセットする。CPUリセット信号用フリップフロップ回路240は、CPUリセット信号を短いパルス幅であるパルス信号に波形整形する。パルス信号に整形されたCPUリセット信号は、CPU101に供給される。
【0047】
他の実施例として、カウンタ220がCPUリセット信号を短いパルス幅であるパルス信号として発生させることができる場合、カウンタ220は、CPUリセット信号用フリップフロップ回路240を介することなくCPU101にCPUリセット信号を供給することができる。
【0048】
CPU101は、CPUリセット信号を受信すると、CPUリセット処理を実行する。CPUリセット信号用フリップフロップ回路240は、セットされた後すぐに、カウンタ220などによってリセットされる。
【0049】
割込み要求信号を受信したことによって実行される割込み処理の実行開始から終了までの時間(割込み処理の実行時間)について説明する。ここで、比較対象時間はカウンタ上限時間より短い時間である。そして、割込み処理はカウンタ220が第2のクロック信号のカウントを開始又は再開する時であるカウント開始時から比較対象時間に到達した時に実行される。CPUリセット処理は、そのカウント開始時又は再開時からカウンタ上限時間に到達した時に実行される。そして、割込み処理は、CPUリセット処理の実行前に終了している必要がある。その理由については、後述する。したがって、カウンタ上限時間から比較対象時間を引いた時間は、割込み処理の実行時間より長い時間でなければならない。具体的には、割込み処理の実行に要する時間が50マイクロ秒である場合、(カウンタ上限時間)−(比較対象時間)は、50マイクロ秒より長い必要がある。したがって、カウンタ上限時間が5ミリ秒である場合、比較対象時間は、4950マイクロ秒より短くなければならない。割込み処理の実行時間は、カウンタ220の上限時間の2〜5%程度の時間に設定されることが好ましい。
【実施例2】
【0050】
タイマカウンタ回路145は、さらに、付加タイマ225を備えることができる。付加タイマ225は、割込み処理においてCPU101などによって起動が開始される。付加タイマ225は、CPUリセット信号が発生する時に(カウント開始又は再開時からカウンタ上限時間に到達した時に)、CPUリセット信号の発生を禁止する。付加タイマ225は、CPUリセット信号用フリップフロップ回路240がセットされるのを禁止する信号であるCPUリセット禁止信号をこのフリップフロップ回路240に供給する。他の実施例として、付加タイマ225は、カウンタ220を制御することによって、カウンタ220によるCPUリセット信号の発生を禁止することもできる。第2の実施例によるマイクロコンピュータ100は、CPUリセット処理を定期的に実行しないため、第1の実施例によるマイクロコンピュータ100と比較してCPU101などへの負担を軽減することができる。
【0051】
図3は、第1の実施例によるマイクロコンピュータ100の動作を示したフロー図である。最初に、マイクロコンピュータ100に電源が投入される(ステップ305)。そして、初期化処理において、マイクロコンピュータ100の初期化が行われる(ステップ310)。初期化処理の終了後、カウンタ220は、供給されるクロック信号をカウントする(ステップ315)。
【0052】
比較器230は、クロック信号のカウント値が比較対象値に達したか否かを判定する(ステップ320)。ここで、クロック信号のカウント値は、カウンタ220がクロック信号をカウントした値である。クロック信号のカウント値が比較対象値に達していない場合、比較器230は、クロック信号のカウント値が比較対象値になるまで待機する。クロック信号のカウント値が比較対象値に達した場合、比較器230は、割込み要求信号を発生させ、CPU101へ供給する(ステップ325)。
【0053】
CPU101は、割込み要求信号を受信すると、実行中の応用プログラムの処理を中断するとともに、割込み処理を実行する(ステップ330)。割込み処理については後述する。
【0054】
割込み処理が終了すると、カウンタ220は、クロック信号のカウント値がカウント上限値に達するまで待機する。(ステップ335)。クロック信号のカウント値がカウント上限値に達した後、カウンタ220は、CPUリセット信号を発生させ、CPU101へ供給する(ステップ340)。さらに、カウンタ220は、クロック信号のカウント値をリセットするとともに、クロック信号のカウントを再び開始する。
【0055】
CPU101は、CPUリセット信号を受信すると、CPUリセット処理を実行する(ステップ345)。CPUリセット処理については後述する。
【0056】
図4は、第2の実施例によるマイクロコンピュータ100の動作を示したフロー図である。
図4のフロー図は、一部が
図3のフロー図と同じである。
図4のステップ405、410、415、420、425、430、450、455、及び、460は、それぞれ、
図3のステップ305、310、315、320、325、330、335、340、及び、345に相当する。
【0057】
図4のフロー図は、このフロー図のステップ445、450、及び、455を
図3のフロー図に追加したものに相当する。以下、
図3と
図4との違いについて説明する。CPU101は、CPUレジスタ235の情報を取得する(ステップ435)。CPU101は、取得した情報が正常か否かを判定する(ステップ440)。CPUレジスタ235の情報が正常であるか否かは、CPUレジスタ235の値が正常な範囲に収まっているか、適切な値になっているかなどによって判定することができる。
【0058】
取得した情報が正常ではないと判断された場合、
図3におけるフロー図のステップ335、340、及び345にそれぞれ相当するステップ450、455、及び、460が実行される。取得した情報が正常であると判断された場合、付加タイマ225がCPUリセット信号の発生を禁止する(ステップ445)。なお、CPU101が、付加タイマ225を起動するようにすることもできる。したがって、CPU101に致命的なエラーが発生した場合、付加タイマ225が起動されないため、付加タイマ225はCPUリセット信号の発生を禁止することができない。これにより、CPUリセット信号がCPUに供給され、CPUリセット処理が実行される。付加タイマ225が起動されない場合の例としては、CPU101に致命的なエラーが発生しているため、CPU101が付加タイマ225を起動する処理である割込み処理を受け付けないときなどがある。
【0059】
図5は、割込み処理の動作を示したフロー図である。割込み処理は、CPU101が割込み要求信号を受信することによって実行される(
図3のステップ325及び330又は
図4のステップ425及び430参照)。最初に、CPU101は、割込み開始時点(応用プログラム中断時点)のCPUレジスタ235の情報をRAM105に保存する(ステップ505)。そして、CPU101は、この割込み処理が正常な動作であるか否かを判定する(ステップ510)。
【0060】
正常な動作であるか否かは、CPU101が、RAM105に保存されている特定の情報が正しいことを確認することによって判定される。例えば、初期化処理において、CPU101は、一又は二以上の所定の値を予めRAM105に保存し、そして、割込み処理において、その値が変更されていないことを確認する。ここで、それら所定の値は、CPU101が正常に動作している場合、初期化処理以外において変更されないが、CPU101で致命的なエラーが発生した場合、例えば、CPU101の誤動作により、それら所定の値が変更される可能性がある。所定の値が変更された場合、致命的なエラーが生じたこととなる。
【0061】
また、前回の割込み処理おいて、CPU101が、その割込み処理開始時点のCPUレジスタ235の情報を復帰情報としてRAM105に保存しており、そして、現在実行されている割込み処理において、CPU101が、RAM105に保存されている現在の割込み処理開始時点のCPUレジスタ235の情報と、RAM105に保存されている前回の割込み処理時点の復帰情報と、を比較し、所定のデータが正常であるか否かを判定する。
【0062】
さらに、CPU101が、所定のフラグがオンになっているか否かを確認し、所定のデータが正常であるか否かを判定する。所定のフラグの例としては、割込み処理終了フラグをRAM105に設けることができる。割込み処理終了フラグがオンになっている場合、CPU101はRAM105に保存されている情報が正しいと判定する。割込み処理終了フラグを用いる場合、CPU101は、ステップ510の後で、割込み処理終了フラグをオフにし、割込み処理の終了時にオンに戻す。これにより、前回の割込み処理が実行されている間に致命的なエラーが生じた場合、現在の割込み処理時のステップ510において、割込み処理終了フラグがオフであるため、CPU101はRAM105に保存されている特定の情報が正しくないと判定する。
【0063】
さらに、前回の割込み処理おいて、CPU101は、上記CPUレジスタ235の情報及び/又は上記所定のフラグを、RAM105の領域の1箇所だけではなく、2箇所以上に保存することができる。そして、現在実行されている割込み処理において、CPU101は、RAM105に保存されている前回の割込み処理時点の上記2以上のCPUレジスタ235の情報それぞれ、及び/又は、上記2以上の所定のフラグそれぞれが同じであるか否かを確認する。そして、それら情報及び/又はフラグが同じである場合、CPU101は所定のデータが正常であると判定する。これにより、所定のデータが正常であるか否かの判定が、より正確に実行される。一実施例として、上記保存される情報又はフラグの数を3つにすることもできる。これにより、それら3つの情報又はフラグのうち1つが異なる場合であっても、CPU101は、残り2つの情報又はフラグを正しいものとして利用することができる。これにより、RAM105上のデータが一部破損した場合であっても、CPU101は、所定のデータが正常であるか否かの判定を行うことができる。これら判定についての実施例は例示であり、他の実施例によって同様に判定することもできる。
【0064】
割込み処理が正常な動作であると判定された場合、CPU101は、RAM105に保存されている割込み処理開始時点のCPUレジスタ235の情報が正常であるか否かを判定する(ステップ515)。割込み処理開始時点のCPUレジスタ235の情報が正常であるか否かは、CPUレジスタ235の情報の値が正常な範囲に収まっているか、適切な値になっているかなどによって判定することができる。
【0065】
割込み処理開始時点のCPUレジスタ235の情報が正常であると判定された場合、CPU101は、正常であると判定されたCPUレジスタ235の情報を復帰情報としてRAM105の別の領域に保存する(ステップ520)。他の実施例として、CPU101は、以前の割り込み処理においてRAM105に既に保存されている復帰情報をRAM105の他の場所にコピーし、復帰情報の履歴を管理することができる。さらに他の実施例として、割込み処理終了フラグを用いている場合、割込み処理終了フラグをオンにする。
【0066】
ステップ510において、割込み処理が正常な動作でないと判定された場合、CPU101は、RAM105に保存されている情報が正常であるか否かを判定する(ステップ525)。ステップ525の判定は、前述のRAM105に保存されている特定の情報などを用いて実行される。
【0067】
ステップ525において、RAM105に保存されている情報が正常でないと判定された場合、マイクロコンピュータ100全体をリセットするため、システムリセットが行われる(ステップ530)。システムリセットが行われた後、ステップ530以降の処理が中止され、マイクロコンピュータ100は初期化される。他の実施例では、ステップ530において、入出力ポート125などのCPUの致命的なエラーの影響を受けにくい要素はリセットされないようにすることができる。
【0068】
ステップ515において、RAM105レジスタ235に保存されている情報が正常でないと判定された場合、又は、ステップ525において、割込み処理開始時点のCPUレジスタ235の情報が正常であると判定された場合、CPU101は、RAM105に履歴として保存されている復帰情報などを用いて、CPUレジスタ235の情報の復旧処理を行う(ステップ535)。他の実施例として、ステップ535の後にステップ510が実行するよう構成することができる。復旧処理の一実施例として、CPU101は、履歴としてRAM105に保存されている復帰情報を用いて、CPUレジスタ235を復旧することができる。
【0069】
他の実施例として、割込み処理はステップ505及びステップ520のみからなるよう構成することもできる。
【0070】
図6は、CPUリセット処理の動作を示したフロー図である。CPUリセット処理は、CPU101がCPUリセット信号を受信することによって実行される(
図3のステップ340及び345又は
図4のステップ455及び460参照)。
【0071】
最初に、CPU101のリセットが行われる(ステップ610)。これにより、CPUレジスタ235の情報もクリアされる。CPUリセット処理(ステップ345又はステップ460)を実行するためのトリガとなるCPUリセット信号は、タイマカウンタから周期的に必ず与えられる。よって、CPUリセット処理(ステップ345又はステップ460)は、割込み処理(ステップ330又はステップ430)が直前に実行されていなくても実行される。したがって、CPU101において致命的なエラーが発生したことによって、割込み処理が実行されない場合であっても、CPUリセット処理は割込み処理に依存することなく実行される。
【0072】
CPU101は、RAM105に保存されている復帰情報をCPUレジスタ235にコピーする(ステップ615)。これにより、CPUレジスタ235の情報は割込み処理において保存された情報(
図5のステップ520)であるため、割込み処理が実行される前に実行されていた応用プログラムは、CPU101をリセットすることによる影響を受けることなく再開される。
【0073】
他の実施例として、CPU101は、復帰情報をCPUレジスタ235にコピーする前に、復帰情報が正常な値であるか、又は、復帰情報が妥当であるかなどをチェックするよう構成されていてもよい。これにより、復帰情報が正常又は妥当な値ではない場合、システムリセットなどが行われるようにすることができる。
【0074】
また、CPU101において致命的なエラーが発生した後に、そのCPU101がリセットされた場合、ステップ615の処理によって、CPUレジスタ235の情報がRAM105に保存された時点の復帰情報で上書きされる。したがって、復帰情報がCPU101における致命的なエラーによる影響を受けていない場合、CPU101で致命的なエラーが発生したとしても、本発明は、CPU101を致命的なエラーから回復させることができる。
【0075】
ここで、前述した、割込み処理がCPUリセット処理の実行前に終了している必要がある理由は、CPU101に致命的なエラーが発生していない場合、CPUリセット処理のステップ615において、RAM105に保存されている復帰情報をCPUレジスタ235にコピーするために、予め、復帰情報がRAM105に保存されている(
図5のステップ520参照)必要があり、割込み処理が正常に終了し、CPU101は、CPUリセット処理を実行するために待機に入っている必要が有るからである。
【0076】
他の実施例として、CPUレジスタ235又はRAM105にCPUリセット処理実行可能フラグが保存されるようにすることができる。例えば、割込み処理において復帰情報がRAM105に保存される時に、CPU101がCPUリセット処理実行可能フラグをオンにする。そして、CPUリセット処理実行可能フラグがオンである場合のみ、CPUリセット処理を実行し、CPUリセット処理完了時に、CPU101がCPUリセット処理実行可能フラグをオフにする。これにより、CPUに致命的なエラーが発生し、割込み処理において復帰情報がRAM105へ更新されない場合、CPUリセット処理において、致命的なエラーが発生する前に保存された復帰情報を使い続けることを回避することができる。割込み処理において復帰情報がRAM105へ更新されない場合、マイクロコンピュータ100全体をリセットするなど他の手段により、CPU101の致命的なエラーを回避することができる。
【0077】
他の実施例として、CPUリセット処理は、CPUのリセット以後(ステップ610以後)、RAM105に保存されている復帰情報が正常ではない場合、復帰情報を回復させるステップを含むことができる。ここで、復帰情報が正常であるか否かは、復帰情報の値が正常な範囲に収まっているか、適切な値になっているかなどによってCPU101が判定することができる。復帰情報を回復させる処理の例として、CPU101は、RAM105に保存されている復帰情報の履歴から正常である復帰情報を選択し、選択した復帰情報をCPUレジスタ235にコピーすることができる。
【0078】
さらに他の実施例として、割込み処理は、CPUのリセット以後(ステップ610以後)、マイクロコンピュータを正常に動作させることができない場合、システムリセットを行うステップを含むことができる。ここで、マイクロコンピュータを正常に動作させることができるか否かは、CPU101が、RAM105に保存されている特定の情報が正しいことを確認することによって判定することができる。ここで、特定の情報が正しいか否かは、初期化処理のみで変更される特定の情報が、致命的なエラーが発生したことに起因して、初期化処理以外の処理によって、変更されているか否かを判定することによって行われる。さらに、マイクロコンピュータを正常に動作させることができるか否かは、CPU101が、履歴としてRAM105に保存されている複数の復帰情報から、正常な範囲又は適切な値である復帰情報が有るか否かを確認することによって判定することができる。正常な範囲又は適切な値である復帰情報が一つもない場合、マイクロコンピュータは正常に動作することができないと判断される。
【0079】
図7は、CPU101が正常に動作している場合の第1の実施例(
図3参照)についてのタイムチャートである。そのタイムチャートは、時刻T1、T2・・・T5、T6の順に時間が進んでいることを示す。状態701、715、及び、730は、応用プログラムの処理が実行されていること示す。状態705及び720は、割込み処理が実行されていることを示す。状態710及び725は、CPUリセット処理が実行されていることを示す。
【0080】
時刻T
1より前において、応用プログラムの処理が実行されている(状態701)。時刻T
1において、CPU101は、割込み要求信号を受信する。CPU101は、割込み要求信号の受信をトリガとして、応用プログラムの処理を中断し、割込み処理を開始する(状態705)。割込み処理において、CPU101は、割込み処理開始時点のCPUレジスタ235の情報を復帰情報としてRAM105に保存する。
【0081】
時刻T
2において、割込み処理が終了し、CPU101は、CPUリセット信号を受信する。CPU101は、CPUリセット信号の受信をトリガとして、CPUリセット処理を開始する(状態710)。CPUリセット処理において、CPU101がリセットされた後、CPU101は、RAM105に保存されている復帰情報をCPUレジスタ235にコピーする。これにより、時刻T
3において、CPU101は、中断された応用プログラムをT
1時点の処理から再開する。時刻T
4、T
5、及び、T
6において、時刻T
1、T
2、及び、T
3と同様に、応用プログラムの中断、割込み処理、及び、CPUリセット処理が実行される。
【0082】
図8は、CPU101において致命的なエラーが発生した場合の第1の実施例(
図3参照)についてのタイムチャートである。時刻T
1、T
2、T
3において、応用プログラムの処理、割込み処理、CPUリセット処理が実行される(状態801、805、及び、810)。状態805の割込み処理において、CPU101は、時刻T
1におけるCPUレジスタ235の情報である復帰情報をRAM105に保存している。
【0083】
応用プログラムの処理実行中の(状態815)T
4において、CPU101に致命的なエラーが発生したとする。これにより、CPU101は正常に処理を実行することができないことから、状態820は、応用プログラムの処理が実行されていないことを示す。さらに、状態825は割込み処理が実行されていないことを示す。
【0084】
時刻T
6において、CPU101は、CPUリセット信号を受信する。CPU101は、CPUリセット信号の受信をトリガとして、CPUリセット処理を開始する(状態830)。CPUリセット処理において、CPU101がリセットされた後、CPU101は、RAM105に保存されている復帰情報をCPUレジスタ235にコピーする。これにより、時刻T
7において、CPU101は、中断された応用プログラムをT
1時点の処理から再開する(状態835)。
【0085】
図9は、CPU101において致命的なエラーが発生した場合の第2の実施例(
図4参照)についてのタイムチャートである。時刻T
1、T
2において、応用プログラムの処理、割込み処理が実行される(状態901及び905)。状態905の割込み処理において、CPU101は、時刻T
1におけるCPUレジスタ235の情報である復帰情報をRAM105に保存している。
【0086】
時刻T
2において、CPUリセット信号の発生を禁止する処理が実行される(状態910)。これにより、CPUリセット処理が実行されない。CPUリセット処理が実行されないため、割込み処理が終了した後、時刻T
2において、応用プログラムの処理が再開される(状態915)。
【0087】
応用プログラムの処理実行中の(状態915)T
4において、CPU101に致命的なエラーが発生したとする。これにより、CPU101は正常に処理を実行することができないことから、状態920の応用プログラムの処理及び状態925の割込み処理は実行されず、さらに、時刻T
2において実行されていたCPUリセット信号の発生を禁止する処理も実行されない。
【0088】
時刻T
6において、CPUリセット信号の発生を禁止する処理が実行されないため、CPU101は、CPUリセット信号を受信する。CPU101は、CPUリセット信号の受信をトリガとして、CPUリセット処理を開始する(状態930)。CPUリセット処理において、CPU101がリセットされた後、CPU101は、RAM105に保存されている復帰情報をCPUレジスタ235にコピーする。これにより、CPU101は、時刻T
7において、中断された応用プログラムをT
1時点の処理から再開する(状態940)。
【0089】
本発明により、CPUにおいて、いわゆる暴走などの致命的なエラーが発生した場合、マイクロコンピュータ全体をリセットすることなく、CPUのみをリセットすることによって、致命的なエラーからマイクロコンピュータを復帰させることができる。これにより、産業界で広く使われている組込み用マイクロコンピュータのCPUで発生する致命的なエラーへの対策をより高速に、かつ、簡単に実現することができる。メカトロニクス、ロボット、パチンコ、パチスロ台を含むゲーム機器、自動車のエンジンコントロール、ブレーキのコントロール、エレベーターのコントロールなどの分野において、マイクロコンピュータにおけるCPUの致命的なエラーは事故や危険、ないしは金銭の損害を生じさせる可能性がある。したがって、このような分野において、本発明によるマイクロコンピュータを用いることによって、事故や損害を大幅に軽減することができる。