(57)【特許請求の範囲】
【請求項１】
入力信号に特定方向のエッジである有効エッジが発生すると、その時の時刻を示す時刻情報を記憶する時刻記憶レジスタと、プログラムを実行するＣＰＵと、を有したマイクロコンピュータであって、
前記時刻記憶レジスタが前記時刻情報を記憶すると、前記ＣＰＵから出力される許可信号を受けるまでは、前記時刻記憶レジスタが前記時刻情報を更新して記憶するのを禁止する更新制御手段を備え、
しかも、前記時刻記憶レジスタを、第１の時刻記憶レジスタとして備えると共に、
前記入力信号は、立ち上がりエッジと立ち下がりエッジとのうちの一方である基準エッジが複数回発生する信号であり、
前記第１の時刻記憶レジスタは、前記入力信号に、前記有効エッジとして、前記基準エッジとは反対方向の非基準エッジが発生すると、その時の時刻を示す時刻情報を記憶するようになっており、
更に当該マイクロコンピュータは、
前記入力信号に前記基準エッジが発生すると、その時の時刻を示す時刻情報を記憶する第２の時刻記憶レジスタと、
前記入力信号に前記基準エッジが発生すると、割り込み要求を発生する割り込み発生手段とを備え、
前記ＣＰＵは、前記割り込み要求が発生すると実行を開始する割り込み処理において、
前記第１の時刻記憶レジスタに記憶されている時刻情報を読み込む第１の処理と、
前記第２の時刻記憶レジスタに記憶されている時刻情報を読み込む第２の処理と、
前記第２の処理で読み込んだ時刻情報の値と、当該割り込み処理を前回実行した際に前記第２の処理で読み込んでメモリに記憶しておいた時刻情報である基準エッジ前回発生時刻情報の値との差分から、前記入力信号に前記基準エッジが前回発生してから今回発生するまでの時間である１周期時間を算出する第３の処理と、
前記第１の処理で読み込んだ時刻情報の値と、前記基準エッジ前回発生時刻情報の値との差分から、前記入力信号に前記基準エッジが前回発生してから前記非基準エッジが発生するまでの時間であるパルス幅時間を算出する第４の処理と、を行うと共に、
前記第３の処理と前記第４の処理よりも後に、前記第２の処理で読み込んだ時刻情報を前記メモリに新たな前記基準エッジ前回発生時刻情報として更新記憶する第５の処理を行い、
更に前記第１の処理よりも後に、前記更新制御手段に前記許可信号を与えて前記第１の時刻記憶レジスタが前記時刻情報を更新して記憶するのを許可する第６の処理を行うこと、
を特徴とするマイクロコンピュータ。
【請求項２】
請求項１に記載のマイクロコンピュータにおいて、
前記入力信号は、前記基準エッジの発生周期が一定のＰＷＭ信号であり、
前記ＣＰＵは、前記割り込み処理において、前記第３の処理で算出した前記１周期時間と前記第４の処理で算出した前記パルス幅時間とから前記ＰＷＭ信号のデューティ比を算出する第７の処理を行うこと、
を特徴とするマイクロコンピュータ。
【請求項３】
請求項２に記載のマイクロコンピュータにおいて、
前記ＣＰＵは、前記割り込み処理において、前記第３の処理で算出した前記１周期時間が所定の正常範囲内であるか否かを判定する第８の処理を行うと共に、該第８の処理により前記１周期時間が前記正常範囲内ではないと判定した場合には、前記第７の処理をスキップすること、
を特徴とするマイクロコンピュータ。
【請求項４】
請求項３に記載のマイクロコンピュータにおいて、
前記ＣＰＵは、前記割り込み処理において、前記第８の処理により前記１周期時間が前記正常範囲内ではないと判定した場合には、前記第５の処理もスキップすること、
を特徴とするマイクロコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、入力信号に特定方向のエッジが発生すると、その時の時刻を示す時刻情報を記憶するレジスタを備えたマイクロコンピュータに関する。
【背景技術】
【０００２】
マイクロコンピュータ（以下、マイコンともいう）としては、特定の端子への入力信号に特定方向のエッジ（レベル変化エッジ）が発生すると、その時の時刻情報としてフリーランニングタイマ（フリーランニングカウンタとも呼ばれる）のカウント値をラッチする、インプットキャプチャレジスタ（以下、キャプチャレジスタという）を備えたものが知られている（例えば、特許文献１参照）。そして、このようなマイコンにおいて、ＣＰＵは、キャプチャレジスタの値（時刻情報）を読み込むことで、入力信号に特定方向のエッジが発生した時刻を検出することができる。
【０００３】
更に、特定の端子への入力信号に特定方向のエッジが発生すると、割り込み要求が発生してＣＰＵが割り込み処理を実行するマイコンも知られている（例えば、特許文献２参照）。
【０００４】
また、キャプチャレジスタに関して、そのキャプチャレジスタにフリーランニングタイマのカウント値をラッチさせるようにする方のエッジを、有効エッジと言うことにすると、有効エッジが立ち上がりエッジであるキャプチャレジスタ（以下、立ち上がりエッジキャプチャレジスタという）と、有効エッジが立ち下がりエッジであるキャプチャレジスタ（以下、立ち下がりエッジキャプチャレジスタという）との、各々を備えたマイコンも周知である。そのマイコンでは、特定の端子への入力信号に立ち上がりエッジが発生すると、立ち上がりエッジキャプチャレジスタが、その立ち上がりエッジ発生時の時刻を示す時刻情報として、フリーランニングタイマのカウント値をラッチし、また、上記入力信号に立ち下がりエッジが発生すると、立ち下がりエッジキャプチャレジスタが、その立ち下がりエッジ発生時の時刻を示す時刻情報として、フリーランニングタイマのカウント値をラッチすることとなる。
【０００５】
ここで、立ち上がりエッジキャプチャレジスタと立ち下がりエッジキャプチャレジスタとを備えたマイコンの使用例について、図１０を用い説明する。
図１０は、立ち下がりエッジの発生周期（図１０におけるＴ）が一定であるＰＷＭ（パルス幅変調）信号のデューティ比を計測する場合の使用例を表している。そして、この例では、ＰＷＭ信号の立ち下がりエッジから次の立ち上がりエッジまでのローレベル時間（図１０におけるＷ）が、可変のパルス幅である。
【０００６】
図１０に示す使用例では、ＰＷＭ信号がマイコンに入力され、そのＰＷＭ信号に立ち下がりエッジが発生する毎に、マイコンの内部において、割り込み要求が発生し、ＣＰＵが割り込み処理を実行する。つまり、割り込み要求に関しての有効エッジは立ち下がりエッジになっている。
【０００７】
そして、マイコンのＣＰＵは、ＰＷＭ信号の立ち下がりエッジに伴う割り込み処理において、下記［Ｓ１］〜［Ｓ４］の処理を行う。
［Ｓ１］立ち下がりエッジキャプチャレジスタの値を読み込むと共に、その読み込んだ値（即ち、ＰＷＭ信号に立ち下がりエッジが今回発生した時のフリーランニングタイマのカウント値）Ｎａと、当該割り込み処理を前回実行した際に立ち下がりエッジキャプチャレジスタから読み込んでＲＡＭに記憶しておいた値（即ち、ＰＷＭ信号に立ち下がりエッジが前回発生した時のフリーランニングタイマのカウント値）Ｎｂとの差分から、ＰＷＭ信号の周期（即ち、立ち下がりエッジが前回発生してから今回発生するまでの１周期時間）を算出する。
【０００８】
［Ｓ２］立ち上がりエッジキャプチャレジスタの値を読み込むと共に、その読み込んだ値（即ち、ＰＷＭ信号に立ち上がりエッジが発生した時のフリーランニングタイマのカウント値）Ｎｃと、上記値Ｎｂとの差分から、ＰＷＭ信号のパルス幅（即ち、立ち下がりエッジが前回発生してから立ち上がりエッジが発生するまでのパルス幅時間）を算出する。
【０００９】
［Ｓ３］上記［Ｓ２］で算出したパルス幅を、上記［Ｓ１］で算出した周期で割ることにより、ＰＷＭ信号のデューティ比を算出する。
［Ｓ４］少なくとも上記［Ｓ１］，［Ｓ２］の処理を行った後に、上記［Ｓ１］で読み込んだ立ち下がりエッジキャプチャレジスタの値Ｎａを、ＲＡＭに新たな上記値Ｎｂとして更新記憶する。尚、この［Ｓ４］の処理でＲＡＭに記憶した値Ｎｂが、次回の割り込み処理における上記［Ｓ１］，［Ｓ２］の各処理で用いられる。
【００１０】
このため、図１０に示すように、ＰＷＭ信号に、時刻ｔ１で立ち下がりエッジが発生し、時刻ｔ２で立ち上がりエッジが発生し、時刻ｔ３で立ち下がりエッジが発生したとすると、時刻ｔ１では、その時刻ｔ１でのフリーランニングタイマのカウント値（Ｃ１）が立ち下がりエッジキャプチャレジスタに記憶され、時刻ｔ２では、その時刻ｔ２でのフリーランニングタイマのカウント値（Ｃ２）が立ち上がりエッジキャプチャレジスタに記憶され、時刻ｔ３では、その時刻ｔ３でのフリーランニングタイマのカウント値（Ｃ３）が立ち下がりエッジキャプチャレジスタに記憶される。
【００１１】
そして、時刻ｔ３の立ち下がりエッジに伴う割り込み処理では、時刻ｔ１から時刻ｔ３までの時間（詳しくは、時刻ｔ１から時刻ｔ３までのフリーランニングタイマのカウント数（＝Ｃ３−Ｃ１））を周期Ｔとして算出すると共に、時刻ｔ１から時刻ｔ２までの時間（詳しくは、時刻ｔ１から時刻ｔ２までのフリーランニングタイマのカウント数（＝Ｃ２−Ｃ１））をパルス幅Ｗとして算出し、更に、算出した周期Ｔに対するパルス幅Ｗの比を、デューティ比として算出することとなる。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開平８−２５８６９４号公報
【特許文献２】特開昭５７−４９０４０号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
ところで、上記従来のマイコンにおいて、キャプチャレジスタの値は、そのキャプチャレジスタにとっての有効エッジが発生する毎に、自動的に（つまり、ソフトウェアに従いＣＰＵが行う処理とは関係なく）更新される。
【００１４】
このため、所定のモニタ開始時から、ＣＰＵがキャプチャレジスタの値を読み込む読込処理を行う時までの期間を、有効エッジのモニタ期間とすると共に、そのモニタ期間中に有効エッジが最初に発生した時の時刻情報を上記読込処理で取得したい場合に、下記の不具合が生じる。
【００１５】
即ち、モニタ期間中に有効エッジが２回以上発生してしまうと、ＣＰＵが上記読込処理を行った時点で、キャプチャレジスタの値は、有効エッジが最初に発生した時の時刻情報ではない時刻情報に更新されてしまっていることとなり、有効エッジが最初に発生した時の時刻情報を失ってしまう（有効エッジが最初に発生した時の時刻を検出することができない）、という不都合が生じる。
【００１６】
例えば、立ち上がりエッジキャプチャレジスタと立ち下がりエッジキャプチャレジスタとを備えたマイコンの前述した使用例（図１０に示した）に関して説明すると、図１１に例示するように、時刻ｔ３でＰＷＭ信号に立ち下がりエッジが発生してから、ＣＰＵが割り込み処理を開始するまで（より詳しくは、割り込み処理において立ち上がりエッジキャプチャレジスタの値を読み込むまで）の、処理開始遅れ期間中の時刻ｔ４にて、ノイズによりＰＷＭ信号に不要な（余分な）立ち上がりエッジが発生したとする。
【００１７】
すると、その時刻ｔ４でのフリーランニングタイマのカウント値（Ｃ４）が、立ち上がりエッジキャプチャレジスタに更新記憶されることとなり、ＰＷＭ信号が前回立ち下がってから最初に立ち上がった時刻ｔ２でのカウント値（Ｃ２）が失われてしまう。
【００１８】
このため、ＣＰＵは、その時刻ｔ２でのカウント値（Ｃ２）を取得することができず（時刻ｔ２を検出することができず）、延いては、ＰＷＭ信号のパルス幅及びデューティ比を正しく算出することができなくなる。この図１１の例では、時刻ｔ１から時刻ｔ４までのフリーランニングタイマのカウント数（＝Ｃ４−Ｃ１）であって、周期Ｔよりも長い時間を、パルス幅Ｗとして算出してしまうこととなる。
【００１９】
尚、図１０及び図１１の例では、割り込み処理において立ち上がりエッジキャプチャレジスタの値を読み込んだ時が、立ち上がりエッジについての前回のモニタ期間の終了時であり、次回のモニタ期間の開始時（モニタ開始時点）でもある。
【００２０】
本発明は、こうした問題に鑑みなされたものであり、入力信号に特定方向の有効エッジが発生すると、その時の時刻情報を記憶する時刻記憶レジスタを備えたマイコンにおいて、所定のモニタ開始時からＣＰＵが時刻記憶レジスタの値を読み込む処理を行う時までのモニタ期間中に、有効エッジが複数回発生したとしても、その有効エッジが最初に発生した時の時刻情報をＣＰＵが取得できるようにすること、を目的としている。
【課題を解決するための手段】
【００２１】
第１発明のマイコン（マイクロコンピュータ）は、入力信号に特定方向のエッジである有効エッジが発生すると、その時の時刻を示す時刻情報を記憶する時刻記憶レジスタと、プログラムを実行するＣＰＵとを備えており、更に、更新制御手段を備えている。
【００２２】
そして、更新制御手段は、時刻記憶レジスタが時刻情報を記憶すると、ＣＰＵから出力される許可信号を受けるまでは、時刻記憶レジスタが時刻情報を更新して記憶するのを禁止する。
【００２３】
このマイコンでは、入力信号に有効エッジが発生して時刻記憶レジスタが時刻情報を記憶すると、ＣＰＵがソフトウェアの処理によって更新制御手段に許可信号を与えるまでは、入力信号に再び有効エッジが発生しても時刻記憶レジスタの記憶値は更新されない。
【００２４】
よって、このマイコンによれば、所定のモニタ開始時からＣＰＵが時刻記憶レジスタの値を読み込む処理を行う時までのモニタ期間において、有効エッジが複数回発生したとしても、有効エッジが最初に発生した時の時刻情報をＣＰＵに取得させたい場合には、ＣＰＵがモニタ開始時に更新制御手段へ許可信号を与えるようにしておけば良い。
【００２５】
そのようにすれば、時刻記憶レジスタは、モニタ開始時から、時刻情報を更新記憶できる状態となり、その後、入力信号に有効エッジが複数回発生したとしても、最初に有効エッジが発生した時にだけ時刻情報を更新記憶することとなる。よって、モニタ期間中に有効エッジが複数回発生したとしても、ＣＰＵは、時刻記憶レジスタの値を読み込むことにより、有効エッジが最初に発生した時の時刻情報を取得することができ、延いては、有効エッジが最初に発生した時刻を検出することができる。
【００２６】
次に、第２発明のマイコンでは、第１発明のマイコンにおいて、前記時刻記憶レジスタを、第１の時刻記憶レジスタとして備えると共に、入力信号は、立ち上がりエッジと立ち下がりエッジとのうちの一方である基準エッジが複数回発生する信号である。
【００２７】
そして、第１の時刻記憶レジスタは、入力信号に、有効エッジとして、基準エッジとは反対方向の非基準エッジが発生すると、その時の時刻を示す時刻情報を記憶するようになっている。
【００２８】
更に、第２発明のマイコンは、入力信号に基準エッジが発生すると、その時の時刻を示す時刻情報を記憶する第２の時刻記憶レジスタと、入力信号に基準エッジが発生すると、割り込み要求を発生する割り込み発生手段とを備えている。
【００２９】
そして、このマイコンにおいて、ＣＰＵは、割り込み発生手段による割り込み要求が発生すると（即ち、入力信号に基準エッジが発生すると）実行を開始する割り込み処理において、下記の第１〜第６の処理を行う。
【００３０】
即ち、ＣＰＵは、割り込み処理において、「第１の時刻記憶レジスタに記憶されている時刻情報を読み込む第１の処理」と、「第２の時刻記憶レジスタに記憶されている時刻情報を読み込む第２の処理」と、「第２の処理で読み込んだ時刻情報の値と、当該割り込み処理を前回実行した際に第２の処理で読み込んでメモリに記憶しておいた時刻情報である基準エッジ前回発生時刻情報の値との差分から、入力信号に基準エッジが前回発生してから今回発生するまでの時間である１周期時間を算出する第３の処理」と、「第１の処理で読み込んだ時刻情報の値と、前記基準エッジ前回発生時刻情報の値との差分から、入力信号に基準エッジが前回発生してから非基準エッジが発生するまでの時間であるパルス幅時間を算出する第４の処理」とを行う。そして、第３の処理と第４の処理よりも後に、「第２の処理で読み込んだ時刻情報を前記メモリに新たな基準エッジ前回発生時刻情報として更新記憶する第５の処理」を行い、更に第１の処理よりも後に、「更新制御手段に許可信号を与えて第１の時刻記憶レジスタが時刻情報を更新して記憶するのを許可する第６の処理」を行う。
【００３１】
このようなマイコンによれば、基準エッジの発生に伴う割り込み処理により、入力信号の１周期時間（基準エッジが前回発生してから今回発生するまでの時間）と、入力信号のパルス幅時間（基準エッジが前回発生してから非基準エッジが発生するまでの時間）とを算出することができる。また、算出した周期とパルス幅時間から、入力信号の１周期時間に対するパルス幅時間の比を算出することもでき、基準エッジの発生周期が一定のＰＷＭ信号が入力信号であるならば、その比として、ＰＷＭ信号のデューティ比を算出するこができる。
【００３２】
そして特に、割り込み処理では、第１の時刻記憶レジスタの値（時刻情報）を読み込む第１の処理より後の第６の処理により、更新制御手段に許可信号を与えるため、入力信号に基準エッジが発生してから割り込み処理が開始されるまで（より詳しくは、割り込み処理における第１の処理が行われるまで）の間に、ノイズによって入力信号に不要な非基準エッジ（即ち、第１の時刻記憶レジスタにとっての有効エッジ）が発生したとしても、第１の時刻記憶レジスタの値は更新されない。このため、割り込み処理における第１の処理で第１の時刻記憶レジスタの値を読み込む時に、その第１の時刻記憶レジスタには、入力信号に基準エッジが前回発生してから最初に非基準エッジが発生した時の時刻情報が記憶されていることとなる。
【００３３】
よって、上記ノイズによる不要な非基準エッジが発生しても、割り込み処理では、入力信号に基準エッジが前回発生してから最初に非基準エッジが発生した時の時刻情報を取得することができ、誤ったパルス幅時間を算出してしまうことを回避することができる。つまり、入力信号に基準エッジが前回発生してから最初に非基準エッジが発生した時までの時間を、パルス幅時間として算出することができ、ノイズによるパルス幅時間の誤算出を回避することができる。
【００３４】
尚、このマイコンでは、割り込み処理における第１の処理で第１の時刻記憶レジスタの値を読み込んだ時が、前回のモニタ期間の終了時であり、次回のモニタ期間の開始時（モニタ開始時点）にも相当するが、モニタ開始時点については、厳密には、第６の処理で更新制御手段に許可信号を与えた時となる。
【００３５】
次に、第３発明のマイコンでは、第２発明のマイコンにおいて、入力信号は、基準エッジの発生周期が一定のＰＷＭ（パルス幅変調）信号である。そして、ＣＰＵは、前記割り込み処理において、「第３の処理で算出した１周期時間と第４の処理で算出したパルス幅時間とからＰＷＭ信号のデューティ比を算出する第７の処理」を行う。
【００３６】
このマイコンによれば、入力信号としてのＰＷＭ信号に基準エッジが発生してから割り込み処理における第１の処理が行われるまでの間に、ノイズによってＰＷＭ信号に不要な非基準エッジが発生したとしても、誤ったデューティ比を算出してしまうことを回避することができる。
【００３７】
次に、第４発明のマイコンでは、第３発明のマイコンにおいて、ＣＰＵは、前記割り込み処理において、「第３の処理で算出した１周期時間が所定の正常範囲内であるか否かを判定する第８の処理」を行うと共に、その第８の処理により１周期時間が正常範囲内ではないと判定した場合には、第７の処理をスキップするようになっている。
【００３８】
つまり、割り込み処理では、今回算出した１周期時間が正常範囲内でなければ、今回算出した１周期時間とパルス幅時間を用いてデューティ比を算出しないようになっている。尚、正常範囲は、ＰＷＭ信号の周期（基準エッジの発生周期）の正常許容範囲（正常と考えられる許容範囲）に設定しておけば良い。
【００３９】
このマイコンによれば、ＰＷＭ信号に正規の基準エッジが発生してから次の正規の基準エッジが発生するまでの間に、ノイズによる不要な基準エッジが発生して、基準エッジの発生間隔が正常範囲よりも短くなった場合には、割り込み処理における第３の処理で算出される１周期時間が正常範囲よりも短くなり、そのことが第８の処理で判定されて、第７の処理がスキップされることとなる。
【００４０】
このため、ノイズによってＰＷＭ信号に不要な基準エッジが発生した場合（基準エッジの発生間隔が正常範囲よりも短くなった場合）に、誤ったデューティ比を算出してしまうことを回避することができる。
【００４１】
次に、第５発明のマイコンでは、第４発明のマイコンにおいて、ＣＰＵは、前記割り込み処理において、第８の処理により１周期時間が前記正常範囲内ではないと判定した場合には、第５の処理もスキップするようになっている。つまり、割り込み処理では、今回算出した１周期時間が正常範囲内でなければ、デューティ比の算出だけではく、基準エッジ前回発生時刻情報の更新記憶も止めるようになっている。
【００４２】
このマイコンによれば、ＰＷＭ信号に正規の基準エッジが発生してから次の正規の基準エッジが発生するまでの間に、ノイズによる不要な基準エッジが発生した場合でも、ＰＷＭ信号に次の正規の基準エッジが発生して割り込み処理が実行されれば、その回の割り込み処理により、正しい１周期時間（ＰＷＭ信号の周期）が算出されることとなる。その回の割り込み処理における第３及び第４の処理で用いられる基準エッジ前回発生時刻情報は、ノイズによる基準エッジが発生した時の時刻情報ではなく、前回の正規の基準エッジが発生した時の時刻情報になっているからである。
【００４３】
また、ＰＷＭ信号に正規の基準エッジが発生してから次の正規の基準エッジが発生するまでの間に、ノイズによる不要な基準エッジが発生した場合には、その不要な基準エッジの直近に不要な非基準エッジも発生することとなるが、その場合でも、ＰＷＭ信号に次の正規の基準エッジが発生して割り込み処理が実行されれば、その回の割り込み処理により、正しいパルス幅時間が算出されることとなり、延いては、正しいデューティ比が算出されることとなる。
【００４４】
このことについて説明すると、まず、ＰＷＭ信号に正規の基準エッジが発生してから次の正規の基準エッジが発生するまでの間に、ノイズによる不要な基準エッジ及び非基準エッジが発生するパターンとしては、下記の第１パターンと第２パターンとがある。
【００４５】
第１パターンは、「ＰＷＭ信号に正規の基準エッジが発生してから正規の非基準エッジが発生するまでの期間であるパルス幅期間中に、ノイズによって、非基準エッジと基準エッジとがその順に発生する」というパターンである。
【００４６】
第２パターンは、「ＰＷＭ信号に正規の非基準エッジが発生してから次の正規の基準エッジが発生するまでの期間である反パルス幅期間中に、ノイズによって、基準エッジと非基準エッジとがその順に発生する」というパターンである。
【００４７】
そして、第１パターンの場合、ノイズによる非基準エッジが発生した時の時刻情報が第１の時刻記憶に記憶されてしまうが、その直後のノイズによる基準エッジに伴う割り込み処理においては、その第１の時刻記憶レジスタの値は無視されることとなる。第８の処理により１周期時間が正常範囲内ではないと判定されて、第７の処理がスキップされるからである。
【００４８】
また、ノイズによる基準エッジに伴う割り込み処理においても、第６の処理により更新制御手段に許可信号を与えることとなる。よって、その後に正規の非基準エッジが発生すれば、その時の時刻情報が第１の時刻記憶レジスタに更新記憶される。
【００４９】
そして、その後に正規の基準エッジが発生して、割り込み処理が実行されれば、その回の割り込み処理により、ＰＷＭ信号の正しい１周期時間とパルス幅時間とが算出されることとなり、延いては、正しいデューティ比が算出されることとなる。
【００５０】
一方、第２パターンの場合、ノイズによる基準エッジが発生した時点では、既に第１の時刻記憶レジスタには正規の非基準エッジが発生した時刻の時刻情報が記憶されており、第１の時刻記憶レジスタは更新記憶禁止状態になっている。このため、ノイズによる基準エッジが発生してから該基準エッジに伴う割り込み処理が開始されるまで（より詳しくは第６の処理が行われるまで）に同ノイズによる非基準エッジが発生しても、第１の時刻記憶レジスタの値が更新されない。また、第２パターンの場合にも、ノイズによる基準エッジに伴う割り込み処理においては、第８の処理により１周期時間が正常範囲内ではないと判定されて、第７の処理がスキップされる。
【００５１】
よって、その後に正規の基準エッジが発生して、割り込み処理が実行されれば、その回の割り込み処理により、ＰＷＭ信号の正しい１周期時間とパルス幅時間とが算出されることとなり、延いては、正しいデューティ比が算出されることとなる。
【００５２】
以上のことから、第５発明のマイコンによれば、ノイズによるデューティ比誤算出の回避性能を一層向上させることができる。
【図面の簡単な説明】
【００５３】
【図１】実施形態のマイコンの構成を表す構成図である。
【図２】タイマユニットの動作を説明するフローチャートである。
【図３】初期化処理を表すフローチャートである。
【図４】割り込み処理を表すフローチャートである。
【図５】ＰＷＭ信号にノイズが乗らない場合の動作を表すタイムチャートである。
【図６】ＰＷＭ信号にノイズが乗った場合の動作を表す第１のタイムチャートである。
【図７】ＰＷＭ信号にノイズが乗った場合の動作を表す第２のタイムチャートである。
【図８】ＰＷＭ信号にノイズが乗った場合の動作を表す第３のタイムチャートである。
【図９】ＰＷＭ信号にノイズが乗った場合の動作を表す第４のタイムチャートである。
【図１０】従来のマイコンの使用例を説明する説明図である。
【図１１】従来技術の問題を説明する説明図である。
【発明を実施するための形態】
【００５４】
以下に、本発明が適用された実施形態のマイコンについて説明する。
図１に示すように、本実施形態のマイコン１は、プログラムを実行するＣＰＵ３と、実行対象のプログラムが記憶されたＲＯＭ５と、プログラムの一部やＣＰＵ３による演算結果等が記憶されるＲＡＭ７と、当該マイコン１への入力信号にエッジが発生した時の時刻情報を記憶する機能を有したタイマユニット９と、それらを接続するバス１１と、ＣＰＵ３に割込み要求信号を出力する割り込みコントローラ（ＩＮＴＣ）１３と、エッジ検出ポート１５とを備えている。
【００５５】
エッジ検出ポート１５は、当該マイコン１の特定の端子１７に入力される入力信号に立ち上がりエッジ（ローからハイへのレベル変化エッジ）が発生すると、立ち上がりエッジ検出信号を出力し、上記入力信号に立ち下がりエッジ（ハイからローへのレベル変化エッジ）が発生すると、立ち下がりエッジ検出信号を出力する。尚、立ち上がりエッジ検出信号と立ち下がりエッジ検出信号の各々は、例えば、当該マイコン１における内部クロックの所定周期分（例えば半周期分や１周期分）のパルス幅を有したパルス信号である。
【００５６】
また、タイマユニット９は、当該マイコン１における内部クロックによってカウントアップされるフリーランニングタイマ１９と、立ち上がりエッジキャプチャレジスタ２１と、立ち上がりエッジキャプチャモードレジスタ２３と、立ち上がりエッジキャプチャイネーブルレジスタ２５と、立ち上がりエッジキャプチャ制御回路２７と、立ち下がりエッジキャプチャレジスタ３１と、立ち下がりエッジキャプチャモードレジスタ３３と、立ち下がりエッジキャプチャイネーブルレジスタ３５と、立ち下がりエッジキャプチャ制御回路３７と、割り込み要求信号生成部４１と、割り込み要求有効エッジ設定レジスタ４３とを備えている。
【００５７】
そして、エッジ検出ポート１５から出力される立ち上がりエッジ検出信号が、立ち上がりエッジキャプチャ制御回路２７と割り込み要求信号生成部４１とに入力され、また、エッジ検出ポート１５から出力される立ち下がりエッジ検出信号が、立ち下がりエッジキャプチャ制御回路３７と割り込み要求信号生成部４１とに入力されるようになっている。
【００５８】
立ち上がりエッジキャプチャレジスタ２１は、フリーランニングタイマ１９と同じビット数のレジスタであり、上記立ち上がりエッジ検出信号が立ち上がりエッジキャプチャ制御回路２７を介して入力されると、その時のフリーランニングタイマ１９のカウント値（以下、タイマ値という）をラッチする（記憶する）。そして、立ち上がりエッジキャプチャレジスタ２１は、ＣＰＵ３からのリードアクセスが可能である。
【００５９】
立ち上がりエッジキャプチャモードレジスタ２３は、立ち上がりエッジキャプチャ制御回路２７の動作モードを設定するための１ビットのレジスタであり、ＣＰＵ３によって“１”か“０”が書き込まれる。
【００６０】
立ち上がりエッジキャプチャイネーブルレジスタ２５は、立ち上がりエッジキャプチャレジスタ２１がタイマ値をラッチする毎（即ち、更新記憶する毎）に“１”がセットされる１ビットのレジスタである。そして、この立ち上がりエッジキャプチャイネーブルレジスタ２５の値は、ＣＰＵ３によって“０”に書き換えることができるようになっている。
【００６１】
立ち上がりエッジキャプチャ制御回路２７は、立ち上がりエッジキャプチャモードレジスタ２３の値が“０”である場合には、動作モードがノーマルモードとなり、立ち上がりエッジキャプチャモードレジスタ２３の値が“１”である場合には、動作モードがワンショットモードとなる。尚、この対応関係とは逆に、立ち上がりエッジキャプチャモードレジスタ２３の値は、“０”がワンショットモードに対応し、“１”がノーマルモードに対応するようになっていても良い。また、このことは、後述する立ち下がりエッジキャプチャモードレジスタ３３の値についても同様である。
【００６２】
そして、立ち上がりエッジキャプチャ制御回路２７は、ノーマルモードの場合には、エッジ検出ポート１５からの立ち上がりエッジ検出信号を、立ち上がりエッジキャプチャレジスタ２１に、そのまま出力する。
【００６３】
よって、立ち上がりエッジキャプチャ制御回路２７の動作モードがノーマルモードに設定された場合には、立ち上がりエッジについてのタイマユニット９での処理形態がノーマルモードとなり、そのノーマルモードでは、端子１７への入力信号に立ち上がりエッジが発生する毎に、立ち上がりエッジキャプチャレジスタ２１がタイマ値を更新記憶することとなる。
【００６４】
また、立ち上がりエッジキャプチャ制御回路２７は、ワンショットモードの場合には、立ち上がりエッジキャプチャイネーブルレジスタ２５の値が“０”ならば、エッジ検出ポート１５からの立ち上がりエッジ検出信号を立ち上がりエッジキャプチャレジスタ２１に出力するが、立ち上がりエッジキャプチャイネーブルレジスタ２５の値が“１”ならば、立ち上がりエッジ検出信号を立ち上がりエッジキャプチャレジスタ２１に出力しなくなる。このため、立ち上がりエッジキャプチャレジスタ２１は、立ち上がりエッジキャプチャイネーブルレジスタ２５の値が“０”の場合にだけ、タイマ値を更新記憶することとなる。
【００６５】
よって、立ち上がりエッジキャプチャ制御回路２７の動作モードがワンショットモードに設定された場合には、立ち上がりエッジについてのタイマユニット９での処理形態がワンショットモードとなり、そのワンショットモードでは、ＣＰＵ３によって立ち上がりエッジキャプチャイネーブルレジスタ２５の値が“０”に設定されてから、端子１７への入力信号に立ち上がりエッジが最初に発生すると、立ち上がりエッジキャプチャレジスタ２１がタイマ値を更新記憶するが、その更新記憶時点からＣＰＵ３によって立ち上がりエッジキャプチャイネーブルレジスタ２５の値が“１”から“０”に書き換えられるまでの間は、入力信号に立ち上がりエッジが発生しても、立ち上がりエッジキャプチャレジスタ２１がタイマ値を更新記憶することが、禁止されることとなる。
【００６６】
また、立ち下がりエッジキャプチャレジスタ３１、立ち下がりエッジキャプチャモードレジスタ３３、立ち下がりエッジキャプチャイネーブルレジスタ３５及び立ち下がりエッジキャプチャ制御回路３７の各々も、上記立ち上がりエッジキャプチャレジスタ２１、立ち上がりエッジキャプチャモードレジスタ２３、立ち上がりエッジキャプチャイネーブルレジスタ２５及び立ち上がりエッジキャプチャ制御回路２７の各々と同様のものである。
【００６７】
即ち、立ち下がりエッジキャプチャレジスタ３１も、フリーランニングタイマ１９と同じビット数のレジスタであり、上記立ち下がりエッジ検出信号が立ち下がりエッジキャプチャ制御回路３７を介して入力されると、その時のタイマ値をラッチする（記憶する）。そして、立ち下がりエッジキャプチャレジスタ３１も、ＣＰＵ３からのリードアクセスが可能である。
【００６８】
立ち下がりエッジキャプチャモードレジスタ３３は、立ち下がりエッジキャプチャ制御回路３７の動作モードを設定するための１ビットのレジスタであり、ＣＰＵ３によって“１”か“０”が書き込まれる。
【００６９】
立ち下がりエッジキャプチャイネーブルレジスタ３５は、立ち下がりエッジキャプチャレジスタ３１がタイマ値をラッチする毎（即ち、更新記憶する毎）に“１”がセットされる１ビットのレジスタである。そして、この立ち下がりエッジキャプチャイネーブルレジスタ３５の値は、ＣＰＵ３によって“０”に書き換えることができるようになっている。
【００７０】
立ち下がりエッジキャプチャ制御回路３７は、立ち下がりエッジキャプチャモードレジスタ３３の値が“０”である場合には、動作モードがノーマルモードとなり、立ち下がりエッジキャプチャモードレジスタ３３の値が“１”である場合には、動作モードがワンショットモードとなる。
【００７１】
そして、立ち下がりエッジキャプチャ制御回路３７は、ノーマルモードの場合には、エッジ検出ポート１５からの立ち下がりエッジ検出信号を、立ち下がりエッジキャプチャレジスタ３１に、そのまま出力する。
【００７２】
よって、立ち下がりエッジキャプチャ制御回路３７の動作モードがノーマルモードに設定された場合には、立ち下がりエッジについてのタイマユニット９での処理形態がノーマルモードとなり、そのノーマルモードでは、端子１７への入力信号に立ち下がりエッジが発生する毎に、立ち下がりエッジキャプチャレジスタ３１がタイマ値を更新記憶することとなる。
【００７３】
また、立ち下がりエッジキャプチャ制御回路３７は、ワンショットモードの場合には、立ち下がりエッジキャプチャイネーブルレジスタ３５の値が“０”ならば、エッジ検出ポート１５からの立ち下がりエッジ検出信号を立ち下がりエッジキャプチャレジスタ３１に出力するが、立ち下がりエッジキャプチャイネーブルレジスタ３５の値が“１”ならば、立ち下がりエッジ検出信号を立ち下がりエッジキャプチャレジスタ３１に出力しなくなる。
【００７４】
よって、立ち下がりエッジキャプチャ制御回路３７の動作モードがワンショットモードに設定された場合には、立ち下がりエッジについてのタイマユニット９での処理形態がワンショットモードとなり、そのワンショットモードでは、ＣＰＵ３によって立ち下がりエッジキャプチャイネーブルレジスタ３５の値が“０”に設定されてから、端子１７への入力信号に立ち下がりエッジが最初に発生すると、立ち下がりエッジキャプチャレジスタ３１がタイマ値を更新記憶するが、その更新記憶時点からＣＰＵ３によって立ち下がりエッジキャプチャイネーブルレジスタ３５の値が“１”から“０”に書き換えられるまでの間は、入力信号に立ち下がりエッジが発生しても、立ち下がりエッジキャプチャレジスタ３１がタイマ値を更新記憶することが、禁止されることとなる。
【００７５】
一方、タイマユニット９において、割り込み要求有効エッジ設定レジスタ４３は、ＣＰＵ３によってライトアクセスが可能な１ビットのレジスタである。
そして、割り込み要求信号生成部４１は、エッジ検出ポート１５からの立ち上がりエッジ検出信号と立ち下がりエッジ検出信号とのうち、割り込み要求有効エッジ設定レジスタ４３の値によって指示される方の信号が入力されると、割り込みコントローラ１３へ割り込み要求信号を出力する。
【００７６】
本実施形態では、例えば、割り込み要求信号生成部４１は、割り込み要求有効エッジ設定レジスタ４３の値が“１”の場合には、立ち上がりエッジ検出信号が入力されると割り込み要求信号を出力し、逆に、割り込み要求有効エッジ設定レジスタ４３の値が“０”の場合には、立ち下がりエッジ検出信号が入力されると割り込み要求信号を出力する。
【００７７】
そして、割り込み要求信号生成部４１から出力される割り込み要求信号は、割り込みコントローラ１３からＣＰＵ３へ、外部割り込みに対応する割り込み要求信号（即ち、外部割り込み要求信号）として出力される。すると、ＣＰＵ３は、その外部割り込み要求信号に対応する割り込み処理（即ち、外部割り込み処理）を実行することとなる。
【００７８】
つまり、割り込み要求有効エッジ設定レジスタ４３は、割り込み要求の有効エッジ（詳しくは、割り込み要求を発生させることとなる入力信号のエッジ）を任意に設定するためのレジスタであり、そのレジスタ４３の値を“１”にすれば、立ち上がりエッジが割り込み要求の有効エッジとなり、そのレジスタ４３の値を“０”にすれば、立ち下がりエッジが割り込み要求の有効エッジとなる。
【００７９】
尚、割り込み要求有効エッジ設定レジスタ４３を複数ビットのレジスタにして、割り込み要求信号生成部４１が、立ち上がりエッジ検出信号と立ち下がりエッジ検出信号との何れが入力されても割り込み要求信号を出力するモードと、立ち上がりエッジ検出信号が入力された時にだけ割り込み要求信号を出力するモードと、立ち下がりエッジ検出信号が入力された時にだけ割り込み要求信号を出力するモードと、立ち上がりエッジ検出信号と立ち下がりエッジ検出信号との何れが入力されても割り込み要求信号を出力しないモードとの、４つのモードに切り替わるように構成しても良い。
【００８０】
以上のことから、タイマユニット９の動作内容をまとめると、図２に示すフローチャートのようになる。尚、ここでは、端子１７への入力信号に立ち上がりエッジが発生した場合を例に挙げて説明するが、入力信号に立ち下がりエッジが発生した場合にも同様の動作となる。
【００８１】
図２に示すように、例えば、入力信号に立ち上がりエッジが発生した時に、立ち上がりエッジキャプチャモードレジスタ２３の値が“０”であれば（Ｓ１０１：ＮＯ）、立ち上がりエッジキャプチャイネーブルレジスタ２５の値に拘わらず、立ち上がりエッジキャプチャレジスタ２１がタイマ値を更新記憶し（Ｓ１０２）、その更新記憶が行われることに伴って、立ち上がりエッジキャプチャイネーブルレジスタ２５に“１”がセットされる（Ｓ１０３）。
【００８２】
また、入力信号に立ち上がりエッジが発生した時に、立ち上がりエッジキャプチャモードレジスタ２３の値が“１”であれば（Ｓ１０１：ＹＥＳ）、立ち上がりエッジキャプチャイネーブルレジスタ２５の値が“０”の場合にだけ（Ｓ１０４：ＹＥＳ）、立ち上がりエッジキャプチャレジスタ２１がタイマ値を更新記憶し（Ｓ１０２）、その更新記憶が行われることに伴って、立ち上がりエッジキャプチャイネーブルレジスタ２５に“１”がセットされる（Ｓ１０３）。
【００８３】
このため、入力信号に立ち上がりエッジが発生した時に、立ち上がりエッジキャプチャモードレジスタ２３の値が“１”であり（Ｓ１０１：ＹＥＳ）、且つ、立ち上がりエッジキャプチャイネーブルレジスタ２５の値が“１”であれば（Ｓ１０４：ＮＯ）、立ち上がりエッジキャプチャレジスタ２１はタイマ値を更新記憶しない。
【００８４】
一方、入力信号に立ち上がりエッジが発生した時に、割り込み要求有効エッジ設定レジスタ４３によって、立ち上がりエッジが割り込み要求の有効エッジに設定されているならば（Ｓ１５０：ＹＥＳ）、割り込み要求信号生成部４１が割り込みコントローラ１３へ割り込み要求信号を出力する（Ｓ１０６）。逆に、立ち上がりエッジが割り込み要求の有効エッジに設定されていなければ（Ｓ１０５：ＮＯ）、割り込み要求信号生成部４１は割り込み要求信号を出力しない。
【００８５】
尚、端子１７への入力信号に立ち下がりエッジが発生した場合のタイマユニット９の動作は、上記図２に関する説明において、「立ち上がりエッジ」を「立ち下がりエッジ」と読み替え、「レジスタ２１」を「レジスタ３１」と読み替え、「レジスタ２３」を「レジスタ３３」と読み替え、「レジスタ２５」を「レジスタ３５」と読み替えた動作になる。
【００８６】
次に、以上のようなマイコン１の使用例について説明する。
本実施形態において、マイコン１の端子１７には、立ち下がりエッジの発生周期が一定であるＰＷＭ信号が入力される。そして、マイコン１では、ＣＰＵ３が、図３及び図４の処理を実行することにより、ＰＷＭ信号のデューティ比を算出する。
【００８７】
尚、以下の説明において、「周期エッジ」とは、ＰＷＭ信号のエッジのうち、該ＰＷＭ信号の１周期毎に発生する方のエッジ（この例では、立ち下がりエッジ）のことであり、「非周期エッジ」とは、周期エッジとは反対方向のエッジ（この例では、立ち上がりエッジ）のことである。そして、本実施形態では、ＰＷＭ信号における周期エッジ（立ち下がりエッジ）の発生間隔を、ＰＷＭ信号の１周期時間（以下、単に「周期」という）として検出すると共に、周期エッジ（立ち下がりエッジ）が発生してから非周期エッジ（立ち上がりエッジ）が発生するまでの時間を、パルス幅時間（以下、単に「パルス幅」という）として検出し、その検出した周期に対するパルス幅の比を、ＰＷＭ信号のデューティ比として算出する。
【００８８】
まず、図３は、マイコン１が起動した直後にＣＰＵ３が実行する初期化処理を表すフローチャートである。
図３に示すように、ＣＰＵ３は、初期化処理の実行を開始すると、まずＳ１１０にて、割り込み要求有効エッジ設定レジスタ４３に“０”を書き込むことにより、周期エッジである立ち下がりエッジを、割り込み要求の有効エッジに設定する。
【００８９】
そして、次のＳ１２０にて、立ち上がりエッジキャプチャモードレジスタ２３に“１”を書き込むことにより、立ち上がりエッジキャプチャ制御回路２７の動作モードをワンショットモードに設定する。また、次のＳ１３０にて、立ち下がりエッジキャプチャモードレジスタ３３に“０”を書き込むことにより、立ち下がりエッジキャプチャ制御回路３７の動作モードをノーマルモードに設定する。つまり、本実施形態では、ＰＷＭ信号の立ち上がりエッジについては、タイマユニット９での処理形態をワンショットモードに設定し、ＰＷＭ信号の立ち下がりエッジについては、タイマユニット９での処理形態をノーマルモードに設定している。
【００９０】
次に、Ｓ１４０にて、立ち上がりエッジキャプチャイネーブルレジスタ２５に、初期値としての“０”を書き込み、続くＳ１５０にて、立ち下がりエッジキャプチャイネーブルレジスタ３５にも、初期値としての“０”を書き込む。
【００９１】
そして、その後、当該初期化処理を終了する。
次に、図４は、ＣＰＵ３が、割り込みコントローラ１３からの外部割り込み要求信号（即ち、割り込み要求信号生成部４１からの割り込み要求信号）を受けると実行する割り込み処理を表すフローチャートである。このため、図４の割り込み処理は、端子１７へのＰＷＭ信号に立ち下がりエッジが発生する毎に実行される。
【００９２】
図４に示すように、ＣＰＵ３は、割り込み処理の実行を開始すると、まずＳ２１０にて、立ち下がりエッジキャプチャレジスタ３１の値を読み込み、その読み込んだ値を、周期エッジ今回発生時刻としてＲＡＭ７に記憶する。尚、周期エッジ今回発生時刻とは、「周期エッジが今回発生した時刻」のことである。
【００９３】
次に、Ｓ２１５にて、今回の当該割り込み処理が初回の処理（詳しくは、当該マイコン１が起動してから最初に実行する処理）であるか否かを判定する。そして、今回の当該割り込み処理が初回の処理でなければ（即ち、２回目以降の処理であれば）、Ｓ２２０に進む。
【００９４】
Ｓ２２０では、立ち上がりエッジキャプチャレジスタ２１の値を読み込み、その読み込んだ値を、非周期エッジ発生時刻としてＲＡＭ７に記憶する。尚、非周期エッジ派生時刻とは、「非周期エッジが発生した時刻」のことである。
【００９５】
そして、次のＳ２３０にて、上記Ｓ２１０でＲＡＭ７に記憶した周期エッジ今回発生時刻から、ＲＡＭ７に記憶されている周期エッジ前回発生時刻を引くことにより、ＰＷＭ信号の周期（詳しくは、ＰＷＭ信号に周期エッジが前回発生してから今回発生するまでの時間）を算出する。尚、周期エッジ前回発生時刻は、「周期エッジが前回発生した時刻」のことであり、当該割り込み処理が前回実行された際に、Ｓ２１０で立ち下がりエッジキャプチャレジスタ３１から読み込んで、後述のＳ２７０でＲＡＭ７に記憶しておいた値である。
【００９６】
そして、続くＳ２４０にて、上記Ｓ２２０でＲＡＭ７に記憶した非周期エッジ発生時刻から、周期エッジ前回発生時刻を引くことにより、ＰＷＭ信号のパルス幅（詳しくは、ＰＷＭ信号に周期エッジが前回発生してから非周期エッジが発生するまでの時間）を算出する。
【００９７】
尚、本実施形態では、エッジの発生時刻を示す時刻情報がタイマ値であるため、Ｓ２３０で算出される周期の値は、実際には、周期の時間をフリーランニングタイマ１９の１カウント分の時間（即ち、内部クロックの１周期）で割った値となり、同様に、Ｓ２４０で算出されるパルス幅の値は、実際には、パルス幅の時間を上記１カウント分の時間で割った値となる。
【００９８】
次に、Ｓ２５０にて、上記Ｓ２３０で算出した周期が正常範囲内であるか否かを判定する。尚、この正常範囲は、周期の値として正常と考えられる許容範囲に設定されている。
上記Ｓ２５０にて、周期が正常範囲内であると判定した場合には、Ｓ２６０に進み、Ｓ２３０で算出した周期と、Ｓ２４０で算出したパルス幅とから、ＰＷＭ信号のデューティ比を算出する。具体的には、周期に対するパルス幅の比（＝パルス幅／周期）を、デューティ比として算出する。
【００９９】
そして、次のＳ２７０にて、周期エッジ今回発生時刻を、ＲＡＭ７に、新たな周期エッジ前回発生時刻として更新記憶する。
そして更に、次のＳ２８０にて、立ち上がりエッジキャプチャイネーブルレジスタ３５に“０”を書き込むことにより、立ち上がりエッジキャプチャレジスタ２１がタイマ値を更新記憶するのを許可し、その後、当該割り込み処理を終了する。
【０１００】
また、上記Ｓ２５０にて、周期が正常範囲内ではないと判定した場合には、Ｓ２６０とＳ２７０をスキップして、Ｓ２８０に進み、立ち上がりエッジキャプチャイネーブルレジスタ３５に“０”を書き込んだ後、当該割り込み処理を終了する。
【０１０１】
一方、上記Ｓ２１５にて、今回の当該割り込み処理が初回の処理であると判定した場合には、そのままＳ２７０に移行する。つまり、初回の割り込み処理では、周期とデューティ比を算出することができないため、次回の割り込み処理に備えるために、立ち下がりエッジキャプチャレジスタ３１の値を周期エッジ前回発生時刻としてＲＡＭ７に記憶する処理（Ｓ２１０及びＳ２７０）と、立ち上がりエッジキャプチャイネーブルレジスタ３５に“０”を書き込む処理（Ｓ２８０）だけを行う。
【０１０２】
次に、マイコン１の作用及び効果について、図５〜図９を用い説明する。
まず図５は、ＰＷＭ信号にノイズが乗らない場合の動作を表すタイムチャートである。
図５に示すように、マイコン１では、ＰＷＭ信号に立ち下がりエッジが発生する毎に、ＣＰＵ３が図４の割り込み処理を実行する。
【０１０３】
そして、前述したように、ＰＷＭ信号の立ち下がりエッジについては、タイマユニット９での処理形態をノーマルモードに設定している（図３のＳ１３０）。また、ＰＷＭ信号の立ち上がりエッジについては、タイマユニット９での処理形態をワンショットモードに設定している（図３のＳ１２０）が、ＣＰＵ３は、割り込み処理において、立ち上がりエッジキャプチャイネーブルレジスタ３５に“０”を書き込むようになっている（図４のＳ２８０）。
【０１０４】
このため、図５に示すように、ＰＷＭ信号に、時刻ｔ１で立ち下がりエッジが発生し、時刻ｔ２で立ち上がりエッジが発生し、時刻ｔ３で立ち下がりエッジが発生したとすると、時刻ｔ１では、その時刻ｔ１でのタイマ値（Ｃ１）が立ち下がりエッジキャプチャレジスタ３１に記憶され、時刻ｔ２では、その時刻ｔ２でのタイマ値（Ｃ２）が立ち上がりエッジキャプチャレジスタ２１に記憶され、時刻ｔ３では、その時刻ｔ３でのタイマ値（Ｃ３）が立ち下がりエッジキャプチャレジスタ３１に記憶される。
【０１０５】
そして、時刻ｔ３の立ち下がりエッジに伴う割り込み処理では、時刻ｔ１から時刻ｔ３までの時間（詳しくは、時刻ｔ１から時刻ｔ３までのフリーランニングタイマのカウント数（＝Ｃ３−Ｃ１））を周期Ｔとして算出する（Ｓ２３０）と共に、時刻ｔ１から時刻ｔ２までの時間（詳しくは、時刻ｔ１から時刻ｔ２までのフリーランニングタイマのカウント数（＝Ｃ２−Ｃ１））をパルス幅Ｗとして算出し（Ｓ２４０）、更に、算出した周期Ｔに対するパルス幅Ｗの比（＝Ｗ／Ｔ）を、デューティ比として算出する（Ｓ２６０）こととなる。
【０１０６】
次に、図６は、ＰＷＭ信号にノイズが乗った場合の動作を表す第１のタイムチャートであり、詳しくは、ＰＷＭ信号に正規の立ち下がりエッジが発生してからＣＰＵ３が割り込み処理を開始するまでの処理開始遅れ期間中に、ＰＷＭ信号にノイズによる不要な立ち上がりエッジが発生した場合の動作を表すタイムチャートである。尚、正規の立ち下がりエッジとは、発生間隔がＰＷＭ信号の周期として正常な立ち下がりエッジであり、換言すれば、発生間隔が図４のＳ２５０での判定に用いられる正常範囲に入っている立ち下がりエッジである。
【０１０７】
図６に示すように、図５と同じ時刻ｔ３でＰＷＭ信号に正規の立ち下がりエッジが発生してから、ＣＰＵ３が割り込み処理（時刻ｔ３の立ち下がりエッジに伴う割り込み処理）を開始するまでの処理開始遅れ期間中の時刻ｔ４にて、ＰＷＭ信号にノイズによる不要な立ち上がりエッジが発生したとする。
【０１０８】
この場合、時刻ｔ３よりも前の時刻ｔ２にて、ＰＷＭ信号に正規の立ち下がりエッジ後の最初の立ち上がりエッジが発生しており、その時刻ｔ２で、立ち上がりエッジキャプチャレジスタ２１がタイマ値（Ｃ２）を記憶したことにより、立ち上がりエッジキャプチャイネーブルレジスタ３５の値が“１”になっている。そして、立ち上がりエッジキャプチャイネーブルレジスタ３５の値が“１”になっている状態は、時刻ｔ３の立ち下がりエッジに伴う割り込み処理（図６において、時刻ｔ３より後の最初の割り込み処理）におけるＳ２８０が実行されるまで継続する。
【０１０９】
このため、時刻ｔ４でＰＷＭ信号に立ち上がりエッジが発生しても、立ち上がりエッジキャプチャレジスタ２１の値は、更新されず、ＰＷＭ信号に正規の立ち下がりエッジが前回発生してから最初に立ち上がりエッジが発生した時刻ｔ２でのタイマ値（Ｃ２）のままになる。
【０１１０】
よって、時刻ｔ３の立ち下がりエッジに伴う割り込み処理において、Ｓ２２０では、立ち上がりエッジキャプチャレジスタ２１から、時刻ｔ４でのタイマ値ではなく、時刻ｔ２でのタイマ値（Ｃ２）を取得することができ、その結果、Ｓ２４０で誤ったパルス幅を算出してしまうことを回避することができる。つまり、時刻ｔ３の立ち下がりエッジに伴う割り込み処理では、図５の場合と同様に、立ち下がりエッジが前回発生してから最初に立ち上がりエッジが発生した時までの時間（時刻ｔ１から時刻ｔ２までのフリーランニングタイマのカウント数（＝Ｃ２−Ｃ１））をパルス幅Ｗとして算出することができ、ノイズによるパルス幅の誤算出を回避することができる。そして、このため、デューティ比も正しく算出することができる。
【０１１１】
尚、図６の例では、時刻ｔ４の後の時刻ｔ５にて、ＰＷＭ信号にノイズによる立ち下がりエッジが発生しているが、その時刻ｔ５は、時刻ｔ３の立ち下がりエッジに伴う割り込み処理において、立ち下がりエッジキャプチャレジスタ３１の値を読み込む処理（Ｓ２１０）が行われた後である。このため、時刻ｔ３の立ち下がりエッジに伴う割り込み処理において、Ｓ２１０では、立ち下がりエッジキャプチャレジスタ３１から、時刻ｔ３でのタイマ値（Ｃ３）を読み込むこととなる。また、図６では、時刻ｔ１から時刻ｔ３までの時間を「Ｔ１」と記載している。そして、図６の例において、時刻ｔ３の立ち下がりエッジに伴う割り込み処理のＳ２３０では、その時間Ｔ１に相当するフリーランニングタイマのカウント数（＝Ｃ３−Ｃ１）が、周期として算出され、その回の割り込み処理のＳ２６０では、「パルス幅Ｗ／時間Ｔ１」の値が、デューティ比として算出されることとなる。
【０１１２】
次に、図７は、ＰＷＭ信号にノイズが乗った場合の動作を表す第２のタイムチャートであり、詳しくは、ＰＷＭ信号に正規の立ち下がりエッジが発生してからＣＰＵ３が割り込み処理を開始するまでの処理開始遅れ期間中に、ＰＷＭ信号にノイズによる不要な立ち上がりエッジと立ち下がりエッジとの両方が発生し、更に、前回の正規の立ち下がりエッジから不要な立ち下がりエッジまでの間隔（図７におけるＴ１）も、ＰＷＭ信号の周期として正常と考えられる許容範囲内であった場合の動作を表すタイムチャートである。
【０１１３】
図７に示すように、図５と同じ時刻ｔ３でＰＷＭ信号に正規の立ち下がりエッジが発生してから、ＣＰＵ３が割り込み処理（時刻ｔ３の立ち下がりエッジに伴う割り込み処理）を開始するまでの処理開始遅れ期間中の時刻ｔ４にて、ＰＷＭ信号にノイズによる不要な立ち上がりエッジが発生すると共に、その処理開始遅れ期間中の時刻ｔ５にて、ＰＷＭ信号にノイズによる不要な立ち下がりエッジが発生し、更に、正規の立ち下がりエッジが前回発生した時刻ｔ１から時刻ｔ５までの時間Ｔ１も、ＰＷＭ信号の周期として正常と考えられる許容範囲内であったとする。
【０１１４】
この場合も、図６の場合と同様に、時刻ｔ３よりも前の時刻ｔ２にて、ＰＷＭ信号に正規の立ち下がりエッジ後の最初の立ち上がりエッジが発生しており、その時刻ｔ２で、立ち上がりエッジキャプチャレジスタ２１がタイマ値（Ｃ２）を記憶したことにより、立ち上がりエッジキャプチャイネーブルレジスタ３５の値が“１”になっている。そして、立ち上がりエッジキャプチャイネーブルレジスタ３５の値が“１”になっている状態は、時刻ｔ３の立ち下がりエッジに伴う割り込み処理（図７において、時刻ｔ３より後の最初の割り込み処理）におけるＳ２８０が実行されるまで継続する。このため、時刻ｔ４でＰＷＭ信号に立ち上がりエッジが発生しても、立ち上がりエッジキャプチャレジスタ２１の値は、更新されず、ＰＷＭ信号に正規の立ち下がりエッジが前回発生してから最初に立ち上がりエッジが発生した時刻ｔ２でのタイマ値（Ｃ２）のままになる。
【０１１５】
よって、時刻ｔ３の立ち下がりエッジに伴う割り込み処理において、Ｓ２２０では、立ち上がりエッジキャプチャレジスタ２１から、時刻ｔ４でのタイマ値ではなく、時刻ｔ２でのタイマ値（Ｃ２）を取得することができ、その結果、Ｓ２４０では、時刻ｔ１から時刻ｔ２までのフリーランニングタイマのカウント数（＝Ｃ２−Ｃ１）をパルス幅Ｗとして算出することができる。このため、ノイズによるパルス幅の誤算出を回避することができる。
【０１１６】
また、立ち下がりエッジについては、タイマユニット９での処理形態をノーマルモードに設定しているため、時刻ｔ５で立ち下がりエッジが発生すると、立ち上がりエッジキャプチャレジスタ２１の値が、時刻ｔ３でのタイマ値（Ｃ３）から、時刻ｔ５でのタイマ値（Ｃ５）に更新される。このため、時刻ｔ３の立ち下がりエッジに伴う割り込み処理において、Ｓ２１０では、立ち下がりエッジキャプチャレジスタ３１から、時刻ｔ５でのタイマ値（Ｃ５）を取得することとなり、Ｓ２３０では、時刻ｔ１から時刻ｔ５までの時間Ｔ１に相当するフリーランニングタイマのカウント数（＝Ｃ５−Ｃ１）を周期として算出することとなる。そして、この例では、時刻ｔ３から時刻ｔ５までの時間が微小であって、時刻ｔ１から時刻ｔ５までの時間Ｔ１もＰＷＭ信号の周期の許容範囲内であるため、時刻ｔ３の立ち下がりエッジに伴う割り込み処理において、Ｓ２５０では、Ｓ２３０で算出した周期が正常範囲内であると判定することとなり、Ｓ２６０では、「パルス幅Ｗ／時間Ｔ１」の値であって、正しいと見なすことのできるデューティ比が算出されることとなる。
【０１１７】
尚、図７に関する上記説明では、時刻ｔ３の立ち下がりエッジが正規の立ち下がりエッジで、時刻ｔ５の立ち下がりエッジがノイズによる不要な立ち下がりエッジであると説明したが、それとは逆に、時刻ｔ５の立ち下がりエッジが正規の立ち下がりエッジで、時刻ｔ３の立ち下がりエッジがノイズによる不要な立ち下がりエッジであると見なしても、時刻ｔ３の立ち下がりエッジに伴う割り込み処理による算出結果は実質的に同じになる。つまり、図７の例において、時刻ｔ１から時刻ｔ３までの時間と、時刻ｔ１から時刻ｔ５までの時間とが、両方共にＰＷＭ信号の周期として許容範囲内であれば、時刻ｔ３と時刻ｔ５のどちらの立ち下がりエッジが正規の立ち下がりエッジであっても処理結果は実質的に変わらない。
【０１１８】
次に、図８は、ＰＷＭ信号にノイズが乗った場合の動作を表す第３のタイムチャートであり、詳しくは、ＰＷＭ信号に正規の立ち下がりエッジが発生してから正規の立ち上がりエッジが発生するまでのパルス幅期間（本実施形態ではローレベル期間）中に、ノイズによって、立ち上がりエッジと立ち下がりエッジとがその順に発生した場合の動作を表すタイムチャートである。
【０１１９】
図８に示すように、図５と同じ時刻ｔ１から時刻ｔ２までのパルス幅期間（ローレベル期間）において、ＣＰＵ３が時刻ｔ１の立ち下がりエッジに伴う割り込み処理（図８において、時刻ｔ１より後の最初の割り込み処理）を行った後の時刻ｔａで、ＰＷＭ信号にノイズによる不要な立ち上がりエッジが発生すると共に、その直後の時刻ｔｂで、ＰＷＭ信号にノイズによる不要な立ち下がりエッジが発生したとする。
【０１２０】
この場合、時刻ｔａの前に、立ち上がりエッジキャプチャイネーブルレジスタ２５の値が“０”に戻されているため、時刻ｔａでノイズによる立ち上がりエッジが発生すると、その時刻ｔａでのタイマ値（Ｃａ）が、立ち上がりエッジキャプチャレジスタ２１に記憶される。そして、時刻ｔｂでノイズによる立ち下がりエッジが発生すると、その時刻ｔｂでのタイマ値（Ｃｂ）が、立ち下がりエッジキャプチャレジスタ３１に記憶される。
【０１２１】
しかし、時刻ｔｂの立ち下がりエッジに伴う割り込み処理においては、両キャプチャレジスタ２１，３１から読み込んだ値が無効になり、誤ったデューティ比を算出してしまうことが防止される。その回の割り込み処理において、Ｓ２５０では、Ｓ２３０で算出した周期（即ち、図８において、時刻ｔ１から時刻ｔｂまでの時間Ｔ１に相当する値）が正常範囲内ではないと判定することとなり、Ｓ２６０とＳ２７０がスキップされるからである。
【０１２２】
また、時刻ｔｂの立ち下がりエッジに伴う割り込み処理においても、Ｓ２８０により、立ち上がりエッジキャプチャイネーブルレジスタ２５の値を“０”にするため、その後の時刻ｔ２にて、ＰＷＭ信号に正規の立ち上がりエッジが発生すると、その時刻ｔ２でのタイマ値（Ｃ２）が立ち上がりエッジキャプチャレジスタ２１に更新記憶される。
【０１２３】
そして、その後の時刻ｔ３にて、ＰＷＭ信号に正規の立ち下がりエッジが発生すると、その時刻ｔ３でのタイマ値（Ｃ３）が立ち下がりエッジキャプチャレジスタ３１に更新記憶される。
【０１２４】
更に、時刻ｔ３の立ち下がりエッジに伴う割り込み処理が開始される時点において、ＲＡＭ７内の周期エッジ前回発生時刻は、ノイズによる立ち下がりエッジが発生した時刻ｔｂでのタイマ値（Ｃｂ）ではなく、前回の正規の立ち下がりエッジが発生した時刻ｔ１でのタイマ値（Ｃ１）になっている。時刻ｔｂの立ち下がりエッジに伴う割り込み処理においては、デューティ比を算出するＳ２６０だけでなく、周期エッジ前回発生時刻を更新するＳ２７０もスキップされているからである。
【０１２５】
よって、時刻ｔ３の立ち下がりエッジに伴う割り込み処理が実行されれば、その回の割り込み処理により、正しい周期（即ち、図８において、時刻ｔ１から時刻ｔｂまでの時間Ｔ１と、時刻ｔｂから時刻ｔ３までの時間Ｔ２とを加算した時間（＝Ｔ１＋Ｔ２）に相当する値）と、正しいパルス幅（即ち、図８において、時刻ｔ１から時刻ｔ２までの時間Ｗに相当する値）とが算出され、延いては、正しいデューティ比（図８における「Ｗ／（Ｔ１＋Ｔ２」）が算出されることとなる。
【０１２６】
次に、図９は、ＰＷＭ信号にノイズが乗った場合の動作を表す第４のタイムチャートであり、詳しくは、ＰＷＭ信号に正規の立ち上がりエッジが発生してから次の正規の立ち下がりエッジが発生するまでの反パルス幅期間（本実施形態ではハイレベル期間）中に、ノイズによって、立ち下がりエッジと立ち上がりエッジとがその順に発生した場合の動作を表すタイムチャートである。
【０１２７】
図９に示すように、図５と同じ時刻ｔ２から時刻ｔ３までの反パルス幅期間（ハイレベル期間）において、時刻ｔｃでＰＷＭ信号にノイズによる不要な立ち下がりエッジが発生し、その時刻ｔｃの立ち下がりエッジに伴う割り込み処理が開始されるよりも前の時刻ｔｄで、ＰＷＭ信号にノイズによる不要な立ち上がりエッジが発生したとする。
【０１２８】
この場合、時刻ｔｃでは、既に、立ち上がりエッジキャプチャレジスタ２１には正規の立ち上がりエッジが発生した時刻ｔ２でのタイマ値（Ｃ２）が記憶されていると共に、立ち上がりエッジキャプチャイネーブルレジスタ２５の値が“１”になっている。
【０１２９】
このため、時刻ｔｃの立ち下がりエッジに伴う割り込み処理が開始される前の時刻ｔｄでノイズによる立ち上がりエッジが発生しても、立ち上がりエッジキャプチャレジスタ２１の値は更新されずにタイマ値（Ｃ２）のままである。
【０１３０】
また、時刻ｔｃでノイズによる立ち下がりエッジが発生すると、その時刻ｔｃでのタイマ値（Ｃｃ）が、立ち下がりエッジキャプチャレジスタ３１に更新記憶されるが、その時刻ｔｃの立ち下がりエッジに伴う割り込み処理において、Ｓ２５０では、Ｓ２３０で算出した周期（即ち、図９において、時刻ｔ１から時刻ｔｃまでの時間Ｔ１に相当する値）が正常範囲内ではないと判定することとなり、Ｓ２６０とＳ２７０がスキップされる。よって、両キャプチャレジスタ２１，３１から読み込んだ値が無効になり、誤ったデューティ比を算出してしまうことが防止される。
【０１３１】
そして、その後の時刻ｔ３にて、ＰＷＭ信号に正規の立ち下がりエッジが発生すると、その時刻ｔ３でのタイマ値（Ｃ３）が立ち下がりエッジキャプチャレジスタ３１に更新記憶される。また、その時点において、立ち上がりエッジキャプチャレジスタ２１の値は、時刻ｔ２でのタイマ値（Ｃ２）のままになっている。
【０１３２】
更に、時刻ｔ３の立ち下がりエッジに伴う割り込み処理が開始される時点において、ＲＡＭ７内の周期エッジ前回発生時刻は、ノイズによる立ち下がりエッジが発生した時刻ｔｃでのタイマ値（Ｃｃ）ではなく、前回の正規の立ち下がりエッジが発生した時刻ｔ１でのタイマ値（Ｃ１）になっている。前述したように、時刻ｔｃの立ち下がりエッジに伴う割り込み処理においては、Ｓ２７０がスキップされているからである。
【０１３３】
よって、時刻ｔ３の立ち下がりエッジに伴う割り込み処理が実行されれば、その回の割り込み処理により、正しい周期（即ち、図９において、時刻ｔ１から時刻ｔｃまでの時間Ｔ１と、時刻ｔｃから時刻ｔ３までの時間Ｔ２とを加算した時間（＝Ｔ１＋Ｔ２）に相当する値）と、正しいパルス幅（即ち、図９において、時刻ｔ１から時刻ｔ２までの時間Ｗに相当する値）とが算出され、延いては、正しいデューティ比（図９における「Ｗ／（Ｔ１＋Ｔ２」）が算出されることとなる。
【０１３４】
一方、前述した図６の例において、時刻ｔ５の立ち下がりエッジに伴う割り込み処理（図６において一番右側に示している割り込み処理）では、Ｓ２１０にて、立ち下がりエッジキャプチャレジスタ３１から時刻ｔ５でのタイマ値（Ｃ５）を読み込むこととなり、Ｓ２３０では、時刻ｔ３から時刻ｔ５までの時間Ｔ２に相当するフリーランニングタイマのカウント数（＝Ｃ５−Ｃ３）を、周期として算出することとなるが、Ｓ２５０では、そのＳ２３０で算出した周期（時間Ｔ２に相当する値）が正常範囲内ではないと判定することとなり、Ｓ２６０とＳ２７０がスキップされる。
【０１３５】
つまり、図６の例において、時刻ｔ５の立ち下がりエッジに伴う割り込み処理では、図８における時刻ｔｂの立ち下がりエッジに伴う割り込み処理と同様の処理結果となる。よって、その後、ＰＷＭ信号に正規の立ち上がりエッジが発生してから正規の立ち下がりエッジが発生すれば、その正規の立ち下がりエッジに伴う割り込み処理により、正しい周期、パルス幅及びデューティ比が算出されることとなる。
【０１３６】
また同様に、前述した図７の例においても、時刻ｔ５の立ち下がりエッジに伴う割り込み処理（図７において一番右側に示している割り込み処理）では、Ｓ２１０にて、立ち下がりエッジキャプチャレジスタ３１から時刻ｔ５でのタイマ値（Ｃ５）を読み込むこととなる。そして、その回の割り込み処理において、Ｓ２３０で周期を算出する際には、周期エッジ前回発生時刻の値が、前回の割り込み処理（即ち、時刻ｔ３の立ち下がりエッジに伴う割り込み処理）のＳ２７０により時刻ｔ５でのタイマ値（Ｃ５）に設定されているため、０（＝Ｃ５−Ｃ５）を周期として算出することとなり、Ｓ２５０では、そのＳ２３０で算出した周期（＝０）が正常範囲内ではないと判定することとなる。よって、Ｓ２６０とＳ２７０がスキップされる。
【０１３７】
このため、図７の例において、時刻ｔ５の立ち下がりエッジに伴う割り込み処理でも、図８における時刻ｔｂの立ち下がりエッジに伴う割り込み処理と同様の処理結果となる。よって、その後、ＰＷＭ信号に正規の立ち上がりエッジが発生してから正規の立ち下がりエッジが発生すれば、その正規の立ち下がりエッジに伴う割り込み処理により、正しい周期、パルス幅及びデューティ比が算出されることとなる。
【０１３８】
以上のようなマイコン１によれば、立ち上がりエッジキャプチャモードレジスタ２３に“１”を書き込めば、入力信号の立ち上がりエッジについて、タイマユニット９での処理形態をワンショットモードに設定することができ、また、立ち下がりエッジキャプチャモードレジスタ３３に“１”を書き込めば、入力信号の立ち下がりエッジについて、タイマユニット９での処理形態をワンショットモードに設定することができる。
【０１３９】
そして、例えば、立ち上がりエッジについてワンショットモードに設定すれば、任意のモニタ開始時からＣＰＵ３が立ち上がりエッジキャプチャレジスタ２１の値を読み込む処理を行う時までのモニタ期間において、入力信号に立ち上がりエッジが複数回発生したとしても、立ち上がりエッジが最初に発生した時の時刻情報としてのタイマ値をＣＰＵ３に取得させることができる。
【０１４０】
そして更に、ＣＰＵ３が図３の初期化処理と図４の割り込み処理を行うことで、ＰＷＭ信号の周期、パルス幅及びデューティ比を算出することができると共に、ＰＷＭ信号にノイズが乗った場合に誤った算出結果を出してしてしまうことを回避することができる。
【０１４１】
尚、前述したマイコン１の使用例（ＰＷＭ信号のデューティ比を算出するための使用例）では、図４の割り込み処理におけるＳ２２０で立ち上がりエッジキャプチャレジスタ２１の値を読み込んだ時が、立ち上がりエッジについての前回のモニタ期間の終了時であり、次回のモニタ期間の開始時（モニタ開始時点）にも相当するが、モニタ開始時点については、厳密には、Ｓ２８０で立ち上がりエッジキャプチャイネーブルレジスタ２５に“０”を書き込んだ時となる。
【０１４２】
一方、上記実施形態のマイコン１では、立ち上がりエッジキャプチャレジスタ２１と、立ち下がりエッジキャプチャレジスタ３１とが、時刻記憶レジスタの一例に相当している。
【０１４３】
そして、立ち上がりエッジを有効エッジとする立ち上がりエッジキャプチャレジスタ２１については、動作モードがワンショットモードに設定された立ち上がりエッジキャプチャ制御回路２７と、立ち上がりエッジキャプチャイネーブルレジスタ２５とが、更新制御手段の一例に相当しており、ＣＰＵ３が立ち上がりエッジキャプチャイネーブルレジスタ２５に“０”を書き込む信号が、許可信号の一例に相当している。
【０１４４】
同様に、立ち下がりエッジを有効エッジとする立ち下がりエッジキャプチャレジスタ３１については、動作モードがワンショットモードに設定された立ち下がりエッジキャプチャ制御回路３７と、立ち下がりエッジキャプチャイネーブルレジスタ３５とが、更新制御手段の一例に相当しており、ＣＰＵ３が立ち下がりエッジキャプチャイネーブルレジスタ３５に“０”を書き込む信号が、許可信号の一例に相当している。
【０１４５】
また、マイコン１の使用例においては、ＰＭＷ信号の立ち下がりエッジ（周期エッジ）が、基準エッジの一例に相当し、ＰＭＷ信号の立ち上がりエッジ（非周期エッジ）が、非基準エッジの一例に相当し、立ち上がりエッジキャプチャレジスタ２１が、第１の時刻記憶レジスタの一例に相当し、立ち下がりエッジキャプチャレジスタ３１が、第２の時刻記憶レジスタの一例に相当し、割り込み要求信号生成部４１が、割り込み発生手段の一例に相当し、ＲＡＭ７が、メモリの一例に相当している。そして、図４のＳ２２０が、第１の処理の一例に相当し、図４のＳ２１０が、第２の処理の一例に相当し、図４のＳ２３０が、第３の処理の一例に相当し、周期エッジ前回発生時刻が、基準エッジ前回発生時刻情報の一例に相当し、図４のＳ２４０が、第４の処理の一例に相当し、図４のＳ２７０が、第５の処理の一例に相当し、図４のＳ２８０が、第６の処理の一例に相当し、図４のＳ２６０が、第７の処理の一例に相当し、図４のＳ２５０が、第８の処理の一例に相当している。
【０１４６】
以上、本発明の一実施形態について説明したが、本発明はこうした実施形態に何等限定されるものではなく、本発明の要旨を逸脱しない範囲において、種々なる態様で実施し得ることは勿論である。
【０１４７】
例えば、変形例として、図３のＳ１３０では、立ち下がりエッジキャプチャモードレジスタ３３に“１”を書き込むことにより、立ち下がりエッジについても、タイマユニット９での処理形態をワンショットモードに設定し（即ち、立ち下がりエッジキャプチャ制御回路３７の動作モードをワンショットモードに設定し）、図４のＳ２８０では、立ち上がりエッジキャプチャイネーブルレジスタ３５だけでなく、立ち下がりエッジキャプチャイネーブルレジスタ２５にも“０”を書き込むように変形しても良い。そして、このように変形しても、図６〜図９を用いて説明した効果と同じ効果が得られる。
【０１４８】
また、立ち上がりエッジと立ち下がりエッジとの各々について、タイマユニット９での処理形態は、ワンショットモードに固定されていても良い。
また、ＣＰＵ３に図４の割り込み処理を実行させてＰＷＭ信号のデューティ比を算出する使用例の場合、立ち上がりエッジについては、タイマユニット９での処理形態がワンショットモードに固定されており、立ち下がりエッジについては、タイマユニット９での処理形態がノーマルモードに固定されていても良い。
【０１４９】
また逆に、ＰＷＭ信号の周期エッジが立ち上がりエッジであるならば、立ち上がりエッジについては、タイマユニット９での処理形態がノーマルモードに固定されており、立ち下がりエッジについては、タイマユニット９での処理形態がワンショットモードに固定されていても良い。
【符号の説明】
【０１５０】
１…マイコン（マイクロコンピュータ）、３…ＣＰＵ、５…ＲＯＭ、７…ＲＡＭ、９…タイマユニット、１１…バス、１３…割り込みコントローラ、１５…エッジ検出ポート、１７…端子、１９…フリーランニングタイマ、２１…立ち上がりエッジキャプチャレジスタ、２３…立ち上がりエッジキャプチャモードレジスタ、２５…立ち上がりエッジキャプチャイネーブルレジスタ、２７…立ち上がりエッジキャプチャ制御回路、３１…立ち下がりエッジキャプチャレジスタ、３３…立ち下がりエッジキャプチャモードレジスタ、３５…立ち下がりエッジキャプチャイネーブルレジスタ、３７…立ち下がりエッジキャプチャ制御回路、４１…割り込み要求信号生成部、４３…割り込み要求有効エッジ設定レジスタ
【図１】
0005652367.tif 000002
【図２】
0005652367.tif 000003
【図３】
0005652367.tif 000004
【図４】
0005652367.tif 000005
【図５】
0005652367.tif 000006
【図６】
0005652367.tif 000007
【図７】
0005652367.tif 000008
【図８】
0005652367.tif 000009
【図９】
0005652367.tif 000010
【図１０】
0005652367.tif 000011
【図１１】
0005652367.tif 000012