(57)【特許請求の範囲】
【請求項１】
予め定めたクロックに基づいて動作するように構成されるアプリケーション処理を実行するマイクロコンピュータであって、
発振子から出力される第１クロックで駆動され、該第１のクロックとは異なる第２のクロックに基づいてアプリケーション処理を実行する処理部と、
前記第１のクロックに基づいてカウント処理を行うタイマであって、所定数までのカウント処理を繰り返し実行する実タイマと、を備え、
前記処理部は、第１の周期で起動される定期割込み処理にて、前記実タイマによるかウント値を所定のクロック変換係数に基づいて、前記第２のクロックに対応する仮想タイマのカウント値に変換する仮想タイマ変換処理を行い、
前記定期割込み処理にて行われる前記仮想タイマ変換処理は、前記実タイマのカウント値が前記所定数に達するオーバーフローが２回以上発生しない、前記第１の周期よりも長い第２の周期で実行されることを特徴とするマイクロコンピュータ。
【請求項２】
前記処理部は、前記定期割込み処理が起動された際に、前回前記仮想タイマ変換処理を実行してから前記第２の周期が経過していない場合には、該仮想タイマ変換処理を実行しないことを特徴とする請求項１記載のマイクロコンピュータ。
【請求項３】
前記第１の周期と前記第２の周期は、前記第２のクロックに基づいて計時されることを特徴とする請求項１又は２記載のマイクロコンピュータ。
【請求項４】
設定されたタイマ値と、実タイマによってカウントされたタイマ値とが一致した場合に所定処理を起動させるコンペア処理部を備え、
前記定期割込み処理が、前記第２のクロックから前記第１のクロックに対応するように変換された前記第1の周期に基づくタイマ値と、実タイマで該第１のクロックに基づいてカウントされたタイマ値とが一致するタイミングで、前記コンペア処理部によって起動されることを特徴とする請求項１又は２記載のマイクロコンピュータ。
【請求項５】
前記実タイマと前記仮想タイマのカウント値である各タイマ値が共に、タイマ零値と一定のタイマ上限値との間をそれぞれの勾配をもって増大し、該タイマ上限値に到達すると再び前記タイマ零値に戻るようなタイマ動作を繰り返すとき、前記定期割込み処理にて周期的に読み取った前記実タイマのタイマ値を実タイマ基準値とし、該実タイマ基準値と前記クロック変換係数とをもとに仮想タイマ基準値を算出しかつ更新していくことにより、前記仮想タイマを形成することを特徴とする請求項１又は２記載のマイクロコンピュータ。
【請求項６】
前記アプリケーション処理においてキャプチャ時刻の参照要求が発生したとき、
該参照時点に直近の前記仮想タイマの更新タイミングを基点としてその基点での前記実タイマ値である前記実タイマ基準値と、その参照時点において取得した該実タイマ値との間の差分である実タイマ相対値と、前記クロック変換係数とに基づいて、前記参照要求にかかる仮想タイマ値を算出しその仮想タイマ値を前記アプリケーション処理に返すキャプチャ処理部を備えることを特徴とする請求項５記載のマイクロコンピュータ。
【請求項７】
前記アプリケーション処理においてコンペア時刻の設定要求が発生したとき、
該設定要求時点に直近の前記仮想タイマの更新タイミングを基点としてその基点での前記仮想タイマ値である前記仮想タイマ基準値と、その設定要求時点における前記仮想タイマ値との間の差分である仮想タイマ相対値と、前記クロック変換係数の逆数とに基づいて、前記設定要求にかかる実タイマ値を算出しその実タイマ値を前記アプリケーション処理に返すコンペア処理部を備えることを特徴とする請求項５記載のマイクロコンピュータ。
【請求項８】
予め定めたクロックで実行すべきアプリケーション処理を、そのクロックとは異なる実タイマのクロックで実行するようにしたマイクロコンピュータにおけるタイマ調整機構であって、
前記タイマ調整機構は、前記実タイマを、所定のクロック変換係数に比例させた仮想タイマに変換し、前記アプリケーション処理を、変換された該仮想タイマのクロックにより実行させ、
前記実タイマと前記仮想タイマの各タイマ値が共に、タイマ零値と一定のタイマ上限値との間をそれぞれの勾配をもって増大し、該タイマ上限値に到達すると再び前記タイマ零値に戻るようなタイマ動作を繰り返すとき、定期タイミングにて周期的に読み取った前記実タイマのタイマ値を実タイマ基準値とし、該実タイマ基準値と前記クロック変換係数とをもとに仮想タイマ基準値を算出しかつ更新していくことにより、前記仮想タイマを形成し、
前記アプリケーション処理においてコンペア時刻の設定要求が発生したとき、
該設定要求時点に直近の前記仮想タイマの更新タイミングを基点としてその基点での前記仮想タイマ値である前記仮想タイマ基準値と、その設定要求時点における前記仮想タイマ値との間の差分である仮想タイマ相対値と、前記クロック変換係数の逆数とに基づいて、前記設定要求にかかる実タイマ値を算出しその実タイマ値を前記アプリケーション処理に返し、
前記コンペア時刻の設定処理の直前において前記仮想タイマの更新処理を行い、前記基点を最新の更新タイミングに変更することを特徴とするマイクロコンピュータのタイマ調整機構。
【請求項９】
予め定めたクロックで実行すべきアプリケーション処理を、そのクロックとは異なる実タイマのクロックで実行するようにしたマイクロコンピュータにおけるタイマ調整機構であって、
前記タイマ調整機構は、前記実タイマを、所定のクロック変換係数に比例させた仮想タイマに変換し、前記アプリケーション処理を、変換された該仮想タイマのクロックにより実行させ、
前記実タイマと前記仮想タイマの各タイマ値が共に、タイマ零値と一定のタイマ上限値との間をそれぞれの勾配をもって増大し、該タイマ上限値に到達すると再び前記タイマ零値に戻るようなタイマ動作を繰り返すとき、定期タイミングにて周期的に読み取った前記実タイマのタイマ値を実タイマ基準値とし、該実タイマ基準値と前記クロック変換係数とをもとに仮想タイマ基準値を算出しかつ更新していくことにより、前記仮想タイマを形成し、
前記アプリケーション処理においてコンペア時刻の設定要求が発生したとき、
該設定要求時点に直近の前記仮想タイマの更新タイミングを基点としてその基点での前記仮想タイマ値である前記仮想タイマ基準値と、その設定要求時点における前記仮想タイマ値との間の差分である仮想タイマ相対値と、前記クロック変換係数の逆数とに基づいて、前記設定要求にかかる実タイマ値を算出しその実タイマ値を前記アプリケーション処理に返し、
前記コンペア時刻の設定において、前記仮想タイマに規定される最大設定可能範囲に対応する、前記実タイマに規定される最大設定可能範囲を、前記クロック変換係数の値に応じて変更することを特徴とするマイクロコンピュータのタイマ調整機構。
【請求項１０】
前記コンペア時刻の設定において、その設定時刻が前記最大設定可能範囲を超えるときは、当該コンペア時刻設定処理を保留すると共に当該設定要求のみを記憶しておいて、次回の前記定期タイミングにおいて当該設定要求を再実行することを特徴とする請求項９記載のマイクロコンピュータのタイマ調整機構。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はマイクロコンピュータ、特にタイマによるタイマ値を使用したアプリケーション（プログラム）処理を行うマイクロコンピュータにおけるタイマ調整機構に関する。
【背景技術】
【０００２】
図８は一般的なマイクロコンピュータの一構成例を示す図であり、例えばＥＣＵ（Electronic Control Unit）に塔載された場合について示す。本図において参照番号１はマイクロコンピュータ（以下、「マイコン」とも称す）を示し、ＥＣＵ７に塔載されて該ＥＣＵ全体を制御する。このマイコン１は大別して、上記のアプリケーション処理を実行する処理部２と、ＩＯリソースをなすリアルタイムパルスユニット３から構成される。
【０００３】
上記処理部２は周知の構成であり、ＣＰＵ１１と、上記のプログラムを格納するＲＯＭ１２と、入出力データを一時的に記憶するＲＡＭ１３とからなる。一方リアルタイムパルスユニット３は、フリーラン（Free Run）のタイマ１５と、パルスの有効エッジ入力時におけるタイマ値をラッチし例えばパルス周期の演算を行うキャプチャ機能部１６と、上記タイマ値を用いてパルス出力のタイミングを予約時刻として指定するといったパルス出力処理を行うコンペア機能部１７等と、ＩＯレジスタ１８とからなる。
【０００４】
これらのキャプチャ機能部１６およびコンペア機能部１７は共にタイマ１５のタイマ値に従って動作して、当該パルス入力をＩＯドライバ５より受けまた当該パルス出力をＩＯドライバ６より送出する。なお上記タイマ値を設定するそのタイマ１５は外部発振子４により駆動される。
【０００５】
ここで処理部２に着目すると、この処理部２によるアプリケーション処理（パルス入力処理／パルス出力処理）では、上記タイマ１５をベースにしたタイマ基準クロックによって時刻演算等が行われるが、この場合、そのタイマ基準クロックは予め定めた一定のクロックであることを前提としている。例えば、タイマ１５のＬＳＢ（Least Significant Bit）が１μｓの一定値であることを前提としている。
【０００６】
なお本発明に関連する公知技術としては、下記の〔特許文献１および２〕がある。特許文献１は、内蔵するタイマ本数以上のタイマ出力処理を可能とし、タイマ出力機能を自在かつ広範に利用できるようにするとともに、全体を安価な構成とすることができる制御用処理装置、を開示しており、また特許文献２は、クロック周波数の変更に伴ってその都度適切なソフトウェアタイマ値に設定することができるインテリジェントタイマ、を開示している。
【０００７】
【特許文献１】特開平８−４４４０６号公報
【特許文献２】特開平８−２９２８２２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
前述したように、処理部２におけるアプリケーション処理では、予め定めた一定のタイマ基準クロック（例えば、タイマＬＳＢ＝１μｓ）で処理が行われることが前提となっている。したがって、マイコン１にとってタイマ基準クロックが変わることは通常想定していない。ところが、そのタイマ基準クロックを変えなければならないニーズがしばしば生じている。
【０００９】
そのニーズの第１例は、上記外部発振子４の周波数アップである。これはマイコン１の処理スピードの向上が求められる場合等のニーズに起因する。またそのニーズの第２例は、マイコンの変更があったときにこれに伴いタイマ機能部の変更をしたい、というニーズである。
【００１０】
かかるニーズによって、アプリケーション処理の中で使用される、時刻演算のもととなるタイマ１５のＬＳＢが変わると、アプリケーションに係るソフトウェアの中で多岐に渡るロジック、特に時刻演算等のためのタイマ値使用箇所におけるロジックを全て変更することが必要となり、そのロジック変更量、すなわちソフト修正量は膨大なものになる。このために大規模なロジック変換作業が必要となる、といった問題が生じる。一例を挙げると、タイマ基準クロックのＬＳＢが１／２（例えば０．５μｓ）になったとすると、算出結果のパルス周期を２倍に換算するといったロジック変換処理が必要となる。
【００１１】
このようにタイマ基準クロックを変更することは容易ではなく、例えば次のような制約（ｉ）および（ii）が課せられる。
【００１２】
（ｉ）クロック周波数アップによるマイコン処理能力の向上が要求される場合には、タイマ基準クロックを変更することなく実現可能なクロック変更に限定すること、（ii）新たなマイコンの選定に際しては、当該アプリケーション処理に適応可能なタイマ基準クロックを有するマイコンに限定すること、である。
【００１３】
したがって本発明は、上記の問題点に鑑み、タイマ値を使用したアプリケーション処理を行うマイコンにおいて、そのタイマ値の元になるタイマ基準クロックを変えなければならないことになった場合であっても、そのマイコン内で実行するアプリケーション処理のロジックには一切変更を加えることなしに、そのタイマ基準クロックを変更することのできるタイマ調整機構を提供することを目的とするものである。
【００１４】
別言すれば、上記のタイマ基準クロックの変更をソフトウェア的に吸収する機構を備えたマイコンを提供することを目的とするものである。
【課題を解決するための手段】
【００１５】
図１は本発明に係るタイマ調整機構を図解的に示す図である。なお全図を通じて同様の構成要素には同一の参照番号または記号を付して示す。
【００１６】
本図において、上段はクロックソース「変更前」のマイコン１を概略的に表しており、図８の処理部２におけるソフトウェア処理を「アプリケーションＡＰ」として表し、またこのアプリケーションを実行する際の基準クロックを生成するのが実タイマｔｉｍである。これは、図８のフリーランタイマ１５の出力を受けてＩＯレジスタ１８内に形成される。
【００１７】
ここで上述のクロックソースの変更があったとすると、本図下段のクロックソース「変更後」のマイコン１のように構成が変わる。この下段の構成がすなわち本発明による構成であり、その特徴的な構成は、タイマ調整機構２０にある。このタイマ調整機構２０は、実タイマｔｉｍにより予め定めたクロック（例えば、ＬＳＢ＝１μｓ）で実行すべきアプリケーション（ＡＰ）処理を、そのクロックとは異なる実タイマＴＩＭのクロック（例えば、ＬＳＢ＝０．８μｓ）で実行するようにした機構であり、この機構２０は、実タイマＴＩＭを、所定のクロック変換係数αに比例させた仮想タイマＴＩＭｖに変換し、上記のアプリケーション処理を、その変換された仮想タイマＴＩＭｖのクロックにより実行させることを特徴とするものである。かくして、実タイマｔｉｍのもとで実行しなければならないアプリケーションＡＰを、このアプリケーションＡＰに一切ロジック変更を加えることなくそのまま、クロックソース変更後の実タイマＴＩＭのもとで実行可能とし、ここに導入されるものは比較的単純な上記のタイマ調整機構２０に過ぎない。
【００１８】
さらに具体的には、タイマ調整機構２０により、実タイマＴＩＭのタイマ出力には、上記クロック変換係数αをパラメータとした「仮想タイマ生成処理」ＶＩＲ（virtual）が行われる。そしてこの処理ＶＩＲによって仮想タイマＴＩＭｖが形成される。この仮想タイマＴＩＭｖは、上記処理によって得た仮想タイマ値を例えば図８のＲＡＭ１３に書き込んでいくことにより実現できる。ここに、クロックソース変更前の実タイマｔｉｍと全く同等のクロックソースタイマが、この仮想タイマＴＩＭｖによって実現される。つまり図１中のプロセスＰによって、マイコン１においてクロックソース変更によって生じる影響が吸収されることになる。そうすると、アプリケーションＡＰは、図中の「切替え処理」ＳＷを介して実タイマ（ＴＩＭ）アクセスから仮想タイマ（ＴＩＭｖ）アクセスへ切替えて、新たなタイマソースすなわち仮想タイマＴＩＭｖと連携可能となる。
【発明の効果】
【００１９】
本発明によれば、タイマ調整機構２０を導入するのみで、例えばマイコン１の処理スピード向上のために周波数アップしたタイマに変更したとしても、該マイコン１が元々実行していたアプリケーションには一切ロジック変更を加えることなくそのまま使用し続けることができ、既述した従前の制約（ｉ）および（ii）を全く気にすることなく、クロックソースの変更をいつでも自由に行うことができる。
【発明を実施するための最良の形態】
【００２０】
図２は本発明に基づくタイマ調整機構２０の調整処理を分かりやすくアナログ的に表すタイミング図である。本図において、縦軸はタイマ値、横軸は時間である。このタイマ値は時間の経過と共に鋸歯状波のように繰り返し変化する。図中、実線で表す鋸歯状波の波形Ｒは、実タイマ（図１のＴＩＭ）の動きを表しており、一方、点線で表す鋸歯状波の波形Ｖは、仮想タイマ（図１のＴＩＭｖ）の動きを表している。なお、図８において説明したパルス入力処理（キャプチャ）およびパルス出力処理（コンペア）は、それぞれ図２のパルスＣＡＰＴおよびＣＯＭＰとして示し（上向き矢印は前述の有効エッジを表す）。波形Ｒとの交点がそれぞれキャプチャ時刻（参照）およびコンペア時刻（設定）を特定する。なお、実タイマ（Ｒ）について示すが、仮想タイマ（Ｖ）についても全く同様である。  本発明のタイマ調整機構２０は、大別して２つの処理を行う。その１つは「定期タイミング処理」であり、もう１つは「アプリケーションからのアクセス処理」である。図２において、その「定期タイミング処理」の発生は四角で囲んだ“Ａ”で示し、「アプリケーションからのアクセス処理」の発生は四角で囲んだ“Ｂ”で示す。なお後者の「アプリケーションからのアクセス処理」Ｂはさらに２つの処理Ｂ１およびＢ２を含む。“Ｂ１”は前述したキャプチャ処理（時刻参照の読出し処理）であり、“Ｂ２”は前述したコンペア処理（時刻設定の書込み処理）である。ここで本発明における主要な基準動作（“Ａ”、“Ｂ１”および“Ｂ２”）を下記〔１〕〜〔８〕に列記する。
【００２１】
・基本動作“Ａ”に関して
〔１〕実タイマＴＩＭと仮想タイマＴＩＭｖの各タイマ値が共に、タイマ零値（図２左端下の“０”）と一定のタイマ上限値（図２左端上の０ｘＦＦＦＦＦＦ）との間をそれぞれの勾配をもって増大し、そのタイマ上限値に到達すると再びタイマ零値（“０”）に戻るようなタイマ動作を繰り返すとき、定期タイミング“Ａ”にて周期的に読み取った実タイマ（Ｒ）のタイマ値を実タイマ基準値Ｔｂａｓｅｒとし、この実タイマ基準値Ｔｂａｓｅｒとクロック変換係数αとをもとに仮想タイマ基準値Ｔｂａｓｅｖを算出しかつ更新していくことにより、仮想タイマＴＩＭｖを形成するようにする。
【００２２】
〔２〕前回および今回それぞれ読み取った各実タイマ基準値の差分（Ｔｂａｓｅｒ（今回）−Ｔｂａｓｅｒ（前回））にクロック変換係数αを乗じて得た値に、保持した前回の仮想タイマ基準値Ｔｂａｓｅｖ（前回）を加算することにより、今回の仮想タイマ基準値Ｔｂａｓｅｖを算出する。
【００２３】
〔３〕実タイマＴＩＭおよび仮想タイマＴＩＭｖの起動に際し、これら実タイマと仮想タイマの各タイマ値を同一のタイマ値に初期設定する（図２左端下の「初期設定」参照）。
【００２４】
〔４〕定期タイミングＡの周期は、その１周期（Ａ−Ａ）内に、上述のタイマ上限値に到達するタイマオーバーフロー“ＯＦ”が２回以上発生しないような長さに設定する。
【００２５】
・基本動作“Ｂ１”に関して
〔５〕アプリケーション処理においてキャプチャ時刻の参照要求が発生したとすると、
その参照時点ｔ１に直近の仮想タイマ（ｖ）の更新タイミングｔ０を基点としてその基点での実タイマ値である実タイマ基準値Ｔｂａｓｅｒと、その参照時点ｔ１において取得した現在の実タイマ値Ｔｒｅａｌとの間の差分（Ｔｒｅａｌ−Ｔｂａｓｅｒ）である実タイマ相対値ΔＴｒｅａｌと、クロック変換係数αとに基づいて、その参照要求にかかる仮想タイマ値Ｔｖｉｒを算出しその仮想タイマ値Ｔｖｉｒを上記のアプリケーション処理に返すようにする。
【００２６】
〔６〕上記の実タイマ相対値ΔＴｒｅａｌにクロック変換係数αを乗じて仮想タイマ相対値ΔＴｖｉｒを得、この仮想タイマ相対値ΔＴｖｉｒに上記の仮想タイマ基準値Ｔｂａｓｅｖを加算して上記参照時点ｔ１での仮想タイマ値Ｔｖｉｒを得る。
【００２７】
・基本動作“Ｂ２”に関して
〔７〕アプリケーション処理においてコンペア時刻の設定要求が発生したとすると、
その設定要求時点ｔ１に直近の仮想タイマ（Ｖ）の更新タイミングｔ０を基点としてその基点での仮想タイマ値である仮想タイマ基準値Ｔｂａｓｅｖと、その設定要求時点ｔ１における仮想タイマ値Ｔｖｉｒとの間の差分（Ｔｖｉｒ−Ｔｂａｓｅｖ）である仮想タイマ相対値ΔＴｖｉｒと、クロック変換係数αの逆数１／αとに基づいて、上記の設定要求にかかる実タイマ値Ｔｒｅａｌを算出しその実タイマ値Ｔｒｅａｌを上記のアプリケーション処理に返すようにする。
【００２８】
〔８〕上記の仮想タイマ相対値ΔＴｖｉｒにクロック変換係数αの逆数１／αを乗じて実タイマ相対値ΔＴｒｅａｌを得、この実タイマ相対値ΔＴｒｅａｌに上記の実タイマ基準値Ｔｂａｓｅｒを加算して上記設定要求に係る実タイマ値Ｔｒｅａｌを得る。
【００２９】
上記の基本動作の主要な項目について数式を用いて分かりやすく整理すると次のとおりである。
【００３０】
（Ａ）定期（更新）タイミング処理
１）各定期タイミングＡにおいて実タイマＴＩＭのタイマ値（実タイマ値）を読み出し、これを実タイマ基準値として記憶する。図２の“Ｔｂａｓｅｒ”がこの実タイマ基準値である。
【００３１】
２）その実タイマ基準値Ｔｂａｓｅｒから、対応する仮想タイマＴＩＭｖの基準値を、仮想タイマ基準値Ｔｂａｓｅｖとして生成する。図２の“Ｔｂａｓｅｖ”がこの仮想タイマ基準値である。
【００３２】
この定期タイミング処理の初期設定においては（図２の「初期設定」参照）、
Ｔｂａｓｅｖ＝Ｔｂａｓｅｒ
とする。
【００３３】
そしてその定期タイミング処理の通常時においては、各隣接２定期タイミング間（Ａ−Ａ）での実タイマ基準値Ｔｂａｓｅｒの差分と、クロック変換係数αと、前回の仮想タイマ基準値とにより、今回の仮想タイマ基準値Ｔｂａｓｅｖを算出しながら各定期タイミング毎に更新していく。したがってこの算出されるＴｂａｓｅｖは下記式により表される。
【００３４】
Ｔｂａｓｅｖ＝Ｔｂａｓｅｖ（前回）＋
（Ｔｂａｓｅｒ（今回）−Ｔｂａｓｅｒ（前回））×α
（Ｂ）アプリケーション（ＡＰ）からのアクセス処理
Ｂ１）参照時（キャプチャ／読出し処理）
実タイマ基準値Ｔｂａｓｅｒおよび仮想タイマ基準値Ｔｂａｓｅｖと、現在の実タイマ値（図２のＴｒｅａｌ）とから、現在の仮想のタイマ値（図２のＴｖｉｒ）を算出する。この算出は下記式により表される。
【００３５】
Ｔｖｉｒ＝Ｔｂａｓｅｖ＋（Ｔｒｅａｌ−Ｔｂａｓｅｒ）×α
＝Ｔｂａｓｅｖ＋ΔＴｒｅａｌ×α
＝Ｔｂａｓｅｖ＋ΔＴｖｉｒ
ただし、ΔＴｒｅａｌは前述の実タイマ相対値、ΔＴｖｉｒは前述の仮想タイマ相対値である。ここに参照時における参照要求に係る現在の仮想タイマ値Ｔｖｉｒが得られる。
【００３６】
Ｂ２）時刻設定時（コンペア／書込み処理）
実タイマ基準値Ｔｂａｓｅｒおよび仮想タイマ基準値Ｔｂａｓｅｖと、アプリケーションＡＰが算出した時刻設定値、すなわち仮想タイマ値Ｔｖｉｒとから、設定すべき実タイマ値Ｔｒｅａｌを算出する。この算出は下記式により表される。
【００３７】
Ｔｒｅａｌ＝Ｔｂａｓｅｒ＋（Ｔｖｉｒ−Ｔｂａｓｅｖ）×１／α
＝Ｔｂａｓｅｒ＋ΔＴｖｉｒ×１／α
＝Ｔｂａｓｅｒ＋ΔＴｒｅａｌ
ここに時刻設定時における実タイマ値Ｔｒｅａｌが得られる。
【００３８】
次に上記の各基本動作を実行するフローチャートの一例について説明する。
【００３９】
図３は初期化処理動作を表すフローチャートである。本図において、
ステップＳ１１：実タイマＴＩＭを起動し、
ステップＳ１２：その起動時の実タイマＴＩＭのタイマ値を読み出す。
【００４０】
ステップＳ１３：その読出しタイマ値を、実タイマ基準値Ｔｂａｓｅｒの初期値として設定すると共に、
ステップＳ１４：同じ読出しタイマ値を、仮想タイマ基準値Ｔｂａｓｅｖの初期値として設定する。
【００４１】
なお続くステップＳ１５およびＳ１６は、次に述べる定時割込み処理（図４）における「初期化処理」ステップである。この定時割込み処理はマイコンにおいて一般的な割込み処理であり、例えば１ms毎に定時割込みが行われる。この場合、タイマのＬＳＢが前述のように１μｓであったとすると、本来はこの１μｓをもとにその１msのインターバル時間が定められる。しかしこの１μｓが前述の例のように０．８μｓに短縮されると（周波数アップ）、その１msを維持できなくなりずれてしまう。
【００４２】
そこで本発明は前述した基本動作“Ｂ２”（コンペア処理）を流用し、このコンペア処理がその１msの設定を代替するようにする。図３に戻ると、
ステップＳ１５：コンペア処理（Ｂ２）を起動し、
ステップＳ１６：上記１ms（インターバル時間Ｔｉｎｔ）を前述のクロック変換係数倍した値（Ｔｉｎｔ×α）をコンペア処理の初期値としてセットする。
【００４３】
以上を要約すると、アプリケーション（ＡＰ）処理の１つとして含まれる既存のタイマ割込み処理における一定インターバル（Ｔｉｎｔ）の定時割込みを行う場合、上記基本動作Ｂ１、すなわちコンペア時刻の設定要求時に実行するコンペア処理を起動するときに当該コンペア初期値として、クロック変換係数αを乗じた一定インターバルの時間を設定し（Ｔｉｎｔ×α）、そのタイマ割込み処理の初期化を行うようにする。そしてこのあとにタイマ割込み処理の通常処理が開始する。
【００４４】
図４は定時割込み処理とこれに連動する仮想タイマ基準値算出（上記基本動作“Ａ”すなわち定期タイミング処理の通常処理）動作を表すフローチャートである。本図において、
ステップＳ２１：定時割込み処理（Ｔｉｎｔ）を起動し、
ステップＳ２２：上記基本動作“Ｂ２”に基づくコンペア機能により定時時刻（Ｔｉｎｔ×α）をセットする。
【００４５】
ステップＳ２３：上記のＴｉｎｔ×αによるタイミングを分周し、実タイマ相当で例えば１secの定期タイミング処理（上記基本動作“Ａ”）を実行し、その１secに達しないときはＥＮＤに至り、その１secに達する毎に次のステップＳ２４に入る。
【００４６】
ステップＳ２４：本ステップでは、実タイマ基準値Ｔｂａｓｅｒおよび仮想タイマ基準値Ｔｂａｓｅｖの各前回値Ｔｂａｓｅｖ＿ｏおよびＴｂａｓｅｖ＿ｏを保持し、
ステップＳ２５：本ステップでは、今回のタイミングの実タイマ値Ｔｂａｓｅｒ（今回）を読み出し、
ステップＳ２６：本ステップでは、前述の算出式
Ｔｂａｓｅｖ＝Ｔｂａｓｅｖ（前回）＋
（Ｔｂａｓｅｒ（今回）−Ｔｂａｓｅｒ（前回））×α
により、仮想タイマ基準値Ｔｂａｓｅｖを算出し、かつ定期タイミング毎にこれを更新していく。
【００４７】
上記のステップＳ１６，Ｓ２１およびＳ２２により、タイマ割込み処理Ｔｉｎｔにおける初期化後、クロック変換係数αを乗じた一定インターバル（Ｔｉｎｔ×α）毎に出力設定値を算出して通常処理を実行することになる。さらに上記のステップＳ２３〜Ｓ２６により、前回および今回それぞれ読み取った各実タイマ基準値の差分（Ｔｂａｓｅｒ（今回）−Ｔｂａｓｅｒ（前回））にクロック変換係数αを乗じて得た値に、保持した前回の仮想タイマ基準値Ｔｂａｓｅｖ（前回）を加算することにより、今回の仮想タイマ基準値Ｔｂａｓｅｖを算出する。ここで上記ステップＳ２３について考察すると、定期タイミング処理（“Ａ”）におけるタイミング時間は、実タイマがオーバーフローしない程度に長い時間で十分である。なぜならそのタイミング時間を短くしても（高速の定期タイミングにしても）、タイマ値の精度はそれ程向上しないからである。このために、本ステップＳ２３による「分周」を行うこととする。またこれによりソフトウェア処理の負荷を軽減することもできる。
【００４８】
また上記の「オーバーフロー」について考察すると、前述したように定期タイミングＡの１周期（Ａ−Ａ）内に、タイマ上限値に到達するタイマオーバーフロー“ＯＦ”（図２）が２回以上発生しないような長さに設定する。もしそのタイマオーバーフロー“ＯＦ”が該１周期内に２回以上発生したとすると、図４のステップＳ２４〜Ｓ２６の処理、とりわけＴｂａｓｅｒ（今回）とＴｂａｓｅｒ（前回）との差分を割り出す計算が困難になってしまうからである。
【００４９】
以上のようにして「定期タイミング処理」“Ａ”が実行され、その定期タイミングのもとで「アプリケーションからのアクセス処理」“Ｂ”が実行され、参照時の読出し処理（キャプチャ）“Ｂ１”と時刻設定処理（コンペア）“Ｂ２”とが行われる。
【００５０】
図５は参照時における読出し処理（キャプチャ）動作を表すフローチャートであり、
図６は時刻設定時における書込み処理（コンペア）動作を表すフローチャートである。
【００５１】
まず図５を参照すると、
ステップＳ３１：アプリケーション処理において、キャプチャ時刻の「参照要求」が発生したとすると、
ステップＳ３２：現在の実タイマ値を取得してＴｒｅａｌとして記憶し、
ステップＳ３３：上記実タイマ値Ｔｒｅａｌと実タイマ基準値Ｔｂａｓｅｒとの差分である実タイマ相対値ΔＴｒｅａｌを算出し、
ステップＳ３４：算出したΔＴｒｅａｌをα（クロック変換係数）倍し、
ステップＳ３５：そのΔＴｒｅａｌを仮想タイマ基準値Ｔｂａｓｅｖに加えて仮想タイマ値Ｔｖｉｒを得、
ステップＳ３６：そのＴｖｉｒを、参照要求元であるアプリケーションに、戻り値として返す。
【００５２】
結局、上記一連のステップは次のとおりである。アプリケーション処理においてキャプチャ時刻の参照要求が発生したとすると、その参照時点ｔ１に直近の仮想タイマ（ｖ）の更新タイミングｔ０を基点としてその基点での実タイマ値である実タイマ基準値Ｔｂａｓｅｒと、その参照時点ｔ１において取得した現在の実タイマ値Ｔｒｅａｌとの間の差分（Ｔｒｅａｌ−Ｔｂａｓｅｒ）である実タイマ相対値ΔＴｒｅａｌと、クロック変換係数αとに基づいて、その参照要求にかかる仮想タイマ値Ｔｖｉｒを算出しその仮想タイマ値Ｔｖｉｒを上記のアプリケーション処理に返す。この場合、上記の実タイマ相対値ΔＴｒｅａｌにクロック変換係数αを乗じて仮想タイマ相対値ΔＴｖｉｒを得、この仮想タイマ相対値ΔＴｖｉｒに上記の仮想タイマ基準値Ｔｂａｓｅｖを加算して上記参照時点ｔ１での仮想タイマ値Ｔｖｉｒを得る。
【００５３】
次に図６を参照すると、
ステップＳ４１：アプリケーション処理において、設定値Ｔｖｉｒをパラメータとして「時刻設定要求」が発生したとすると、
ステップＳ４２：そのＴｖｉｒと仮想タイマ基準値Ｔｂａｓｅｖとの差分を算出して仮想タイマ相対値ΔＴｖｉｒを得、
ステップＳ４３：そのΔＴｖｉｒをα（クロック変換係数）分の１倍して（１／α）、実タイマ相対値ΔＴｒｅａｌを得、
ステップＳ４４：そのΔＴｒｅａｌを実タイマ基準値Ｔｂａｓｅｒに加えて実タイマ値Ｔｒｅａｌを得、
ステップＳ４５：そのＴｒｅａｌをＩＯレジスタ（図１）へ設定して、
ステップＳ４６：そのＴｒｅａｌを時刻設定の要求元であるアプリケーションに返す。
【００５４】
結局、上記一連のステップは次のとおりである。アプリケーション処理においてコンペア時刻の設定要求が発生したとすると、その設定要求時点ｔ１に直近の仮想タイマ（ｖ）の更新タイミングｔ０を基点としてその基点での仮想タイマ値である仮想タイマ基準値Ｔｂａｓｅｖと、その設定要求時点ｔ１における仮想タイマ値Ｔｖｉｒとの間の差分（Ｔｖｉｒ−Ｔｂａｓｅｖ）である仮想タイマ相対値ΔＴｖｉｒと、クロック変換係数αの逆数１／αとに基づいて、上記の設定要求にかかる実タイマ値Ｔｒｅａｌを算出しその実タイマ値Ｔｒｅａｌを上記のアプリケーション処理に返す。この場合、上記の仮想タイマ相対値ΔＴｖｉｒにクロック変換係数αの逆数１／αを乗じて実タイマ相対値ΔＴｒｅａｌを得、この実タイマ相対値ΔＴｒｅａｌに上記の実タイマ基準値Ｔｂａｓｅｒを加算して上記設定要求に係る実タイマ値Ｔｒｅａｌを得る。
【００５５】
以上、図３〜図６を参照して、初期化処理、定時割込み処理、読出し処理（キャプチャ）および書込み処理（コンペア）について説明したが、これらの処理のいずれにも必須のパラメータはクロック変換係数αである。そこで、新たなクロック周波数が設定されると、そのクロック変換係数αが上記の全ての処理に対して自動的に反映されるようにしておけば、都合がよい。
【００５６】
すなわちクロック変換係数αは、実タイマＴＩＭの実クロック周波数（Ｈｚ）と仮想タイマＴＩＭｖの仮想クロック周波数（Ｈｚ）とから、仮想クロック周波数／実クロック周波数にて定義されるが、この定義されたクロック変換係数αを所定の１箇所に保持しておく。そしてアプリケーション処理に含まれる上記の各種処理（図３〜図６）が、そのクロック変換係数αを、共通乗数として共通に使用できるようにする。
【００５７】
また前述した算出式等において、浮動小数点演算の場合には問題とならないが、固定小数点演算の場合には小数点以下が切り捨てられてしまうため、その演算精度が低下することがある。そこでその演算精度を確保するために、一定の定数例えば「２５６」を乗算（８ビット左シフト）しておいて上述した算出式等の所要の演算を行い、その演算のあとで「２５６」で除算（８ビット右シフト）するといった算法をとるのが好ましい。
【００５８】
さらに上記図３〜図６のうち図４に再び着目すると、タイマ割込み処理における通常処理において、αの値によってＴｉｎｔ×αの値が整数にならない場合があり、端数が生じてしまうことがある。かかる端数が定時割込み毎に発生しかつ累積していくとその累積誤差は許容し得ない程の大きさになり、結局、一定時間割込みを維持できなくなる。
【００５９】
そこで上記タイマ割込み処理における上記の通常処理において、上述のようにクロック変換係数αの値に起因して一定インターバルＴｉｎｔ×αの出力設定値に毎回端数が生じるような場合には、その一定インターバルのｎ回分に当たる端数を累積し、（ｎ＋１）回目の出力設定値にその累積値を加算する。これにより、長期的に見れば所要の一定インターバル時間を常に維持することができる。
【００６０】
図７は図４のステップＳ２２におけるＴｉｎｔ×αの端数処理を表す図である。本図において、第１回から第ｎ回までの各演算において生じた端数は毎回切り捨てていく。ｎは例えばｎ＝１０である。そしてｎ回分累積した端数βを補正値として、（ｎ＋１）回目の演算値にまとめて加算する。これにより上述の累積誤差が定期的に解消される。
【００６１】
また上記図３〜図６のうち図６に再び着目すると、その第１ステップＳ４１に関し、コンペア時刻の設定処理の直前において仮想タイマの更新処理を行い、前述した基点を最新の更新タイミングに変更することが好ましい。このコンペア時刻の設定処理においては、その設定範囲に十分余裕をもたせ定期タイミングの１周期（図２のＡ−Ａ）を最大限使えるようにするのが望ましい。
【００６２】
そこでコンペア時刻設定の直前で実タイマ基準値Ｔｂａｓｅｒならびに仮想タイマ基準値Ｔｂａｓｅｖを改めて生成し直して、その１周期Ａ−Ａのほぼ全範囲で、コンペア時刻の設定を行うことができるようにする。
【００６３】
さらにまた上記図３〜図６のうち再び図６に着目すると、その第２ステップＳ４２に関し、コンペア時刻の設定において、仮想タイマＴＩＭｖに規定される最大設定可能範囲に対応する、実タイマＴＩＭに規定される最大設定可能範囲を、クロック変換係数αの値に応じて変更させるのが好ましい。すなわち、クロック変換係数αを反映した「ガード」の設定である。
【００６４】
アプリケーション処理では、直接使用する仮想タイマの値を基準として時刻の設定可能範囲が決まる。その最大設定可能範囲は、仮想タイマの１周期（Ａ−Ａ）先の時刻までである。しかし実タイマでの設定可能範囲は、クロック変換係数αの値に応じて変わるため、その実タイマ上での設定可能範囲に対するガードを新たに設定し直すこととする。
【００６５】
上述のコンペア時刻の設定において、その設定時刻が上記の最大設定可能範囲を超えることがあり得るが、このようなときには、当該コンペア時刻設定処理を保留すると共に当該設定要求のみを記憶しておいて、次回の定期タイミングにおいて当該設定要求を再実行するようにすればよい。
【００６６】
すなわちタイマ時刻値設定時、その設定時刻が設定可能範囲を超えるような場合、当該設定処理を一旦保留し、その設定要求のみを記憶しておく。そして次回の定時処理においてその保留の時間を設定時刻から差し引いた上で、その記憶していた設定要求を再実行することにより、設定可能範囲を超える値でも処理を可能にする。その再実行によってもまだ設定可能範囲を超えるような場合には、再度、実行を一旦保留し、次回の定時処理において、再々実行を行う。これを設定時刻が設定可能範囲内に入るまで繰り返す。
【００６７】
以上詳述したとおり、本発明によれば、タイマソースの変更があったとき、当該アプリケーションに一切変更を加えることなしに、そのタイマソースの変更による影響をソフト的に吸収することができる。
【図面の簡単な説明】
【００６８】
【図１】本発明に係るタイマ調整機構を図解的に示す図である。
【図２】タイマ調整機構２０の調整処理をアナログ的に表すタイミング図である。
【図３】初期化処理動作を表すフローチャートである。
【図４】定時割込み処理とこれに連動する定期タイミング処理動作を表すフローチャートである。
【図５】参照時における読出し処理（キャプチャ）動作を表すフローチャートである。
【図６】時刻設定時における書込み処理（コンペア）動作を表すフローチャートである。
【図７】図４のステップＳ２２における端数処理を表す図である。
【図８】一般的なマイクロコンピュータの一構成例を示す図である。
【符号の説明】
【００６９】
１    マイクロコンピュータ（マイコン）
２    処理部
３    リアルタイムパルスユニット
４    外部発振子
１１    ＣＰＵ
１２    ＲＯＭ
１３    ＲＡＭ
１５    タイマ
１６    キャプチャ機能部
１７    コンペア機能部
２０    タイマ調整機構
【図１】
0004671796.tif 000002
【図２】
0004671796.tif 000003
【図３】
0004671796.tif 000004
【図４】
0004671796.tif 000005
【図５】
0004671796.tif 000006
【図６】
0004671796.tif 000007
【図７】
0004671796.tif 000008
【図８】
0004671796.tif 000009