(57)【特許請求の範囲】
【請求項１】
異なるデータ生成周期を有し、データ生成されるとデータ生成されたことを示す第１の信号を発生する複数のセンサに接続可能なセンサデータ収集装置において、
第１の状態および第２の状態を有し、前記第２の状態時に１または複数の前記センサのデータを取得するコントローラと、
第１のレジスタと、
前記複数のセンサから送信される前記第１の信号を記憶する第２のレジスタと、
前記第１のレジスタのレジスタ値に基づき、前記コントローラを前記第１の状態から前記第２の状態へ遷移させる第１の回路と、
備え、
前記コントローラは、前記複数のデータ生成周期のうちの最小のデータ生成周期に基づいて、前記第１のレジスタを設定し、
前記コントローラは、前記第１の回路によって前記第２の状態に遷移されたときに、前記第２のレジスタの記憶データに基づいて、前回前記第２の状態から前記第１の状態に遷移されてから今回前記第１の回路によって前記第２の状態に遷移されるまでの間に生成された１または複数のセンサのデータを取得し、その後前記第１の状態に遷移されるセンサデータ収集装置。
【請求項２】
複数の異なるデータ生成周期を有する複数のセンサに接続可能なセンサデータ収集装置において、
第１の状態および第２の状態を有し、前記第２の状態時に１または複数の前記センサのデータを取得するコントローラと、
第１のレジスタを有し、前記第１のレジスタのレジスタ値に基づき、前記コントローラを前記第１の状態から前記第２の状態へ遷移させる第１の回路と
を備え、
前記コントローラは、センサ毎に、前記データ生成周期に基づき次回のデータ生成時刻である第１の時刻情報を算出し、前記第１の時刻情報にデータ有効期間を夫々加算して第２の時刻情報を算出し、各センサのうちの最小の第２の時刻情報よりも小さい１又は複数の第１の時刻情報のうちの最も大きな第１の時刻情報を持つ第１のセンサの第１の時刻情報に基づいて、前記第１のレジスタを設定するセンサデータ収集装置。
【請求項３】
前記第１の回路は、前記第１のレジスタを有する割込みコントローラと、電源管理ユニットとを備え、
前記第１のレジスタは、前記複数のセンサからの割込み要求の有無を示す情報が記憶される第２のレジスタと、前記第１のセンサを識別する情報が記憶される第３のレジスタとを有し、
前記割込みコントローラは、前記第２および第３のレジスタに基づき、前記第１のセンサから割込み要求が発生したときに前記電源管理ユニットに対し第１の信号を発生し、
前記電源管理ユニットは、前記第１の信号をトリガにして前記コントローラを前記第２の状態に遷移させる請求項２に記載のセンサデータ収集装置。
【請求項４】
前記第１の回路は、前記第１のレジスタを有するタイマと、電源管理ユニットとを備え、
前記第１のレジスタは、前記第１のセンサの前記第１の時刻情報が記憶される第４のレジスタを有し、
前記タイマは、現在時刻が前記第４のレジスタのレジスタ値に一致したときに、前記電源管理ユニットに対し第２の信号を発生し、
前記電源管理ユニットは、前記第２の信号をトリガにして前記コントローラを前記第２の状態に遷移させる請求項２に記載のセンサデータ収集装置。
【請求項５】
前記第１の回路は、第２および第３のレジスタを有する割込みコントローラと、第４のレジスタを有するタイマと、電源管理ユニットとを備え、
前記第２のレジスタは前記複数のセンサからの割込み要求の有無を示す情報が記憶され、前記第３のレジスタは前記第１のセンサを識別する情報が前記コントローラによって記憶され、前記第４のレジスタは前記第１のセンサの前記第１の時刻情報が記憶され、
前記割込みコントローラは、前記第２および第３のレジスタに基づき、前記第１のセンサから割込み要求が発生したときに前記電源管理ユニットに対し第１の信号を発生し、
前記タイマは、現在時刻が前記第４のレジスタのレジスタ値に一致したときに、前記電源管理ユニットに対し第２の信号を発生し、
前記電源管理ユニットは、前記第１のまたは第２の信号をトリガにして前記コントローラを前記第２の状態に遷移させる請求項２に記載のセンサデータ収集装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本実施形態は、複数のセンサに接続可能なセンサデータ収集装置に関する。
【背景技術】
【０００２】
複数のセンサのデータ取得を行うプロセッサシステムにおいては、消費電力削減のため、プロセッサはデータ取得を行っていないとき、スリープ状態におかれる。
【０００３】
このようなプロセッサシステムにおいて、複数のセンサのデータ生成周期が異なる場合、各センサのデータが取得可能となる度に、前記プロセッサをスリープ状態からアクティブ状態へ遷移させる手法がある。この手法では、プロセッサの状態遷移が頻繁となり、状態遷移に伴う電力消費が大きくなってしまう。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−１８６５９１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
一つの実施形態は、コントローラの状態遷移回数を削減し、コントローラの消費電力を削減可能なセンサデータ収集装置を提供することを目的とする。
【課題を解決するための手段】
【０００６】
一つの実施形態によれば、センサデータ収集装置は、複数のセンサに接続可能である。前記複数のセンサは、センシングしたデータを複数の異なるデータ生成周期で生成する。前記センサデータ収集装置は、第１の回路と、コントローラとを備える。前記コントローラは、第１の状態および第２の状態を有し、前記第２の状態時に１または複数の前記センサのデータを取得する。前記第１の回路は、第１のレジスタを有し、前記第１のレジスタのレジスタ値に基づき、前記コントローラを前記第１の状態から前記第２の状態へ遷移させる。前記コントローラは、前記複数のデータ生成周期のうちの最小のデータ生成周期に基づいて、前記第１のレジスタを設定する。
【図面の簡単な説明】
【０００７】
【図１】図１は、第１の実施形態のプロセッサシステムを示すブロック図である。
【図２】図２は、第１の実施形態の管理テーブルを示す図である。
【図３】図３（Ａ）は、比較例におけるセンサおよびプロセッサの動作を示すタイムチャートであり、図３（Ｂ）は、第１〜第３の実施形態におけるセンサおよびプロセッサの動作を示すタイムチャートである。
【図４】図４は、第１の実施形態におけるアプリケーションプログラムの動作手順を示すフローチャートである。
【図５】図５は、第１の実施形態における管理テーブル登録ルーチンを示すフローチャートである。
【図６】図６は、第１の実施形態における起床トリガ設定ルーチンを示すフローチャートである。
【図７】図７は、第１の実施形態における割込みハンドラの動作手順を示すフローチャートである。
【図８】図８は、第２の実施形態のプロセッサシステムを示すブロック図である。
【図９】図９は、第２の実施形態の管理テーブルを示す図である。
【図１０】図１０は、第２の実施形態におけるアプリケーションプログラムの動作手順を示すフローチャートである。
【図１１】図１１は、第２の実施形態における管理テーブル登録ルーチンを示すフローチャートである。
【図１２】図１２は、第２の実施形態における割込みハンドラの動作手順を示すフローチャートである。
【図１３】図１３は、第２〜第６の実施形態における内部タイマ再設定ルーチンを示すフローチャートである。
【図１４】図１４は、第２の実施形態における起床トリガ設定ルーチンを示すフローチャートである。
【図１５】図１５は、第３の実施形態のプロセッサシステムを示すブロック図である。
【図１６】図１６は、第３の実施形態の管理テーブルを示す図である。
【図１７】図１７は、第３の実施形態におけるアプリケーションプログラムの動作手順を示すフローチャートである。
【図１８】図１８は、第３の実施形態における管理テーブル登録ルーチンを示すフローチャートである。
【図１９】図１９は、第３の実施形態における割込みハンドラの動作手順を示すフローチャートである。
【図２０】図２０は、第３の実施形態における起床トリガ設定ルーチンを示すフローチャートである。
【図２１】図２１は、比較例におけるセンサおよびプロセッサの動作を示すタイムチャートである。
【図２２】図２２は、第４の実施形態のプロセッサシステムを示すブロック図である。
【図２３】図２３は、第４および第５の実施形態の管理テーブルを示す図である。
【図２４】図２４は、第４〜第６の実施形態におけるセンサおよびプロセッサの動作を示すタイムチャートである。
【図２５】図２５は、第４の実施形態におけるアプリケーションプログラムの動作手順を示すフローチャートである。
【図２６】図２６は、第４の実施形態における管理テーブル登録ルーチンを示すフローチャートである。
【図２７】図２７は、第４の実施形態における割込みハンドラの動作手順を示すフローチャートである。
【図２８】図２８は、第４の実施形態における起床トリガ設定ルーチンを示すフローチャートである。
【図２９】図２９は、第５の実施形態のプロセッサシステムを示すブロック図である。
【図３０】図３０は、第５の実施形態におけるアプリケーションプログラムの動作手順を示すフローチャートである。
【図３１】図３１は、第５の実施形態における割込みハンドラの動作手順を示すフローチャートである。
【図３２】図３２は、第５の実施形態における起床トリガ設定ルーチンを示すフローチャートである。
【図３３】図３３は、第６の実施形態のプロセッサシステムを示すブロック図である。
【図３４】図３４は、第６の実施形態の管理テーブルを示す図である。
【図３５】図３５は、第６の実施形態におけるアプリケーションプログラムの動作手順を示すフローチャートである。
【図３６】図３６は、第６の実施形態における管理テーブル登録ルーチンを示すフローチャートである。
【図３７】図３７は、第６の実施形態における割込みハンドラの動作手順を示すフローチャートである。
【図３８】図３８は、第６の実施形態における起床トリガ設定ルーチンを示すフローチャートである。
【図３９】図３９は、ジッタがある場合の第４の実施形態の処理を示すタイムチャートである。
【図４０】図４０は、第７の実施形態を説明するためのタイムチャートである。
【図４１】図４１は、第７の実施形態におけるアプリケーションプログラムの動作手順を示すフローチャートである。
【図４２】図４２は、第７の実施形態における管理テーブル登録ルーチンを示すフローチャートである。
【図４３】図４３は、第７の実施形態における起床トリガ設定ルーチンを示すフローチャートである。
【図４４】図４４は、第７の実施形態を説明するためのタイムチャートである。
【発明を実施するための形態】
【０００８】
以下に添付図面を参照して、実施形態にかかるセンサデータ収集装置を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【０００９】
（第１の実施形態）
図１は、第１の実施形態にかかるセンサデータ収集装置としてのプロセッサシステム１００を示す機能ブロックである。プロセッサシステム１００は、複数のセンサＡ〜Ｃに接続可能である。図１では、３個のセンサを示したが、センサの個数は２個以上であれば任意である。プロセッサシステム１００は、センサＡ〜Ｃが検出したデータを収集する。プロセッサシステム１００は、割込みコントローラ（以下、ＩＮＴＣという）１０と、電源管理ユニット（以下、ＰＭＵ)２０と、プロセッサ３０と、メモリ４０とを備える。プロセッサ３０はセンサデータ収集装置のコントローラを構成する。
【００１０】
プロセッサ３０は、メモリ４０にロードされている複数のプログラムを実行する。ＩＮＴＣ１０から割込み要求を受けると、プロセッサ３０は、割込み処理用ソフトウェアである割込みハンドラINTHL1を実行する。プロセッサ３０は、２つの動作状態を持つ。第１の動作状態は消費電力が少なく、センサデータの取得に係わる処理を行っていないスリープ状態である。第２の動作状態は消費電力がスリープ状態より多く、センサデータの取得に係わる処理を行っているアクティブ状態である。アクティブ状態とスリープ状態間の遷移には所定の時間を要する。遷移中は少なくともスリープ状態より多くの電力（アクティブ状態と同様かそれ以上）を消費する。なお、プロセッサ３０がスリープ状態からアクティブ状態へ遷移することを起床と呼ぶ。
【００１１】
センサＡ〜Ｃは、アプリケーションプログラムAP1によって設定された所定の周期でセンシングを行う。センサＡ〜Ｃは、センシングしたセンサデータを、プロセッサシステム１００が取得可能となったときに、ＩＮＴＣ１０へ割込み要求を発行する。すなわち、センサＡ〜Ｃは、センシングしたデータを所定のデータ生成周期で生成し、データが生成される度にＩＮＴＣ１０へ割込み要求を発行する。各センサＡ〜Ｃのデータ生成周期は異なる。各センサＡ〜Ｃには、それぞれ個別に識別可能なセンサIDが付与されている。センサＡのID=0とし、センサＢのID=1とし、センサＣのID=2とする。
【００１２】
ＰＭＵ２０は、ＩＮＴＣ１０、プロセッサ３０、メモリ４０などに対する電源供給を管理する。ＰＭＵ２０は、ＩＮＴＣ１０からの要求に従いプロセッサ３０を起床させる。
【００１３】
ＩＮＴＣ１０は、割込み通知レジスタ１１と、起床トリガレジスタ１２とを有する。割込み通知レジスタ１１は、センサＡ〜Ｃからの割込み要求の有無を示す情報を記憶する。割込み通知レジスタ１１は、センサID毎にエントリを有し、各エントリには、センサIDに対応するセンサからの割込み要求の有無を示す割込みフラグが記録される。割込みフラグは、“１”がアサートであり、“０”がネゲートであるとする。これ以降、割込み通知レジスタ１１のレジスタ値は、左からセンサＡ、Ｂ、Ｃの順に割込みフラグを表すとする。（000)は、各センサＡ〜Ｃから割込要求が発生していない状態を示している。（100)は、センサＡから割込要求が発生している状態を示す。（101)は、センサＡおよびＣから割込要求が発生している状態を示す。ＩＮＴＣ１０は、割込み要求を受信する度に、対応するエントリを更新する。ＩＮＴＣ１０は、少なくとも１つのエントリが、“１”となっている期間中には、レベル信号によってプロセッサ３０に割込み要求を通知する。プロセッサ３０は、センサデータの取得処理の実行後、対応するセンサIDのエントリを、“１”から“０”にクリアする。
【００１４】
起床トリガレジスタ１２は、プロセッサ３０が起床するためのトリガとなるセンサを識別する情報を記憶する。起床トリガレジスタ１２は、センサID毎にエントリを有する。各エントリには、起床トリガフラグが記録される。起床トリガフラグは、センサIDに対応するセンサからの割込み要求を受信した時に、プロセッサ３０への起床要求を通知するか否かをＰＭＵ２０へ指示するためのフラグである。これ以降、起床トリガレジスタ１２のレジスタ値は、左からセンサＡ、Ｂ、Ｃの順に起床トリガフラグを表すとする。（100)は、センサＡから割込み要求を受信した時にのみ起床要求をＰＭＵ２０へ指示することを示している。（010)は、センサＢから割込み要求を受信した時にのみ起床要求をＰＭＵ２０へ指示することを示している。（001)は、センサＣから割込み要求を受信した時にのみ起床要求をＰＭＵ２０へ指示することを示している。起床トリガレジスタ１２の設定は、プロセッサ３０によって行われる。
【００１５】
メモリ４０には、管理テーブル４１と、プロセッサ３０が実行する複数のプログラムが格納されている。アプリケーションプログラムAP1は、プロセッサシステム１００の起動時に動作するプログラムであり、センサデータ取得のための初期設定を行う。管理テーブル登録ルーチンRT11は、アプリケーションプログラムAP1に呼び出されて動作するプログラムであり、管理テーブル４１へ管理情報の登録処理を行う。起床トリガ設定ルーチンRT12は、アプリケーションプログラムAP1に呼び出されて動作するプログラムであり、起床トリガレジスタ１２への設定処理を行う。割込みハンドラINTHL1は、プロセッサ３０がスリープ状態からアクティブ状態に遷移したときに、起動され、センサＡデータ取得処理RT13、センサＢデータ取得処理RT14、またはセンサＣデータ取得処理RT15を実行させることで、各センサＡ〜Ｃのデータ取得処理を実行する。センサＡデータ取得処理RT13は、センサＡのデータを取得して、メモリ４０内の所定のデータ格納領域へ格納する機能を有するプログラムである。センサＢデータ取得処理RT14は、センサＢのデータを取得して、メモリ４０内の所定のデータ格納領域へ格納する機能を有するプログラムである。センサＣデータ取得処理RT15は、センサＣのデータを取得して、メモリ４０内の所定のデータ格納領域へ格納する機能を有するプログラムである。
【００１６】
図２は、管理テーブル４１のデータ構造を説明するための図である。管理テーブル４１は、センサIDと、データ取得処理のエントリアドレス４１ａと、処理インターバル４１ｂとを組とした管理情報を持つ。エントリアドレス４１ａは、センサIDに対応するセンサデータ取得処理RT13〜RT15が格納されているメモリ４０の物理アドレスを示している。処理インターバル４１ｂは、各センサＡ〜Ｃのデータ生成周期を示している。プロセッサ３０は、プロセッサシステム１００の起動時に、管理テーブル４１の設定処理を行う。
【００１７】
以下、プロセッサシステム１００に３つのセンサＡ、Ｂ、Ｃが接続される場合の第１の実施形態の処理を説明する。ここで、図２に示すように、センサＡは、80msec間隔でセンシングデータが生成される。プロセッサ３０は、データ取得処理RT13(エントリアドレス0x1100)を用いてセンサＡのデータ取得を行う。同様に、センサＢは100msec間隔でセンシングデータが生成される。プロセッサ３０は、データ取得処理RT14(エントリアドレス0x1200)を用いてセンサＡのデータ取得を行う。センサＣは125msec間隔で、センシングデータが生成される。プロセッサ３０は、データ取得処理RT15(エントリアドレス0x1300)を用いてセンサＣのデータ取得を行う。
【００１８】
図３は、センサデータ取得処理を示すタイムチャートである。図３（Ａ）は比較例を、図３（Ｂ）は第１の実施形態を示す。矢印は、センサデータの生成タイミングを示している。センサＡは、8Omsec間隔で、センサＢは100msec間隔で、センサＣは125msec間隔で、データ取得周期がくる。比較例では、センサＡ〜Ｃの取得周期が来る度に、プロセッサ３０を起床させ、対応するセンサのデータを取得した後、プロセッサ３０をスリープさせている。このため、比較例では、時刻0から時刻500までに、プロセッサ３０は、１４回起床する。第１の実施形態では、最小のデータ取得間隔（センサＡの取得間隔）に基づいて、プロセッサ３０を起床させる。このため、第１の実施形態では、時刻0から時刻500までに、プロセッサ３０は、７回起床する。このように、第１の実施形態では、比較例より状態遷移回数（起床回数）を削減することが可能である。
【００１９】
以下、第１の実施形態の動作を詳細に説明する。図４は、アプリケーションプログラムAP1の動作手順を示すフローチャートである。プロセッサシステム１００が起動されると、プロセッサ３０は、アプリケーションプログラムAP1を実行する。アプリケーションプログラムAP1は、センサＡ、Ｂ、Ｃを初期化する（S100)。
【００２０】
次に、プロセッサ３０は、管理テーブル登録ルーチンRT11を実行する（S101)。図５は、管理テーブル登録ルーチンRT11を示すフローチャートである。まず、ID=0、entry address=0x1100、interval=80が指定されて、管理テーブル登録ルーチンRT11が実行される。これにより、センサＡの管理情報が管理テーブル４１に登録される。同様に、センサＢおよびセンサＣの管理情報が管理テーブル４１に登録される（図５:S110)。これにより、管理テーブル４１は、図２に示したようになる。
【００２１】
次に、プロセッサ３０は、起床トリガ設定ルーチンRT12を実行する（図４:S102)。図６は、起床トリガ設定ルーチンRT12を示すフローチャートである。プロセッサ３０は、管理テーブル４１から処理インターバルが最小のセンサIDを取得する（S120)。この場合は、センサＡ（ID=0）である。プロセッサ３０は、取得したIDを持つセンサからの割込み処理要求があったときのみ、ＩＮＴＣ１０からプロセッサ起床要求が発行されるように、起床トリガレジスタ１２を設定する（S121)。すなわち、プロセッサ３０は、取得したセンサIDの起床トリガフラグを“１”にする。この場合は、起床トリガレジスタ１２は、(100)となる。
【００２２】
次に、プロセッサ３０は、ＩＮＴＣ１０から割込み要求を受信したとき割込みハンドラINTHL1を実行するように割込みべクタなどを設定する（図４:S103)。この後、アプリケーションプログラムAP1は、プロセッサ３０をスリープ状態とする（S104)。
【００２３】
図７は、割込みハンドラINTHL1の動作手順を示すフローチャートである。割込みハンドラINTHL1は、プロセッサ３０に対し割込み要求が通知されたときに実行されるソフトウェアである。割込みハンドラINTHL1は、割込み通知レジスタ１１を参照し、センサから割込み要求が発生しているか否かをチェックする（S131)。割込み要求があった場合は（S131:Yes)、割込みハンドラINTHL1は、割込みを要求したセンサIDに対応するエントリアドレス４１ａを管理テーブル４１から取得し（S132)、取得したエントリアドレスに格納されたデータ取得処理を実行する（S133)。データ取得処理が終了したら、割込みハンドラINTHL1は、対応するセンサIDの割込みフラグを“１”から“０”にクリアする（S134)。割込みハンドラINTHL1は、割込みフラグが“１”となっている全てのセンサIDについてのデータ取得処理を実行したか否かを判定する（S135)。判定結果がNoである場合は、S132に戻り、割込みフラグが“１”であるセンサIDに対して同様の処理を実行する。
【００２４】
次に、図３（Ｂ）のタイムチャートなどを参照してプロセッサシステム１００の動作をより詳細に説明する。センシング開始時刻を時刻0とすると、センシング中は以下の動作が行われる。時刻0では、センサＡ,Ｂ,Ｃがセンシングを行い、センサＡ,Ｂ,Ｃでデータが生成される。各センサＡ〜Ｃは、ＩＮＴＣ１０へ割込み要求を発行する。これにより、ＩＮＴＣ１０は、割込み通知レジスタ１１を（111)とする。また、いずれかの割込みフラグが“１”になったので、ＩＮＴＣ１０は、プロセッサ３０に対して割込み通知をレベル信号で発行する。また、ＩＮＴＣ１０は、割込み通知レジスタ１１のレジスタ値（111)と起床トリガレジスタ１２のレジスタ値（100)とを比較し、起床トリガレジスタ１２で“１”となっているビットが、割込み通知レジスタ１１で“１”となっているか否かをチェックする。この場合の判定結果はYesとなり、ＩＮＴＣ１０はＰＭＵ２０へプロセッサ３０の起床を要求する。ＰＭＵ２０は、ＩＮＴＣ１０からプロセッサ起床要求を受け取ると、プロセッサ３０をスリープ状態からアクティブ状態へ遷移させる。
【００２５】
これにより、プロセッサ３０は起床する。このとき、ＩＮＴＣ１０より割込み通知が発行されているため、プロセッサ３０は割込みハンドラINTHL1を実行する。割込みハンドラINTHL1は、割込み通知レジスタ１１のレジスタ値（111)を取得する（図７:S130)。割込みハンドラINTHL1は、割込み通知レジスタ１１のレジスタ値に“１”のビットがあるため、データ取得処理を実行する。まず、割込みハンドラINTHL1は、割込み要求のあるセンサIDをビット位置より特定する。この場合は、まず、ID=0を選択する。割込みハンドラINTHL1は、管理テーブル４１からID=0のエントリアドレス0x1100を取得し（図７:S132)、メモリ４０のエントリアドレス0x1100にストアされたセンサＡデータ取得処理RT13を実行する（図７:S133)。次に、割込みハンドラINTHL1は、ID=0の割込みフラグを“0”にクリアする（図７:S134)。同様に、ID=1が特定され、センサＢデータ取得処理RT14が実行される。さらに、ID=2が特定され、センサＣデータ取得処理RT15が実行される。すべての要求されたセンサIDの処理が実行されたため、割込みハンドラINTHL1の処理が終了し、アプリケーションプログラムAP1に処理が戻る。アプリケーションプログラムAP1は、プロセッサ３０をスリープ状態とする。
【００２６】
次に、時刻80で、センサＡから割込み要求が発行される。このときは、割込み通知レジスタ１１には（100)のレジスタ値が格納される。ＩＮＴＣ１０は、起床トリガレジスタ１２で“１”となっているビットが、割込み通知レジスタ１１で“１”となっているか否かをチェックする。この場合は、判定結果はYesとなる。そのため、プロセッサ３０がＰＭＵ２０によって起床され、割込みハンドラINTHL1によってセンサＡのデータ取得処理が実行される。
【００２７】
次に、時刻100で、センサＢから割込み要求が発行される。このときの割込み通知レジスタ１１の値は（010)となる。しかし、センサＢに対応するID=1のビットが両レジスタ１１，１２で“１”になっていないため、ＩＮＴＣ１０はＰＭＵ２０へのプロセッサ起床要求を発行しない。そのため、プロセッサ３０はスリープ状態のままであり、センサＢのデータ取得処理は行われない。
【００２８】
次に、時刻125で、センサＣから割込み要求が発行される。このときの割込み通知レジスタ１１の値は（011)となる。しかし、センサＢに対応するID=1のビットと、センサＣに対応するID=2のビットが両レジスタ１１,１２で“１”になっていないため、ＩＮＴＣ１０はＰＭＵ２０へのプロセッサ起床要求を発行しない。そのため、プロセッサ３０はスリープ状態のままであり、センサＢおよびセンサＣのデータ取得処理は行われない。
【００２９】
次に、時刻160で、センサＡから割込み要求が発行される。このときの割込み通知レジスタ１１の値は（111)となる。センサＡに対応するID=0のビットが両レジスタ１１，１２で“１”になっているため、ＩＮＴＣ１０はＰＭＵ２０へプロセッサ３０の起床要求を発行する。ＰＭＵ２０は、ＩＮＴＣ１０からプロセッサ起床要求を受け取ると、プロセッサ３０を起床する。これにより、割込みハンドラINTHL1が実行され、センサＡ、Ｂ、Ｃそれぞれのデータ取得処理が行われる。その後、プロセッサ３０はスリープ状態となる。
【００３０】
以下、同様に時刻240、時刻320、時刻400、時刻480でのみプロセッサ３０が起床し、その各時刻までに割込み要求があった１又は複数のセンサのデータ取得処理が実行される。
【００３１】
このように第１の実施形態では、複数のデータ取得間隔のうちの最小のデータ取得間隔に基づいてプロセッサ３０を起床させており、プロセッサ３０のスリープ状態とアクティブ状態との遷移回数を削減することが可能である。このため、プロセッサ３０の消費電力を削減させることができる。また、プロセッサ３０が取得するよりも前に、センサデータが上書きされることがないため、センサデータを取りこぼすことがない。
【００３２】
(第２の実施形態）
第１の実施形態では、各センサＡ〜Ｃは、データ生成時に割込み要求を発行する。しかし、センサによっては割込み要求を発行しないものもある。第２の実施形態では、全てのセンサＡ〜Ｃが割込み要求機能を持たない場合を想定している。
【００３３】
図８は、第２の実施形態にかかるプロセッサシステム１１０を示す機能ブロックである。プロセッサシステム１１０は、センサＡ〜Ｃに接続されている。図８においては、図１のＩＮＴＣ１０がリアルタイムクロックタイマ（Real-time  Clock、以下、ＲＴＣタイマという）５０に置換されている。ＲＴＣタイマ５０は時間を計数するカウンタを有する。ＲＴＣタイマ５０は、プロセッサ３０がスリープ状態でも常に動作を続ける。プロセッサ３０は、内部タイマ３１を備えている。内部タイマ３１は、時間を計数するカウンタを有する。内部タイマ３１は、プロセッサ３０がスリープ状態のときは計時動作を停止する。
【００３４】
ＲＴＣタイマ５０は、ＲＴＣトリガレジスタ５１を有する。ＲＴＣトリガレジスタ５１は、プロセッサ３０が起床するためのトリガとなるセンサの次回のデータ生成時刻である次回処理時刻を記憶する。ＲＴＣタイマ５０は、そのカウント値が、ＲＴＣトリガレジスタ５１のレジスタ値に一致したとき、ＰＭＵ２０へプロセッサ起床要求を発行し、かつプロセッサ３０へ割込み要求を通知する機能を有する。プロセッサ３０は、プロセッサシステム１１０の起動時に、ＲＴＣトリガレジスタ５１の設定処理を行う。ＰＭＵ２０は、プロセッサシステム１１０に含まれるＲＴＣタイマ５０、プロセッサ３０、メモリ４０などに対する電源供給を管理する。ＰＭＵ２０は、ＲＴＣタイマ５０からの要求に従いプロセッサ３０を起床させる。
【００３５】
メモリ４０には、管理テーブル４２と、プロセッサ３０が実行するアプリケーションプログラムAP2および割込みハンドラINTHL2が格納される。アプリケーションプログラムAP2は、プロセッサシステム１１０の起動時に動作するプログラムであり、センサデータ取得のための初期設定を行う。管理テーブル登録ルーチンRT21は、アプリケーションプログラムAP2に呼び出されて動作するプログラムであり、管理テーブル４２へ管理情報の登録処理を行う。割込みハンドラINTHL2は、プロセッサ３０がスリープ状態からアクティブ状態に遷移したときに、起動され、データ取得処理を実行する。起床トリガ設定ルーチンRT22は、割込みハンドラINTHL2から呼び出されて動作するプログラムであり、ＲＴＣトリガレジスタ５１への設定処理を行う。センサＡデータ取得処理RT23は、センサＡのデータを取得して、メモリ４０内の所定のデータ格納領域へ格納する。センサＢデータ取得処理RT24は、センサＢのデータを取得して、メモリ４０内の所定のデータ格納領域へ格納する。センサＣデータ取得処理RT25は、センサＣのデータを取得して、メモリ４０内の所定のデータ格納領域へ格納する。内部タイマ再設定ルーチンRT26は、割込みハンドラINTHL2から呼び出されて動作するプログラムであり、内部タイマ３１の設定処理を行う。
【００３６】
図９は、管理テーブル４２のデータ構造を説明するための図である。管理テーブル４２は、センサIDと、データ取得処理のエントリアドレス４２ａと、センサデータ取得の処理インターバル４２ｂと、次回処理時刻（next_proc)４２ｃとを組とした管理情報を持つ。エントリアドレス４２ａは、センサIDに対応するセンサデータの取得処理RT23〜RT25が格納されているメモリ４０の物理アドレスを示している。処理インターバル４２ｂは、各センサＡ〜Ｃのデータ生成周期を示している。次回処理時刻（next_proc)４２ｃは、各センサＡ〜Ｃの次回のデータ生成時刻を示している。プロセッサ３０は、プロセッサシステム１１０の起動時に、管理テーブル４２の設定処理を行う。
【００３７】
以下、第２の実施形態の動作を詳細に説明する。図１０は、アプリケーションプログラムAP2の動作手順を示すフローチャートである。プロセッサシステム１１０が起動されると、プロセッサ３０は、アプリケーションプログラムAP2を実行する。アプリケーションプログラムAP2は、センサＡ、Ｂ、Ｃを初期化する（S200)。
【００３８】
次に、プロセッサ３０は、管理テーブル登録ルーチンRT21を実行する（S201)。図１１は、管理テーブル登録ルーチンRT21を示すフローチャートである。まず、ID=0、entry  address=0x1100、interval=80が指定されて、管理テーブル登録ルーチンRT21が実行される。これにより、センサＡの管理情報が管理テーブル４２に登録される。同様に、センサＢおよびセンサＣの管理情報が管理テーブル４２に登録される（図１１:S210)。次に、プロセッサ３０は、各センサIDの次回処理時刻（next_proc)４２ｃに、次回処理時刻を設定する。管理テーブル登録ルーチンRT21の実行時には、プロセッサ３０は、次回処理時刻４２ｃに、内部タイマ３１から取得した現在時刻（時刻0)を設定する（S211)。
【００３９】
プロセッサ３０は、ＲＴＣタイマ５０から割込み要求を受信したとき割込みハンドラINTHL2を実行するように割込みべクタなどを設定する（図１０:S202)。プロセッサ３０は、初回のデータ取得処理を行うために割込みハンドラINTHL2を実行する（S203)。その後、アプリケーションプログラムAP2は、プロセッサ３０をスリープ状態とする（S204)。
【００４０】
図１２は、割込みハンドラINTHL2の動作手順を示すフローチャートである。割込みハンドラINTHL2は、まず、内部タイマ再設定ルーチンRT26を実行する（S220)。図１３は、内部タイマ再設定ルーチンRT26を示すフローチャートである。内部タイマ再設定ルーチンRT26は、プロセッサ３０が起床されたときに、停止していた内部タイマ３１の時刻を再設定する処理である。まず、プロセッサ３０は、ＲＴＣタイマ５０から現在時刻を取得し（図１３:S230)、取得した現在時刻によって内部タイマ３１を再設定する（S231)。
【００４１】
次に、割込みハンドラINTHL2は、管理テーブル４２からID=0のエントリアドレス４２ａ、次回処理時刻４２ｃを取得する（S221)。次に、割込みハンドラINTHL2は、内部タイマ３１から取得した現在時刻をID=0の次回処理時刻４２ｃと比較する（S222)。割込みハンドラINTHL2は、現在時刻がID=0の次回処理時刻と一致するかあるいは現在時刻がID=0の次回処理時刻より進んでいる場合は（Ｓ222:Yes)、センサＡデータ取得処理RT23を実行する（S223)。次に、割込みハンドラINTHL2は、ID=0の次回処理時刻に処理インターバル４２ｂを加算した値で、ID=0の次回処理時刻４２ｃを更新する（S224)。割込みハンドラINTHL2は、管理テーブル４２に登録されている全てのセンサIDについての処理が終了したか否かを判定し（S225)、判定結果がNoである場合は、S221〜S225の処理を、全てのセンサIDについて実行する。
【００４２】
このようにして、センサデータの取得処理が終了すると、割込みハンドラINTHL2は、起床トリガ設定ルーチンRT22を実行する（S226)。図１４は、起床トリガ設定ルーチンRT22を示すフローチャートである。起床トリガ設定ルーチンRT22は、処理インターバルが最小のセンサIDの次回処理時刻をＲＴＣトリガレジスタ５１に設定するための処理である。プロセッサ３０は、管理テーブル４２から処理インターバルが最小のセンサIDを取得する（S240)。この場合は、センサＡ(ID=0)である。次に、プロセッサ３０は、取得したセンサIDの次回処理時刻を、ＲＴＣトリガレジスタ５１に設定する（S241)。
【００４３】
次に、図３（Ｂ）のタイムチャートなどを参照してプロセッサシステム１１０の動作をより詳細に説明する。プロセッサシステム１１０が起動された後、アプリケーションプログラムAP2が実行される。プロセッサ３０は、センサＡ、Ｂ、Ｃを初期化する（図１０:S200)。次に、プロセッサ３０は、管理テーブル４２に各センサＡ〜Ｃの管理情報を設定する（S201)。この段階では、各センサＡ〜Ｃの次回処理時刻４２ｃには、時刻0が設定される。次に、プロセッサ３０は、ＲＴＣタイマ５０から割込み要求を受信したとき割込みハンドラINTHL2を実行するように割込みべクタなどを設定する（S202)。そして、プロセッサ３０は、初回のデータ取得処理を行うために割込みハンドラINTHL2を実行する（S203)。
【００４４】
時刻0では、まずＲＴＣタイマ５０の現在時刻で内部タイマ３１を設定する（図１２:S220)。時刻0では、内部タイマ３１の値に変化はなく、時刻0のままである。次に、プロセッサ３０は、管理テーブル４２からID=0の次回処理時刻（0)を取得し、内部タイマ３１から現在時刻（0)を取得し、現在時刻（0)と次回処理時刻（0)を比較する（S222)。現在時刻（0)と次回処理時刻（0)は一致するため、S222の判定がYesとなる。このため、プロセッサ３０は、センサＡデータ取得処理RT23を実行する（S223)。次に、プロセッサ３０は、ID=0の次回処理時刻を、次回処理時刻（0)+処理インターバル（80)=80で更新する（S224)。プロセッサ３０は、ID=1、ID=2についても同様に、センサＢデータ取得処理RT24、センサＣデータ取得処理RT25を実行し、それぞれの次回処理時刻を更新する。センサＡ〜Ｃの処理が終了したときの管理テーブル４２の状態が図９に示されている。次に、プロセッサ３０は、起床トリガ設定ルーチンRT22を実行する（S226)。処理インターバルが最小であるID=0の次回処理時刻=80がＲＴＣトリガレジスタ５１に設定される。その後、割込みハンドラINTHL2の処理が終了すると、アプリケーションプログラムAP2に処理が戻る。アプリケーションプログラムAP2は、プロセッサ３０をスリープ状態とする。
【００４５】
次に、時刻80となると、ＲＴＣタイマ５０のタイマ値がＲＴＣトリガレジスタ５１のレジスタ値（=80)と一致する。これにより、ＲＴＣタイマ５０からＰＭＵ２０へプロセッサ起床要求が発行され、ＲＴＣタイマ５０からプロセッサ３０への割込み要求が通知される。これにより、プロセッサ３０はアクティブ状態となり、割込みハンドラINTHL2を実行する。
【００４６】
割込みハンドラINTHL2は、まず内部タイマ３１をＲＴＣタイマ５０の現在時刻=80に再設定する（図１２:S220)。その後、プロセッサ３０は、ID=0の次回処理時刻（80)と内部タイマ３１の現在時刻（80)を比較する（S222)。現在時刻（80)と次回処理時刻（80)は一致するため（S222:Yes）、プロセッサ３０は、センサＡデータ取得処理RT23を実行する（S223)。次に、プロセッサ３０は、ID=0の次回処理時刻を、次回処理時刻（80)+処理インターバル（80)=160で更新する（S224)。次に、プロセッサ３０は、ID=1についての処理を行う。このとき、ID=1の次回処理時刻=100である。ID=1の次回処理時刻（100)＞現在時刻（80)であるため（S222:No）、プロセッサ３０は、ID=1についてのデータ取得処理および次回処理時刻の更新を行わない。同様に、プロセッサ３０は、ID=2についてのデータ取得処理および次回処理時刻の更新を行わない。次に、プロセッサ３０は、起床トリガ設定ルーチンRT22を実行する（S226)。処理インターバルが最小であるID=0の次回処理時刻=160がＲＴＣトリガレジスタ５１に設定される。その後、割込みハンドラINTHL2の処理が終了すると、アプリケーションプログラムAP2に処理が戻る。アプリケーションプログラムAP2は、プロセッサ３０をスリープ状態とする。
【００４７】
次に、時刻160となると、ＲＴＣタイマ５０のタイマ値がＲＴＣトリガレジスタ５１のレジスタ値（=160)と一致する。これにより、ＲＴＣタイマ５０からＰＭＵ２０ヘプロセッサ起床要求が発行され、ＲＴＣタイマ５０からプロセッサ３０への割込み要求が発行される。これにより、プロセッサ３０はアクティブ状態となり、割込みハンドラINTHL2が実行される。
【００４８】
割込みハンドラINTHL2は、まず内部タイマ３１をＲＴＣタイマ５０の現在時刻=160に再設定する（図１２:S220)。その後、プロセッサ３０は、ID=0の次回処理時刻（160)と内部タイマ３１の現在時刻（160)を比較する（S222)。現在時刻（160)と次回処理時刻（160)は一致するため（S222:Yes）、プロセッサ３０は、センサＡデータ取得処理RT23を実行する（S223)。次に、プロセッサ３０は、ID=0の次回処理時刻を、次回処理時刻（160)+処理インターバル（80)=240で更新する（S224)。次に、プロセッサ３０は、ID=1についての処理を行う。このとき、ID=1の次回処理時刻=100であり、現在時刻（160)＞次回処理時刻（100)が成立するため（S222:Yes）、プロセッサ３０は、センサＢデータ取得処理RT24を実行する（S223)。次に、プロセッサ３０は、ID=1の次回処理時刻を、次回処理時刻（100)+処理インターバル（100)=200で更新する（S224)。ID=2についても同様に、次回処理時刻=125であるため（S222:Yes）、センサＣデータ取得処理RT25が行われ、次回処理時刻は、次回処理時刻（125)+処理インターバル（125)=250で更新される（S224)。次に、プロセッサ３０は、起床トリガ設定ルーチンRT22を実行する（S226)。処理インターバルが最小であるID=0の次回処理時刻=240がＲＴＣトリガレジスタ５１に設定される。その後、割込みハンドラINTHL2の処理が終了すると、アプリケーションプログラムAP2に処理が戻る。アプリケーションプログラムAP2は、プロセッサ３０をスリープ状態とする。
【００４９】
以下、同様に時刻240、時刻320、時刻400、時刻480でのみプロセッサ３０が起床し、その各時刻が各IDの次回処理時刻以上の場合、それぞれのデータ取得処理が実行される。
【００５０】
このように、第２の実施形態においては、タイマによってセンサデータの取得処理を管理しているので、センサがデータ処理要求のための割込み要求機能を持たない場合でも、プロセッサ３０のスリープ状態とアクティブ状態との遷移回数を削減することが可能である。このため、プロセッサ３０の消費電力を削減させることができる。
【００５１】
(第３の実施形態）
第３の実施形態では、割込み要求機能を持っているセンサと、割込み要求機能を持っていないセンサが混在する場合を想定している。
【００５２】
図１５は、第３の実施形態にかかるプロセッサシステム１２０を示す機能ブロックである。プロセッサシステム１２０には、３つのセンサＡ、Ｂ、Ｃが接続されている。センサＡは、割込み要求機能を持ち、8Omsec間隔でセンシングデータが生成される。センサＢは、割込み要求機能を持たず、10Omsec間隔でセンシングデータが生成される。センサＢは、第２の実施形態で説明したタイマ機能を用いて処理インターバルを設定する。センサＣは、割込み要求機能を持ち、125msec間隔でセンシングデータが生成される。
【００５３】
プロセッサシステム１２０は、ＩＮＴＣ１０およびＲＴＣタイマ５０を有する。ＩＮＴＣ１０の機能およびＲＴＣタイマ５０の機能は、先の第１の実施形態または第２の実施形態で説明したものと同じであり、重複する説明は省略する。プロセッサ３０は、内部タイマ３１を有する。ＰＭＵ２０は、プロセッサシステム１２０に含まれるＩＮＴＣ１０、プロセッサ３０、メモリ４０、ＲＴＣタイマ５０などに対する電源供給を管理する。ＰＭＵ２０は、ＩＮＴＣ１０またはＲＴＣタイマ５０からの要求に従いプロセッサ３０を起床させる。
【００５４】
メモリ４０には、管理テーブル４３と、プロセッサ３０が実行するアプリケーションプログラムAP3、割込みハンドラINTHL3、管理テーブル登録ルーチンRT31、起床トリガ設定ルーチンRT32、センサＡデータ取得処理RT33、センサＢデータ取得処理RT34、センサＣデータ取得処理RT35、内部タイマ再設定ルーチンRT36が格納される。
【００５５】
図１６は、管理テーブル４３のデータ構造を説明するための図である。管理テーブル４３は、センサIDと、データ取得処理のエントリアドレス４３ａと、処理インターバル４３ｂと、次回処理時刻（next_proc)４３ｃと、トリガ種別４３ｄとを組とした管理情報を持つ。トリガ種別４３ｄは、センサからの割込み要求によってデータ取得処理を行う（int)か、タイマで管理される時間間隔でデータ取得処理を行う（timer)かを区別する。プロセッサ３０は、プロセッサシステム１２０の起動時に、管理テーブル４３の設定処理を行う。
【００５６】
以下、第３の実施形態の動作を詳細に説明する。図１７は、アプリケーションプログラムAP3の動作手順を示すフローチャートである。プロセッサシステム１２０が起動されると、プロセッサ３０は、アプリケーションプログラムAP3を実行する。アプリケーションプログラムAP3は、センサＡ、Ｂ、Ｃを初期化する（S300)。
【００５７】
次に、プロセッサ３０は、管理テーブル登録ルーチンRT31を実行する（S301)。図１８は、管理テーブル登録ルーチンRT31を示すフローチャートである。まず、各センサIDに対し、エントリアドレス４３ａ、処理インターバル４３ｂ、トリガ種別４３ｄが設定される（図１８:S310)。次に、プロセッサ３０は、各センサIDの次回処理時刻（next_proc)４３ｃに、次回処理時刻を設定する。管理テーブル登録ルーチンRT31の実行時には、プロセッサ３０は、次回処理時刻４３ｃに、内部タイマ３１から取得した現在時刻（時刻0)を設定する（S311)。
【００５８】
プロセッサ３０は、ＩＮＴＣ１０からの割込み要求またはＲＴＣタイマ５０から割込み要求を受信したとき割込みハンドラINTHL3を実行するように割込みべクタなどを設定する(図１７:S302)。次に、プロセッサ３０は、割込みハンドラINTHL3を実行する（S303)。その後、アプリケーションプログラムAP3は、プロセッサ３０をスリープ状態とする（S304)。
【００５９】
図１９は、割込みハンドラINTHL3の動作手順を示すフローチャートである。割込みハンドラINTHL3は、まず、内部タイマ再設定ルーチンRT36を実行する（S320)。内部タイマ再設定ルーチンRT36は、図１３に示した手順と同様である。次に、割込みハンドラINTHL3は、割込み通知レジスタ１１のレジスタ値を取得する（S321)。割込みハンドラINTHL3は、取得したレジスタ値を参照し、センサＡ〜Ｃから割込み要求が発生しているか否かをチェックする（S322)。割込み要求があった場合は（S322:Yes)、割込みハンドラINTHL3は、割込み要求を発行しているセンサIDに対応するエントリアドレスを管理テーブル４３から取得し（S323)、取得したエントリアドレスで指定されるデータ取得処理を実行する（S324)。その後、割込みハンドラINTHL3は、対応するセンサIDの割込みフラグを“１”から“０”にクリアする（S325)。次に、割込みハンドラINTHL3は、割込み要求のあったセンサIDの次回処理時刻４３ｃに処理インターバル４３ｂを加算した値で、当該センサIDの次回処理時刻を更新する（S326)。割込みハンドラINTHL3は、トリガ種別が割込みであるセンサであってかつ割込みフラグが“１”となっている全てのセンサIDについてのデータ取得処理を実行したか否かを判定する（S327)。判定結果がNoである場合は、前記同様の処理を、すべての割込みフラグが“１”であるセンサIDに対して実行する。
【００６０】
次に、割込みハンドラINTHL3は、管理テーブル４３からトリガ種別がタイマであるセンサIDのエントリアドレス４３ａ、次回処理時刻４３ｃを取得する（S328)。次に、割込みハンドラINTHL3は、内部タイマ３１の現在時刻と、S328で取得したセンサIDの次回処理時刻４３ｃと比較する（S329)。割込みハンドラINTHL3は、当該センサIDの次回処理時刻４３ｃが現在時刻以下である場合は（S329:Yes)、当該センサIDのエントリアドレスで指定されるデータ取得処理を実行する（S330)。次に、割込みハンドラINTHL3は、当該センサIDの次回処理時刻に処理インターバル４３ｂを加算した値で、次回処理時刻を更新する（S331)。割込みハンドラINTHL3は、トリガ種別がタイマである全てのセンサIDについての処理が終了したか否かを判定し（S332)、判定結果がNoである場合は、S328〜S332の処理を、トリガ種別がタイマである全てのセンサについて実行する。次トリガ種別がタイマである全てのセンサについて処理が終了する（S332:Yes）と、割込みハンドラINTHL3は、起床トリガ設定ルーチンRT32を実行する（S333)。
【００６１】
図２０は、起床トリガ設定ルーチンRT32を示すフローチャートである。プロセッサ３０は、管理テーブル４３から処理インターバルが最小のセンサIDを取得する（S340)。この場合は、センサＡ(ID=0)である。次に、プロセッサ３０は、取得したセンサIDのトリガ種別が割込みであるかタイマであるかを判別する（S341)。トリガ種別が割込みである場合（S341:Yes）、プロセッサ３０は、取得したIDを持つセンサからの割込み処理要求があったときのみ、ＩＮＴＣ１０からＰＭＵ２０へのプロセッサ起床要求が発行されるように、起床トリガレジスタ１２を設定する（S342)。すなわち、プロセッサ３０は、取得したセンサIDの起床トリガフラグを“１”にする。また、トリガ種別がタイマである場合（S341:No)、取得したセンサIDの次回処理時刻によって、ＲＴＣトリガレジスタ５１を設定する（S343)。
【００６２】
次に、図３（Ｂ）のタイムチャートなどを参照してプロセッサシステム１２０の動作をより詳細に説明する。プロセッサシステム１２０が起動された後、アプリケーションプログラムAP3が実行される。プロセッサ３０は、センサＡ、Ｂ、Ｃを初期化する（図１７:S300)。次に、プロセッサ３０は、管理テーブル４３に各センサＡ〜Ｃの管理情報を設定する（S301)。センサＡに関して、ID=0、entry  address=Ox1100、interval=80、trigger  type=int、next_proc=0が設定される。センサＢに関して、ID=1、entry  address=0x1200、interval=100、trigger  type=timer、next_proc=0が設定される。センサＣに関して、ID=2、entry  address=0x1300、interval=125、trigger  type=int、next_proc=0が設定される。次に、プロセッサ３０は、ＩＮＴＣ１０またはＲＴＣタイマ５０から割込み要求を受信したとき割込みハンドラINTHL3を実行するように割込みべクタなどを設定する（S302)。そして、プロセッサ３０は、初回のデータ取得処理を行うために割込みハンドラINTHL3を実行する（S303)。
【００６３】
センシング開始時刻である時刻0では、各センサＡ〜Ｃのセンシングが行われ、データが生成される。割込みハンドラINTHL3は、内部タイマ３１の再設定を行う（図１９:S320)。時刻0では、内部タイマ３１の値に変化はなく、時刻0のままである。次に、プロセッサ３０は、割込み通知レジスタ１１のレジスタ値を取得する（S321）。時刻0においては、センサＡとＣから割込み要求があるため、レジスタ値は（101)である。割込みハンドラINTHL3は、割込み通知レジスタ１１のレジスタ値に“１”があるため、データ取得処理を実行する。まず、割込みハンドラINTHL3は、割込み要求のあるセンサIDをビット位置より特定する。この場合は、まず、ID=0を選択する。割込みハンドラINTHL3は、管理テーブル４３からID=0のエントリアドレス0x1100を取得し（S323)、メモリ４０のエントリアドレス0x1100にストアされたセンサＡデータ取得処理RT33を実行する（S324)。次に、割込みハンドラINTHL3は、ID=0の割込みフラグを“0”にクリアする(S325)。さらに、割込みハンドラINTHL3は、次回処理時刻を、80(=次回処理時刻（0)+処理インターバル（80))に更新する（S326)。同様に、ID=2が特定され、センサＣデータ取得処理RT35が実行され、さらにID=2の割込みフラグが“０”にクリアされ、さらに次回処理時刻の更新（0+125=125で更新）が実行される。
【００６４】
次に、プロセッサ３０は、トリガ種別がタイマであるID=1の管理情報を取得する（S328)。プロセッサ３０は、ID=1の次回処理時刻（0)と内部タイマ３１の現在時刻（0)を比較する（S329)。現在時刻（0)と次回処理時刻（0)は一致するため（S329:Yes）、プロセッサ３０は、センサＢデータ取得処理RT34を実行する（S330)。プロセッサ３０は、この後、ID=1の次回処理時刻を、次回処理時刻（0)+処理インターバル（100)=100で更新する（S331)。以上でトリガ種別がタイマのすべてのセンサIDを処理したので、次に、プロセッサ３０は起床トリガ設定ルーチンRT32を実行する（S333)。プロセッサ３０は、処理インターバルが最小のID=0を選択し（図２０:S340)、ID=0のトリガ種別が割込みであることを確認し（図２０：S341:Yes）、起床トリガレジスタ１２のID=0のビットを“１”にする（S342)。これにより、起床トリガレジスタ１２は（100)に設定される。
【００６５】
次に、時刻80に、センサＡから割込み要求が発行される。これにより、割込み通知レジスタ１１のレジスタ値は（100)となり、ＩＮＴＣ１０はプロセッサ３０に対して割込み通知をレベル信号で発行する。ＩＮＴＣ１０は、起床トリガレジスタ１２で“１”となっているビットが、割込み通知レジスタ１１で“１”となっているか否かをチェックする。この場合は、判定結果はYesとなり、ＩＮＴＣ１０はＰＭＵ２０ヘプロセッサ３０の起床を要求する。ＰＭＵ２０は、ＩＮＴＣ１０からプロセッサ起床要求を受け取ると、プロセッサ３０を起床する。プロセッサ３０は、起床されたとき、ＩＮＴＣ１０から割込みの通知を受信しているため、プロセッサ３０は割込みハンドラINTHL3を実行する。
【００６６】
割込みハンドラINTHL3は、内部タイマ３１の再設定を行う。その後、プロセッサ３０は、割込み通知レジスタ１１のレジスタ値（100)に従い、センサＡデータ取得処理RT33を実行し、ID=0の次回処理時刻を160（=80+80）で更新する。次に、プロセッサ３０は、ID=1の管理情報を取得する。時刻80では、現在時刻（80)が次回処理時刻（100)以上ではないので、プロセッサ３０はデータ取得処理を行わない。この後、起床トリガ設定ルーチンRT32が実行され、プロセッサ３０はスリープ状態に遷移される。
【００６７】
次に、時刻125に、センサＣから割込み要求が発行される。これにより、割込み通知レジスタ１１のレジスタ値は（001)となる。しかし、センサＣに対応するID=2のビットが両レジスタ１１，１２で“１”になっていないため、ＩＮＴＣ１０は、ＰＭＵ２０へプロセッサ起床要求を発行しない。そのため、プロセッサ３０はスリープ状態のままであり、センサＣのデータの取得処理は行われない。
【００６８】
次に、時刻160でセンサＡから割込み要求が発行される。これにより、割込み通知レジスタ１１のレジスタ値は（101)となる。センサＡに対応するID=0のビットが両レジスタ１１，１２で“１”になっているため、ＩＮＴＣ１０はＰＭＵ２０へプロセッサ３０の起床を要求する。ＰＭＵ２０は、ＩＮＴＣ１０からプロセッサ起床要求を受け取ると、プロセッサ３０を起床する。プロセッサ３０は、起床されたとき、ＩＮＴＣ１０から割込み通知を受信しているため、割込みハンドラINTHL3を実行する。割込みハンドラINTHL3は、内部タイマ３１の再設定後、割込み通知レジスタ１１のレジスタ値（101)に従って、ID=0およびID=2のデータ取得処理と次回処理時刻の更新を実行する。
【００６９】
次に、プロセッサ３０は、ID=1の管理情報を取得する。プロセッサ３０は、ID=1の次回処理時刻（100)と内部タイマ３１の現在時刻（160)を比較する。現在時刻（160)が次回処理時刻（100)以上である条件が成立するため、プロセッサ３０は、ID=1のデータ取得処理を実行し、さらに次回処理時刻の更新を行う。次に、プロセッサ３０は起床トリガ設定ルーチンRT32を実行し、処理インターバルが最小のID=0を選択し、起床トリガレジスタ１２を（100)に設定する。この後、プロセッサ３０はスリープ状態に遷移される。なお、起床トリガ設定ルーチンRT32において、起床トリガレジスタ１２に対し常に同じレジスタ値を上書き設定する場合は、２回目以降のS330の処理を省略してもよい。
【００７０】
以下、同様に時刻240、時刻320、時刻400、時刻480でのみプロセッサ３０が起床し、それぞれの時刻で、トリガ種別が割込みであるセンサは割込み通知レジスタ１１の値に従ってデータ取得処理が実行され、トリガ種別がタイマであるセンサは次回処理時刻の値に従ってデータ取得処理が実行される。
【００７１】
(第３の実施形態の変形例）
この変形例では、最小の処理インターバルをもつセンサが割込み要求機能を持たずタイマにて処理インターバルが決定される場合を想定している。センサＡは、最小の8Omsec間隔でセンシングデータが生成され、割込み要求機能を持たない。センサＢは、10Omsec間隔でセンシングデータが生成され、割込み要求機能を持たない。センサＣは、125msec間隔でセンシングデータが生成され、割込み要求機能を持つ。
【００７２】
図３（Ｂ）のタイムチャートなどを参照してプロセッサシステム１２０の動作をより詳細に説明する。プロセッサシステム１２０が起動された後、アプリケーションプログラムAP3が実行される。プロセッサ３０は、センサＡ、Ｂ、Ｃを初期化する（図１７:S300)。次に、プロセッサ３０は、管理テーブル４３に各センサＡ〜Ｃの管理情報を設定する（S301)。センサＡに関しては、ID=0、entry  address=0x1100、interval=80、trigger  type=timer、next_proc=0が設定される。センサＢに関しては、ID=1、entry  address=0x1200、interval=100、trigger  type=timer、next_proc=0が設定される。センサＣに関しては、ID=2、entry  address=0x1300、interval=125、trigger  type=int、next_proc=0が設定される。次に、プロセッサ３０は、ＩＮＴＣ１０またはＲＴＣタイマ５０から割込み要求を受信したとき割込みハンドラINTHL3を実行するように割込みべクタなどを設定する（S302)。そして、プロセッサ３０は、初回のデータ取得処理を行うために割込みハンドラINTHL3を実行する（S303)。
【００７３】
時刻0では、各センサＡ〜Ｃのセンシングが行われ、データが生成される。割込みハンドラINTHL3は、内部タイマ３１の設定を行う（図１９:S320)。時刻0では、内部タイマ３１の値に変化はなく、時刻0のままである。次に、プロセッサ３０は、割込み通知レジスタ１１のレジスタ値を取得する。時刻0においては、センサＣから割込み要求があるため、レジスタ値は（001)である。割込みハンドラINTHL3は、ID=2のデータ取得処理を実行する。割込みハンドラINTHL3は、管理テーブル４３からID=2のエントリアドレス0x1300を取得し（S323)、メモリ４０のエントリアドレス0x1300で指定されるセンサＣデータ取得処理RT35を実行する（S324)。次に、割込みハンドラINTHL3は、ID=2の割込みフラグを“０”にクリアする（S325)。さらに、割込みハンドラINTHL3は、次回処理時刻を、125(=次回処理時刻（0)+処理インターバル（125))に更新する（S326)。
【００７４】
次に、プロセッサ３０は、トリガ種別がタイマであるID=0の管理情報を取得する（S328)。プロセッサ３０は、ID=0の次回処理時刻（0)と内部タイマ３１の現在時刻（0)を比較する（S329)。現在時刻（0)と次回処理時刻（0)は一致するため（S329:Yes）、プロセッサ３０は、センサＡデータ取得処理RT33を実行する（S330)。プロセッサ３０は、この後、ID=0の次回処理時刻を、次回処理時刻（0)+処理インターバル（80)=80で更新する（S331)。
【００７５】
次に、プロセッサ３０は、ID=1の管理情報を取得する（S328)。プロセッサ３０は、ID=1の次回処理時刻（0)と内部タイマ３１の現在時刻（0)を比較する（S329)。現在時刻（0)と次回処理時刻（0)は一致するため（S329:Yes）、プロセッサ３０は、センサＢデータ取得処理RT34を実行する（S330)。プロセッサ３０は、この後、ID=1の次回処理時刻を、次回処理時刻（0)+処理インターバル（100)=100で更新する(S331)。以上でトリガ種別がタイマのすべてのセンサIDを処理したので、次に、プロセッサ３０は起床トリガ設定ルーチンRT32を実行する（S333)。これにより、プロセッサ３０は、処理インターバルが最小のID=0を選択し（図２０:S340)、ＲＴＣトリガレジスタ５１にID=0の次回処理時刻（80)を設定する（S343）。
【００７６】
次に、時刻80に、ＲＴＣタイマ５０は、ＰＭＵ２０へプロセッサ起床要求を発行し、プロセッサ３０へ割込み要求を発行する。ＰＭＵ２０はプロセッサ３０を起床する。これにより、プロセッサ３０はアクティブ状態となり、ＲＴＣタイマ５０からの割込み要求によって割込みハンドラINTHL3を実行する。
【００７７】
割込みハンドラINTHL3は、内部タイマ３１をＲＴＣタイマ５０の現在時刻=80に再設定する（S320)。その後、プロセッサ３０は、割込み通知レジスタ１１の値を取得する。このとき、割込み通知レジスタ１１のレジスタ値は（000)であって、割込み要求が発行されていない（S322:No)。したがって、プロセッサ３０は、管理テーブル４３からID=0の次回処理時刻（80)と内部タイマ３１の現在時刻（80)を比較する（S329)。現在時刻（80)と次回処理時刻（80)は一致するため（S329:Yes）、プロセッサ３０は、センサＡデータ取得処理RT33を実行する（S330)。そして、プロセッサ３０は、ID=0の次回処理時刻を、次回処理時刻（80)+処理インターバル（80)=160で更新する（S331)。次に、プロセッサ３０は、ID=1についての処理を行う。このとき、ID=1の次回処理時刻=100である。ID=1の次回処理時刻（100)が現在時刻（80)以下でないため（S329:No）、プロセッサ３０は、ID=1についてのデータ取得処理および次回処理時刻の更新は行わない。次に、プロセッサ３０は、起床トリガ設定ルーチンRT32を実行する（S333)。処理インターバルが最小であるID=0の次回処理時刻=160がＲＴＣトリガレジスタ５１に設定される。その後、割込みハンドラINTHL3の処理が終了すると、アプリケーションプログラムAP3に処理が戻る。アプリケーションプログラムAP3は、プロセッサ３０をスリープ状態とする。
【００７８】
次に、時刻125に、センサＣから割込み要求が発行される。これにより、割込み通知レジスタ１１のレジスタ値は（001)となる。センサＣに対応するID=2のビットが両レジスタ１１，１２で“１”になっていないため、ＩＮＴＣ１０は、ＰＭＵ２０へのプロセッサ起床要求を発行しない。そのため、プロセッサ３０はスリープ状態のままであり、センサＣのデータの取得処理は行われない。
【００７９】
時刻160に、ＲＴＣタイマ５０は、ＰＭＵ２０へプロセッサ起床要求を発行し、プロセッサ３０へ割込み要求を通知する。ＰＭＵ２０はプロセッサ３０を起床する。これにより、プロセッサ３０はアクティブ状態となり、ＲＴＣタイマ５０からの割込み要求によって割込みハンドラINTHL3を実行する。
【００８０】
割込みハンドラINTHL3は、内部タイマ３１をＲＴＣタイマ５０の現在時刻=160に再設定する（S320)。その後、プロセッサ３０は、割込み通知レジスタ１１の値を取得する。このとき割込み通知レジスタ１１のレジスタ値は（001)である。このため、割込みハンドラINTHL3は、管理テーブル４３からID=2のエントリアドレス0x1300を取得し（S323)、メモリ４０のエントリアドレス0x1300で指定されるセンサＣデータ取得処理RT35を実行する（S324)。そして、割込みハンドラINTHL3は、ID=2の割込みフラグを“０”にクリアする（S325)。さらに、割込みハンドラINTHL3は、次回処理時刻の更新を行う（S326)。
【００８１】
次に、プロセッサ３０は、管理テーブル４３からID=0の次回処理時刻（160)と内部タイマ３１の現在時刻（160)を比較する（S329)。現在時刻（160)と次回処理時刻（160)は一致するため、プロセッサ３０は、センサＡデータ取得処理RT33を実行する（S330)。そして、プロセッサ３０は、ID=0の次回処理時刻を、次回処理時刻（160)+処理インターバル（80)=240で更新する（S331)。次に、プロセッサ３０は、ID=1についての処理を行う。このとき、ID=1の次回処理時刻=100である。ID=1の次回処理時刻（100)は、現在時刻（160)以下であるため、プロセッサ３０は、センサＢデータ取得処理RT34を実行する（S330)。そして、プロセッサ３０は、ID=1の次回処理時刻を、次回処理時刻（100)+処理インターバル（100)=200で更新する（S331)。次に、プロセッサ３０は、起床トリガ設定ルーチンRT32を実行する（S333)。処理インターバルが最小であるID=0の次回処理時刻=240がＲＴＣトリガレジスタ５１に設定される。その後、割込みハンドラINTHL3の処理が終了すると、アプリケーションプログラムAP3に処理が戻る。アプリケーションプログラムAP3は、プロセッサ３０をスリープ状態とする。
【００８２】
以下、同様に時刻240、時刻320、時刻400、時刻480でのみプロセッサ３０が起床し、それぞれの時刻で、トリガ種別が割込みであるセンサは割込み通知レジスタ１１の値に従ってデータ取得処理が実行され、トリガ種別がタイマであるセンサは次回処理時刻の値に従ってデータ取得処理が実行される。
【００８３】
このように第３の実施形態では、割込み要求を発行する機能を持つセンサと前記機能を持たないセンサが混在している場合でも、より長くプロセッサ３０をスリープ状態とすることができ、消費電力の削減が可能となる。
【００８４】
(第４の実施形態）
第１〜第３の実施形態のセンサＡ〜Ｃは、データ有効時間がデータ取得間隔と等しいという前提がある。この前提がある場合は、最小データ取得間隔に基づいてプロセッサ３０の起床を行うことで、センサデータを取りこぼすことがない。しかしながら、データ有効時間がデータ取得間隔よりも短いセンサがある場合、最小データ取得間隔に基づいてプロセッサ３０の起床を行う制御方法では、データを取りこぼす可能性がある。
【００８５】
例えば、センサが内部にセンサデータを蓄積記憶するFIF0(FirstIn  FirstOut)を持っているとする。プロセッサ３０は、FIFOがセンサデータで満杯になったらFIFOの全データを取得するとする。この場合、データ取得間隔はFIFOが空の状態から満杯になるまでの期間であり、データ有効時間はFIFOが満杯になってから次のデータが生成されFIFOに保存されるまでの期間である。データ有効期間の後にデータを取得すると、FIFOの一部のデータが上書きされて、データの取りこぼしが発生する。第４〜第６の実施形態は、このようなケースにも対応可能である。
【００８６】
図２１は、最小データ取得間隔に基づいてプロセッサ３０の起床を行った場合に、データの取りこぼしが発生する一例を示している。上向きの矢印は、センシングデータが生成される時刻を示している。下向きの矢印は、センシングデータの失効時刻を示している。図２１において、センサＢは100msec間隔でセンシングデータが生成される。センサＢは内部にFIFOを持っており、データ有効期間は25msecであり、処理インターバル100msecより短い。したがって、センサＢに関しては、データの生成から失効までの期間が、当該センシング周期におけるデータ有効期間を示しており、このデータ有効期間に、データを取得しなくてはいけない。図２１の例では、プロセッサは、最小データ取得間隔であるセンサＡの処理インターバル80msec間隔に基づいてデータ取得処理を行っているので、missで示す箇所で、センサＢのデータの取りこぼしが発生している。
【００８７】
図２２は、第４の実施形態にかかるプロセッサシステム１３０を示す機能ブロックである。プロセッサシステム１３０には、３つのセンサＡ、Ｂ、Ｃが接続されている。センサＡは、80msec間隔でセンシングデータが生成され、データ有効時間は処理インターバルと同じ8Omsecである。センサＢは100msec間隔でセンシングデータが生成される。センサＢは内部にFIFOを持っており、データ有効期間は25msecである。センサＣは、125msec間隔でセンシングデータが生成され、データ有効時間は処理インターバルと同じ125msecである。センサＡ〜Ｃは、割込み要求機能を持っている。
【００８８】
プロセッサシステム１３０は、ＩＮＴＣ１０およびＲＴＣタイマ５０を有する。ＩＮＴＣ１０の機能は、先の実施形態で説明したものと同じであり、重複する説明は省略する。ＲＴＣタイマ５０は、タイマ機能を有しているが、ＰＭＵ２０へプロセッサ起床要求を発行することはない。プロセッサ３０は、内部タイマ３１を有する。ＰＭＵ２０は、プロセッサシステム１３０に含まれるＩＮＴＣ１０、プロセッサ３０、メモリ４０、ＲＴＣタイマ５０などに対する電源供給を管理する。ＰＭＵ２０は、ＩＮＴＣ１０からの要求に従いプロセッサ３０を起床させる。
【００８９】
メモリ４０には、管理テーブル４４と、プロセッサ３０が実行するアプリケーションプログラムAP4、割込みハンドラINTHL4、管理テーブル登録ルーチンRT41、起床トリガ設定ルーチンRT42、センサＡデータ取得処理RT43、センサＢデータ取得処理RT44、センサＣデータ取得処理RT45、内部タイマ再設定ルーチンRT46が格納されている。
【００９０】
図２３は、管理テーブル４４のデータ構造を説明するための図である。管理テーブル４４は、センサIDと、データ取得処理のエントリアドレス４４ａと、処理インターバル４４ｂと、次回処理時刻（next_proc)４４ｃと、データ有効期間（lifetime)４４ｅと、次回失効時刻（next_deadline)４４ｆとを組とした管理情報を持つ。データ有効期間４４ｅは、各センシング周期において、センサデータが生成されてから有効である期間を示している。次回失効時刻４４ｆは、次回のセンサデータの失効時刻を示している。プロセッサ３０は、プロセッサシステム１３０の起動時に、管理テーブル４４の設定処理を行う。
【００９１】
図２４は、比較例および第４の実施形態のセンサデータ取得処理を示すタイムチャートである。図２４において、センサＡ〜Ｃは、図２１と同様のタイムチャートである。比較例では、最小のデータ取得間隔（センサＡの取得間隔）に加え、時刻100および時刻200でプロセッサを起床させている。比較例では、時刻0から時刻500までにプロセッサは９回起床する。第４の実施形態では、処理インターバルとデータ有効時間に基づいてプロセッサを起床させるタイミングを動的に変化させている。第４の実施形態では、時刻0から時刻500までに、プロセッサ３０は、６回起床する。このように、第４の実施形態では、比較例より状態遷移回数（起床回数）を削減することが可能である。
【００９２】
以下、第４の実施形態の動作を詳細に説明する。図２５は、アプリケーションプログラムAP4の動作手順を示すフローチャートである。プロセッサシステム１３０が起動されると、プロセッサ３０は、アプリケーションプログラムAP4を実行する。アプリケーションプログラムAP4は、センサＡ、Ｂ、Ｃを初期化する（S400)。
【００９３】
次に、プロセッサ３０は、管理テーブル登録ルーチンRT41を実行する（S401)。図２６は、管理テーブル登録ルーチンRT31を示すフローチャートである。まず、各センサIDに対し、エントリアドレス４４ａ、処理インターバル４４ｂ、データ有効期間４４ｅが設定される（図２６:S410)。次に、プロセッサ３０は、各センサIDの次回処理時刻４４ｃに、次回処理時刻を設定する。管理テーブル登録ルーチンRT41の実行時には、プロセッサ３０は、次回処理時刻４４ｃに、内部タイマ３１から取得した現在時刻（時刻0)を設定する（S411)。
【００９４】
プロセッサ３０は、ＩＮＴＣ１０からの割込み要求を受信したとき割込みハンドラINTHL4を実行するように割込みべクタなどを設定する（図２５:S402)。次に、プロセッサ３０は、割込みハンドラINTHL4を実行する（S403)。その後、アプリケーションプログラムAP4は、プロセッサ３０をスリープ状態とする（S404)。
【００９５】
図２７は、割込みハンドラINTHL4の動作手順を示すフローチャートである。割込みハンドラINTHL4は、内部タイマ再設定ルーチンRT46を実行する（S420)。この内部タイマ再設定ルーチンRT46は、図１３に示した手順と同様である。すなわち、プロセッサ３０は、ＲＴＣタイマ５０から取得した現在時刻を内部タイマ３１の時刻として設定する。次に、割込みハンドラINTHL4は、割込み通知レジスタ１１のレジスタ値を取得する（S421)。割込みハンドラINTHL4は、取得したレジスタ値を参照し、センサＡ〜Ｃから割込み要求が発生しているか否かをチェックする（S422)。割込み要求があった場合は（S422:Yes)、割込みハンドラINTHL4は、割込み要求を発行しているセンサIDに対応するデータ取得処理のエントリアドレスを管理テーブル４４から取得し（S423)、取得したエントリアドレスで指定されるデータ取得処理を実行する（S424)。そして、割込みハンドラINTHL4は、対応するセンサIDの割込みフラグを“１”から“０”にクリアする（S425)。割込みハンドラINTHL4は、割込みフラグが“１”となっている全てのセンサIDについてのデータ取得処理を実行したか否かを判定する（S426)。判定結果がNoである場合は、前記同様の処理を、すべての割込みフラグが“１”であるセンサIDに対して実行する。次に、割込みハンドラINTHL4は、起床トリガ設定ルーチンRT42を実行する（S427)。
【００９６】
図２８は、起床トリガ設定ルーチンRT42を示すフローチャートである。プロセッサ３０は、管理テーブル４４から、処理インターバル４４ｂ、次回処理時刻４４ｃ、データ有効期間４４ｅ、次回失効時刻４４ｆを取得する（S430)。次に、プロセッサ３０は、内部タイマ３１から現在時刻を取得する（S431)。そして、プロセッサ３０は、センサID毎に以下の処理を実行する。プロセッサ３０は、取得した現在時刻が更新前の次回処理時刻以上であるか否かを判定する（S432)。なお、この判定結果がYesであることは、プロセッサ３０がスリープ状態中にセンサデータを取得可能になったことを示している。この条件が成立するセンサは、図２７のS424でデータ取得処理を行っている。したがって、S432の代わりに、割込み通知レジスタ１１のレジスタ値が“１”であるセンサを識別することで、スリープ状態中にセンサデータを取得可能となったセンサを特定してもよい。
【００９７】
プロセッサ３０は、S432がYesの場合、更新前の次回処理時刻４４ｃに処理インターバル４４ｂを加算した値で、次回処理時刻４４ｃを更新する（S433)。また、プロセッサ３０は、更新した次回処理時刻４４ｃにデータ有効期間４４ｅを加算した値で、次回失効時刻４４ｆを更新する（S434)。このような処理を全てのセンサIDに対し繰り返し実行する（S432〜S435)。次に、プロセッサ３０は、全センサIDのなかで次回失効時刻の最小値を判定し、この最小値よりも小さい次回処理時刻のうちで最も大きい（遅い）次回処理時刻を持つセンサIDを取得する（S436)。次に、プロセッサ３０は、取得したIDを持つセンサからの割込み処理要求があったときのみ、ＩＮＴＣ１０からＰＭＵ２０へのプロセッサ起床要求が発行されるように、起床トリガレジスタ１２を設定する(S437)。すなわち、プロセッサ３０は、取得したセンサIDの起床トリガフラグを“１”にする。
【００９８】
このように、第４の実施形態においては、割込みハンドラINTHL4が実行される毎に必ず起床トリガ設定ルーチンRT42が実行される。これにより、第４の実施形態では、起床トリガレジスタ１２に設定されるセンサIDが動的に変更される。
【００９９】
次に、図２４のタイムチャートなどを参照してプロセッサシステム１３０の動作をより詳細に説明する。プロセッサシステム１３０が起動された後、アプリケーションプログラムAP4が実行される。プロセッサ３０は、センサＡ、Ｂ、Ｃを初期化する（図２５:S400)。次に、プロセッサ３０は、管理テーブル４４に各センサＡ〜Ｃの管理情報を設定する（S401)。センサＡに関しては、ID=0、entry  address=0x1100、interval=80、next_proc=0、lifetime=80、next_deadline=0が設定される。センサＢに関しては、ID=1、entry  address=0x1200、interval=100、next_proc=0、lifetime=25、next_deadline=0が設定される。センサＣに関しては、ID=2、entry  address=0x1300、interval=125、next_proc=0、lifetime=125、next_deadline=0が設定される。次に、プロセッサ３０は、ＩＮＴＣ１０から割込み要求を受信したとき割込みハンドラINTHL4を実行するように割込みべクタなどを設定する（S402)。そして、プロセッサ３０は、初回のデータ取得処理を行うために割込みハンドラINTHL4を実行する（S403)。
【０１００】
時刻0では、各センサＡ〜Ｃのセンシングが行われ、データが生成される。割込みハンドラINTHL4は、内部タイマ３１の再設定を行う（図２７:S420)。時刻0では、内部タイマ３１の値は0のままである。次に、プロセッサ３０は、割込み通知レジスタ１１のレジスタ値を取得する。時刻0においては、センサＡ〜Ｃから割込み要求があるため、レジスタ値は（111)である。割込みハンドラINTHL4は、データ取得処理を実行する。まず、割込みハンドラINTHL4は、割込み要求のあるセンサIDをビット位置より特定する。まず、ID=0を選択する。割込みハンドラINTHL4は、管理テーブル４４からID=0のエントリアドレス0x1100を取得し（S423)、メモリ４０のエントリアドレス0x1100にストアされたセンサＡデータ取得処理RT43を実行する（S424)。次に、割込みハンドラINTHL4は、ID=0の割込みフラグを“０”にクリアする（S425)。割込みハンドラINTHL4は、ID=1、ID=2に対しても同様の処理を実行する。
【０１０１】
次に、プロセッサ３０は、起床トリガ設定ルーチンRT42を実行する（S427)。プロセッサ３０は、管理テーブル４４から、処理インターバル４４ｂ、次回処理時刻４４ｃ、データ有効期間４４ｅ、次回失効時刻４４ｆを取得する（S430)。次に、プロセッサ３０は、内部タイマ３１から現在時刻0を取得する（S431)。プロセッサ３０は、現在時刻（0)とID=0の次回処理時刻（0)を比較する（S432)。この比較結果が一致するため、プロセッサ３０は、ID=0の次回処理時刻を、次回処理時刻（0)+処理インターバル（80)=80で更新する（S434)。また、プロセッサ３０は、ID=0の次回失効時刻を、次回処理時刻（80)+データ有効期間（80)=160で更新する（S433)。プロセッサ３０は、同様に、ID=1およびID=2の次回処理時刻および次回失効時刻を更新する。ID=1において、次回処理時刻は100(=0+100)に、次回失効時刻は125(=100+25)に更新される。ID=2において、次回処理時刻は125(=0+125)に、次回失効時刻は250(=125+125)に更新される。図２３は、各管理情報が更新された後の管理テーブル４４を示している。現在の管理テーブル４４の状態において、最小の次回失効時刻はセンサＢ(ID=1)の125msecである。そして、125msecより小さい次回処理時刻の内、最大の次回処理時刻はセンサＢの100msecである。プロセッサ３０は、起床トリガレジスタ１２に設定するセンサIDとして、ID=1を取得する（S436)。プロセッサ３０は、起床トリガレジスタ１２をレジスタ値（010)に設定する（S437)。割込みハンドラINTHL4の処理が終了すると、アプリケーションプログラムAP4に処理が戻る。アプリケーションプログラムAP4は、プロセッサ３０をスリープ状態とする（図２５:S404)。
【０１０２】
次に、時刻80で、センサＡから割込み要求が発行され、割込み通知レジスタ１１のレジスタ値は、（100)となる。このとき、起床トリガレジスタ１２のレジスタ値は（010)である。このため、ＩＮＴＣ１０は、ＰＭＵ２０に対するプロセッサ起床要求を発行しない。そのため、プロセッサ３０はスリープ状態のままであり、データ取得処理を行わない。
【０１０３】
次に、時刻100で、センサＢから割込み要求が発行され、割込み通知レジスタ１１のレジスタ値は、（110)となる。このとき、起床トリガレジスタ１２のレジスタ値は（010)である。このため、ＩＮＴＣ１０は、ＰＭＵ２０に対するプロセッサ起床要求を発行する。これにより、プロセッサ３０が起床され、割込みハンドラINTHL4によって、センサＡ、Ｂのデータ取得処理が実行される。
【０１０４】
プロセッサ３０は、データ取得処理を実行した後、起床トリガ設定ルーチンRT42を実行する。プロセッサ３０は、現在時刻（100)とセンサＡの次回処理時刻（80)を比較する。現在時刻（100)が次回処理時刻（80)より大きいため、プロセッサ３０は、次回処理時刻を次回処理時刻（80)+処理インターバル（80)=160に更新する。また、プロセッサ３０は、次回失効時刻を次回処理時刻（160)+データ有効期間（80)=240に更新する。同様に、プロセッサ３０は、現在時刻（100)とセンサＢの次回処理時刻（100)を比較する。現在時刻（100)が次回処理時刻（100)以上であるため、プロセッサ３０は、次回処理時刻を次回処理時刻（100)+処理インターバル（100)=200に更新し、次回失効時刻を次回処理時刻（200)+データ有効期間（25)=225に更新する。センサＣに関しては、次回処理時刻（125)の方が現在時刻（100)より大きいため、現在の次回処理時刻（125)と現在の次回失効時刻（250)を更新しない。現在の管理テーブル４４の状態において、最小の次回失効時刻はセンサＢの225msecであり、この225msecより小さい次回処理時刻のうちの最大値はセンサＢの200msecである。これにより、プロセッサ３０は、起床トリガレジスタ１２に設定するセンサIDとして、ID=1を取得する。プロセッサ３０は、起床トリガレジスタ１２をレジスタ値（010)に設定する。割込みハンドラINTHL4の処理が終了すると、アプリケーションプログラムAP4に処理が戻る。アプリケーションプログラムAP4は、プロセッサ３０をスリープ状態とする。
【０１０５】
以下、同様に時刻200、時刻300、時刻375、時刻400でのみプロセッサ３０が起床し、各時刻までに割込み要求があったセンサのデータ取得処理が実行される。
【０１０６】
第４の実施形態では、センサのデータ作成周期とデータ有効時間に基づいて、データの失効が発生しないようにプロセッサを起床させるタイミングを動的に変化させている。このため、プロセッサ３０のスリープ状態とアクティブ状態との遷移回数を削減することが可能であり、プロセッサ３０の消費電力を削減させることができる。また、プロセッサ３０が、データ失効時刻より後にデータ取得処理を行うことがないため、センシングデータを取りこぼすことがない。
【０１０７】
(第５の実施形態）
第５の実施形態では、第４の実施形態と同様、データ有効時間がデータ取得間隔よりも短いセンサがある場合を想定している。また、第２の実施形態と同様、全てのセンサＡ〜Ｃが割込み要求機能を持たない場合を想定している。第５の実施形態においても、プロセッサ３０は、図２４の最も下のタイムチャートに示すタイミングで起床して、データ取得動作を行う。
【０１０８】
図２９は、第５の実施形態にかかるプロセッサシステム１４０を示す機能ブロックである。プロセッサシステム１４０には、３つのセンサＡ、Ｂ、Ｃが接続されている。センサＡは、8Omsec間隔でセンシングデータが生成され、データ有効時間は8Omsecである。センサＢは100msec間隔でセンシングデータが生成される。センサＢは内部にFIFOを持っており、データ有効期間は25msecである。センサＣは、125msec間隔でセンシングデータが生成され、データ有効時間は125msecである。センサＡ〜Ｃは、割込み要求機能を持っていない。
【０１０９】
プロセッサシステム１４０は、ＲＴＣタイマ５０を有する。ＲＴＣタイマ５０の機能は、第２の実施形態で説明したものと同じであり、重複する説明は省略する。プロセッサ３０は、内部タイマ３１を有する。ＰＭＵ２０は、プロセッサシステム１４０に含まれるプロセッサ３０、メモリ４０、ＲＴＣタイマ５０などに対する電源供給を管理する。ＰＭＵ２０は、ＲＴＣタイマ５０からの要求に従いプロセッサ３０を起床させる。
【０１１０】
メモリ４０には、管理テーブル４５と、プロセッサ３０が実行するアプリケーションプログラムAP5、割込みハンドラINTHL5、管理テーブル登録ルーチンRT51、起床トリガ設定ルーチンRT52、センサＡデータ取得処理RT53、センサＢデータ取得処理RT54、センサＣデータ取得処理RT55、内部タイマ再設定ルーチンRT56が格納されている。
【０１１１】
管理テーブル４５のデータ構造は、図２３に示した管理テーブル４４と同じである。管理テーブル４５は、センサIDと、エントリアドレス４５ａと、処理インターバル４５ｂと、次回処理時刻（next_proc)４５ｃと、データ有効期間（lifetime)４５ｅと、次回失効時刻（next_deadline)４５ｆとを組とした管理情報を持つ。
【０１１２】
以下、第５の実施形態の動作を詳細に説明する。図３０は、アプリケーションプログラムAP5の動作手順を示すフローチャートである。プロセッサシステム１４０が起動されると、プロセッサ３０は、アプリケーションプログラムAP5を実行する。アプリケーションプログラムAP5は、センサＡ、Ｂ、Ｃを初期化する（S500)。
【０１１３】
次に、プロセッサ３０は、管理テーブル登録ルーチンRT51を実行する（S501)。管理テーブル登録ルーチンRT51は、図２６に示した管理テーブル登録ルーチンRT31と同じである。プロセッサ３０は、ＲＴＣタイマ５０からの割込み要求を受信したとき割込みハンドラINTHL5を実行するように割込みべクタなどを設定する（S502)。次に、プロセッサ３０は、割込みハンドラINTHL5を実行する(S503)。その後、アプリケーションプログラムAP5は、プロセッサ３０をスリープ状態とする（S504)。
【０１１４】
図３１は、割込みハンドラINTHL5の動作手順を示すフローチャートである。割込みハンドラINTHL5は、内部タイマ再設定ルーチンRT56を実行する（S510)。この内部タイマ再設定ルーチンRT56は、図１３に示した手順と同様である。すなわち、プロセッサ３０は、ＲＴＣタイマ５０から取得した現在時刻を内部タイマ３１の時刻として設定する。次に、割込みハンドラINTHL5は、管理テーブル４５から、ID=0のエントリアドレス４５ａ、次回処理時刻４５ｃを取得する（S511)。次に、割込みハンドラINTHL5は、内部タイマ３１から取得した現在時刻をID=0の次回処理時刻（next_proc)４５ｃと比較する（S512)。割込みハンドラINTHL5は、現在時刻がID=0の次回処理時刻以上である場合は（S512:Yes)、センサＡデータ取得処理RT53を実行する（S513)。次に、割込みハンドラINTHL5は、ID=0の次回処理時刻に処理インターバル４５ｂを加算した値で、ID=0の次回処理時刻を更新する（S514)。割込みハンドラINTHL5は、管理テーブル４５に登録されている全てのセンサIDについての処理が終了したか否かを判定し（S515)、判定結果がNoである場合は、S511〜S515の処理を、全てのセンサIDについて実行する。次に、割込みハンドラINTHL5は、起床トリガ設定ルーチンRT52を実行する（S516)。
【０１１５】
図３２は、起床トリガ設定ルーチンRT52を示すフローチャートである。プロセッサ３０は、管理テーブル４５から、処理インターバル４５ｂ、次回処理時刻４５ｃ、データ有効期間４５ｅ、次回失効時刻４５ｆを取得する（S520)。次に、プロセッサ３０は、内部タイマ３１から現在時刻を取得する（S521)。そして、プロセッサは、センサID毎に以下の処理を実行する。プロセッサ３０は、S514で更新された次回処理時刻４５ｃにデータ有効期間４５ｅを加算した値で、次回失効時刻４５ｆを更新する（S522)。このような処理を全てのセンサIDに対し繰り返し実行する（S522〜S523)。次に、プロセッサ３０は、全センサIDのなかで次回失効時刻の最小値を判定し、この最小値よりも小さい次回処理時刻のうちで最も大きい（遅い）次回処理時刻を持つセンサIDを取得する（S524)。次に、プロセッサ３０は、取得したセンサIDの次回処理時刻を、ＲＴＣトリガレジスタ５１に設定する（S525)。
【０１１６】
次に、図２４のタイムチャートなどを参照してプロセッサシステム１４０の動作をより詳細に説明する。プロセッサシステム１４０が起動された後、アプリケーションプログラムAP5が実行される。プロセッサ３０は、センサＡ、Ｂ、Ｃを初期化する（図３０:S500)。次に、プロセッサ３０は、管理テーブル４５に各センサＡ〜Ｃの管理情報を設定する（S501)。センサＡに関しては、ID=0、entry  address=0x1100、interval=80、next_proc=0、lifetime=80、next_deadline=0が設定される。センサＢに関しては、ID=1、entry  address=0x1200、interval=100、next_proc=0、lifetime=25、next_deadline=0が設定される。センサＣに関しては、ID=2、entry  address=0x1300、interval=125、next_proc=0、lifetime=125、next_deadline=0が設定される。次に、プロセッサ３０は、ＲＴＣタイマ５０から割込み要求を受信したとき割込みハンドラINTHL5を実行するように割込みべクタなどを設定する（S502)。そして、プロセッサ３０は、初回のデータ取得処理を行うために割込みハンドラINTHL5を実行する（S503)。
【０１１７】
時刻0では、各センサＡ〜Ｃのセンシングが行われ、データが生成される。割込みハンドラINTHL5は、内部タイマ３１の再設定を行う（図３１:S510)。時刻0では、内部タイマ３１の値は0のままである。次に、割込みハンドラINTHL5は、管理テーブル４５から、ID=0のエントリアドレス（0x1100)、次回処理時刻（0)を取得する（S511)。次に、割込みハンドラINTHL5は、内部タイマ３１から取得した現在時刻（0)をID=0の次回処理時刻（0)と比較する（S512)。S512の条件を満足するため、割込みハンドラINTHL5は、センサＡデータ取得処理RT53を実行する（S513)。次に、割込みハンドラINTHL5は、次回処理時刻を次回処理時刻（0)+処理インターバル（80)=80で更新する（S514)。割込みハンドラINTHL5は、ID=1、ID=2に対しても同様の処理を実行する。
【０１１８】
次に、割込みハンドラINTHL5は、起床トリガ設定ルーチンRT52を実行する（S516)。プロセッサ３０は、管理テーブル４５から、処理インターバル４５ｂ、次回処理時刻４５ｃ、データ有効期間４５ｅ、次回失効時刻４５ｆを取得する（S520)。次に、プロセッサ３０は、内部タイマ３１から現在時刻0を取得する（521)。プロセッサ３０は、ID=0の次回失効時刻を、S514で更新された次回処理時刻（80)+データ有効期間（80)=160で更新する（S522)。プロセッサ３０は、同様に、ID=1の次回失効時刻を125(=100+25)に、ID=2の次回失効時刻を250(=125+125)に更新する。現在の管理テーブル４５の状態において、最小の次回失効時刻はセンサＢ(ID=1)の125msecである。そして、125msecより小さい次回処理時刻の内、最大の次回処理時刻はセンサＢの100msecである。プロセッサ３０は、起床トリガレジスタ１２に設定するセンサIDとして、ID=1を取得する（S524)。次に、プロセッサ３０は、取得したセンサIDの次回処理時刻（=100)を、ＲＴＣトリガレジスタ５１に設定する（S525)。割込みハンドラINTHL5の処理が終了すると、アプリケーションプログラムAP5に処理が戻る。アプリケーションプログラムAP5は、プロセッサ３０をスリープ状態とする（図３０:S504)。
【０１１９】
次に、時刻100となると、ＲＴＣタイマ５０のタイマ値がＲＴＣトリガレジスタ５１のレジスタ値（=100)と一致する。これにより、ＲＴＣタイマ５０からＰＭＵ２０ヘプロセッサ起床要求が発行され、ＲＴＣタイマ５０からプロセッサ３０への割込み要求が通知される。これにより、プロセッサ３０はアクティブ状態となり、割込みハンドラINTHL5を実行する。
【０１２０】
割込みハンドラINTHL5は、内部タイマ３１をＲＴＣタイマ５０の現在時刻=100で再設定する（S510)。割込みハンドラINTHL5は、管理テーブル４５からセンサＡ(ID=0)の次回処理時刻（80)を取得し（S511)、現在時刻（100)を次回処理時刻（80)と比較する（S512)。このとき、S512の条件を満足するため、プロセッサ３０は、センサＡデータ取得処理RT53を実行する（S513)。次に、割込みハンドラINTHL5は、ID=0の次回処理時刻を、次回処理時刻（80)+処理インターバル（80)=160で更新する（S514)。次に、センサＢについて処理を行う。現在時刻（100)であり、センサＢの次回処理時刻（100)であるため、S512の条件を満足する。プロセッサ３０は、センサＢデータ取得処理RT54を実行する。その後、割込みハンドラINTHL5は、ID=1の次回処理時刻を、次回処理時刻（100)+処理インターバル（100)=200で更新する。センサＣの次回処理時刻（125)であり、現在時刻（100)よりも大きいため、S512の条件を満足しない。このため、センサＣについてのデータ取得処理および次回処理時刻の更新は行わない。次に、プロセッサ３０は、起床トリガ設定ルーチンRT52を実行する（S516)。
【０１２１】
プロセッサ３０は、管理テーブル４５から、処理インターバル４５ｂ、次回処理時刻４５ｃ、データ有効期間４５ｅ、次回失効時刻４５ｆを取得する（S520)。次に、プロセッサ３０は、内部タイマ３１から現在時刻（100)を取得する（S521)。そして、プロセッサ３０は、センサID毎に以下の処理を実行する。プロセッサ３０は、S514で更新された次回処理時刻４５ｃにデータ有効期間４５ｅを加算した値で、次回失効時刻４５ｆを更新する（S522)。ID=0の次回処理時刻は160となり、次回失効時刻は240となる。ID=1の次回処理時刻は200となり、次回失効時刻は225となる。ID=2の次回処理時刻は125となり、次回失効時刻は250となる。現在の管理テーブル４５の状態において、最小の次回失効時刻はセンサＢの225msecであり、この225msecより小さい次回処理時刻のうちの最大値はセンサＢの200msecである。これにより、プロセッサ３０は、ＲＴＣトリガレジスタ５１に次回処理時刻を設定するセンサIDとして、ID=1を取得する（S524)。プロセッサ３０は、ＲＴＣトリガレジスタ５１をセンサＢの次回処理時刻である200に設定する（S525)。割込みハンドラINTHL5の処理が終了すると、アプリケーションプログラムAP5に処理が戻る。アプリケーションプログラムAP5は、プロセッサ３０をスリープ状態とする。
【０１２２】
以下、同様に時刻200、時刻300、時刻375、時刻400でのみプロセッサ３０が起床し、次回処理時刻が現在時刻より小さいデータ取得処理が各時刻で実行される。
【０１２３】
第５の実施形態では、センサのデータ作成周期とデータ有効時間に基づいて、データの失効が発生しないようにプロセッサ３０を起床させるタイミングを動的に変化させている。また、タイマによってセンサデータの取得処理を管理している。このため、センサが割込み要求機能を持たない場合でも、プロセッサ３０のスリープ状態とアクティブ状態との遷移回数を削減することが可能である。このため、プロセッサ３０の消費電力を削減させることができる。また、プロセッサ３０が、データ失効時刻より後にデータ取得処理を行うことがないため、センシングデータを取りこぼすことがない。
【０１２４】
(第６の実施形態）
第６の実施形態では、第４の実施形態と同様、データ有効時間がデータ取得間隔よりも短いセンサがある場合を想定している。また、第３の実施形態と同様、割込み要求機能を持っているセンサと、割込み要求機能を持っていないセンサが混在する場合を想定している。
【０１２５】
図３３は、第６の実施形態にかかるプロセッサシステム１５０を示す機能ブロックである。プロセッサシステム１５０には、３つのセンサＡ、Ｂ、Ｃが接続されている。センサＡは、8Omsec間隔でセンシングデータが生成され、データ有効時間は8Omsecである。センサＢは100msec間隔でセンシングデータが生成される。センサＢは内部にFIFOを持っており、データ有効期間は25msecである。センサＣは、125msec間隔でセンシングデータが生成され、データ有効時間は125msecである。センサＡおよびＣは、割込み要求機能を持っているが、センサＢは割込み要求機能を持っていない。
【０１２６】
図３３のプロセッサシステム１５０は、ＩＮＴＣ１０およびＲＴＣタイマ５０を有する。ＩＮＴＣ１０およびＲＴＣタイマ５０の機能は、先の第３の実施形態で説明したものと同じであり、重複する説明は省略する。プロセッサ３０は、内部タイマ３１を有する。ＰＭＵ２０は、プロセッサシステム１５０に含まれるＩＮＴＣ１０、プロセッサ３０、メモリ４０、ＲＴＣタイマ５０などに対する電源供給を管理する。ＰＭＵ２０は、ＩＮＴＣ１０またはＲＴＣタイマ５０からの要求に従いプロセッサ３０を起床させる。
【０１２７】
メモリ４０には、管理テーブル４６と、プロセッサ３０が実行するアプリケーションプログラムAP6、割込みハンドラINTHL6、管理テーブル登録ルーチンRT61、起床トリガ設定ルーチンRT62、センサＡデータ取得処理RT63、センサＢデータ取得処理RT64、センサＣデータ取得処理RT65、内部タイマ再設定ルーチンRT66が格納されている。
【０１２８】
図３４は、管理テーブル４６のデータ構造を説明するための図である。管理テーブル４６は、センサIDと、データ取得処理のエントリアドレス４６ａと、処理インターバル４６ｂと、次回処理時刻（next_proc)４６ｃと、トリガ種別（trigger  type）４６ｄと、データ有効期間（lifetime)４６ｅと、次回失効時刻（next_deadline)４６ｆとを組とした管理情報を持つ。
【０１２９】
以下、第６の実施形態の動作を詳細に説明する。図３５は、アプリケーションプログラムAP6の動作手順を示すフローチャートである。プロセッサシステム１５０が起動されると、プロセッサ３０は、アプリケーションプログラムAP6を実行する。アプリケーションプログラムAP6は、センサＡ、Ｂ、Ｃを初期化する（S600)。
【０１３０】
次に、プロセッサ３０は、管理テーブル登録ルーチンRT61を実行する（S601)。図３６は、管理テーブル登録ルーチンRT61を示すフローチャートである。まず、各センサIDに対し、エントリアドレス４６ａ、処理インターバル４６ｂ、データ有効期間４６ｅ、トリガ種別４６ｄが設定される（図３６:S610)。次に、プロセッサ３０は、各センサIDの次回処理時刻４６ｃに、現在時刻（0)を設定する。
【０１３１】
プロセッサ３０は、ＩＮＴＣ１０またはＲＴＣタイマ５０からの割込み要求を受信したとき割込みハンドラINTHL6を実行するように割込みべクタなどを設定する（図３５:S602)。次に、プロセッサ３０は、割込みハンドラINTHL6を実行する（S603)。その後、アプリケーションプログラムAP6は、プロセッサ３０をスリープ状態とする（S604)。
【０１３２】
図３７は、割込みハンドラINTHL6の動作手順を示すフローチャートである。割込みハンドラINTHL6は、内部タイマ再設定ルーチンRT66を実行する（S620)。この内部タイマ再設定ルーチンRT66は、図１３に示した手順と同様である。すなわち、プロセッサ３０は、ＲＴＣタイマ５０から現在時刻を取得し、取得した現在時刻を内部タイマ３１の時刻として設定する。次に、割込みハンドラINTHL6は、割込み通知レジスタ１１のレジスタ値を取得する（S621)。割込みハンドラINTHL6は、取得したレジスタ値を参照し、センサＡ〜Ｃから割込み要求が発生しているか否かをチェックする（S622)。割込み要求があった場合は（S622:Yes)、割込みハンドラINTHL6は、割込み要求を発行しているセンサIDに対応するデータ取得処理のエントリアドレスを管理テーブル４６から取得し（S623)、取得したエントリアドレスで指定されるデータ取得処理を実行する（S624)。そして、割込みハンドラINTHL6は、対応するセンサIDの割込みフラグを“１”から“０”にクリアする（S625)。次に、割込みハンドラINTHL6は、割込み要求のあったセンサIDの次回処理時刻に処理インターバル４６ｂを加算した値で、当該センサIDの次回処理時刻を更新する（S626)。割込みハンドラINTHL6は、トリガ種別が割込みであるセンサであってかつ割込みフラグが“１”となっている全てのセンサIDについてのデータ取得処理を実行したか否かを判定する（S627)。判定結果がNoである場合は、前記同様の処理を、トリガ種別が割込みであって割込みフラグが“１”であるセンサIDに対して実行する。
【０１３３】
次に、割込みハンドラINTHL6は、管理テーブル４６からトリガ種別がタイマであるセンサIDのエントリアドレス４６ａ、次回処理時刻４６ｃを取得する（S628)。次に、割込みハンドラINTHL6は、内部タイマ３１から取得した現在時刻を、S628で取得したセンサIDの次回処理時刻４６ｃと比較する（S629)。割込みハンドラINTHL6は、当該センサIDの次回処理時刻４６ｃが現在時刻以下である場合は（S629:Yes)、S628で取得したセンサIDのエントリアドレスで指定されるデータ取得処理を実行する（S630)。次に、割込みハンドラINTHL6は、当該センサの次回処理時刻に処理インターバル４６ｂを加算した値で、当該センサIDの次回処理時刻を更新する（S631)。割込みハンドラINTHL6は、トリガ種別がタイマである全てのセンサIDについての処理が終了したか否かを判定する（S632)。判定結果がNoである場合は、S628〜S632の処理を、トリガ種別がタイマである全てのセンサについて実行する。次に、割込みハンドラINTHL6は、起床トリガ設定ルーチンRT62を実行する（S633)。
【０１３４】
図３８は、起床トリガ設定ルーチンRT62を示すフローチャートである。プロセッサ３０は、管理テーブル４６から、処理インターバル４６ｂ、次回処理時刻４６ｃ、データ有効期間４６ｅ、次回失効時刻４６ｆを取得する（S640)。次に、プロセッサ３０は、内部タイマ３１から現在時刻を取得する（S641)。そして、プロセッサ３０は、センサID毎に以下の処理を実行する。プロセッサ３０は、S626またはS631で更新された次回処理時刻４６ｃにデータ有効期間４６ｅを加算した値で、次回失効時刻４６ｆを更新する（S642)。このような処理を全てのセンサIDに対し繰り返し実行する（S642〜S643)。次に、プロセッサ３０は、全センサIDのなかで次回失効時刻の最小値を判定し、この最小値よりも小さい次回処理時刻のうちで最も大きい（遅い）次回処理時刻を持つセンサIDを取得する（S644)。次に、プロセッサ３０は、取得したセンサIDのトリガ種別が割込みであるかタイマであるかを判別する（S645)。トリガ種別が割込みである場合、プロセッサ３０は、取得したIDを持つセンサからの割込み処理要求があったときのみ、ＩＮＴＣ１０からＰＭＵ２０へのプロセッサ起床要求が発行されるように、起床トリガレジスタ１２を設定する（S646)。すなわち、プロセッサ３０は、取得したセンサIDの起床トリガフラグを“１”にする。また、プロセッサ３０は、ＲＴＣトリガレジスタ５１をクリアする（S647)。また、トリガ種別がタイマである場合（S645：No)、取得したセンサIDの次回処理時刻によって、ＲＴＣトリガレジスタ５１を設定する（S648)。また、プロセッサ３０は、起床トリガレジスタ１２をクリアする（S649)。
【０１３５】
次に、図２４のタイムチャートなどを参照してプロセッサシステム１５０の動作をより詳細に説明する。プロセッサシステム１５０が起動された後、アプリケーションプログラムAP6が実行される。プロセッサ３０は、センサＡ、Ｂ、Ｃを初期化する（図３５:S600)。次に、プロセッサ３０は、管理テーブル４６に各センサＡ〜Ｃの管理情報を設定する（S601)。センサＡに関しては、ID=0、entry  address=0x1100、interval=80、next_proc=0、lifetime=80、next_deadline=0、trigger  type=intが設定される。センサＢに関しては、ID=1、entry  address=0x1200、interval=100、next_proc=0、lifetime=25、next_deadiine=0、trigger  type=timerが設定される。センサＣに関しては、ID=2、entry  address=0x1300、interval=125、next_proc=0、lifetime=125、next_deadline=0、triggertype=intが設定される。次に、プロセッサ３０は、ＩＮＴＣ１０またはＲＴＣタイマ５０から割込み要求を受信したとき割込みハンドラINTHL6を実行するように割込みべクタなどを設定する（S602)。そして、プロセッサ３０は、初回のデータ取得処理を行うために割込みハンドラINTHL6を実行する（S603)。
【０１３６】
時刻0では、各センサＡ〜Ｃのセンシングが行われ、データが生成される。割込みハンドラINTHL6は、内部タイマ３１の再設定を行う（図３６:S620)。時刻0では、内部タイマ３１の値は0のままである。次に、プロセッサ３０は、割込み通知レジスタ１１のレジスタ値を取得する（S621)。時刻0においては、センサＡ、Ｃから割込み要求があるため、レジスタ値は（101)である。この場合は、まず、ID=0を選択する。割込みハンドラINTHL6は、管理テーブル４６からID=0のエントリアドレス0x1100を取得し（S623)、メモリ４０のエントリアドレス0x1100にストアされたセンサＡデータ取得処理RT63を実行する（S624)。そして、割込みハンドラINTHL6は、ID=0の割込みフラダを“０”にクリアする（S625)。次に、割込みハンドラINTHL6は、次回処理時刻を次回処理時刻（0)+処理インターバル（80)=80で更新する（S626)。割込みハンドラINTHL6は、ID=2に対しても同様の処理を実行する。また、センサＣの次回処理時刻は125(=0+125)に更新される。
【０１３７】
次に、割込みハンドラINTHL6は、トリガ種別がタイマであるセンサＢについて、現在時刻（0)と次回処理時刻（0)の比較を行う（S629)。ここでは、現在時刻（0)が次回処理時刻（0)以上であるため、割込みハンドラINTHL6は、同様に、センサＢデータ取得処理RT64を実行する（S630)。また、割込みハンドラINTHL6は、センサＢの次回処理時刻を100(=0+100)に更新する（S631)。
【０１３８】
次に、プロセッサ３０は、起床トリガ設定ルーチンRT62を実行する（S633)。プロセッサ３０は、管理テーブル４６から、処理インターバル４６ｂ、次回処理時刻４６ｃ、データ有効期間４６ｅ、次回失効時刻４６ｆを取得する（S640)。次に、プロセッサ３０は、内部タイマ３１から現在時刻0を取得する（S641)。プロセッサ３０は、ID=0の次回失効時刻を、S626で更新された次回処理時刻（80)+データ有効期間（80)=160で更新する（S642)。プロセッサ３０は、同様に、ID=1の次回失効時刻を125(=100+25)に、ID=2の次回失効時刻を250(=125+125)に更新する。現在の管理テーブル４６の状態において、最小の次回失効時間はセンサＢ(ID=1)の125msecである。そして、125msecより小さい次回処理時刻の内、最大の次回処理時刻はセンサＢの100msecである。プロセッサ３０は、起床トリガレジスタ１２に設定するセンサIDとして、ID=1を取得する（S645)。センサＢ(ID=1)のトリガ種別はタイマであるので、プロセッサ３０は、ID=1の次回処理時刻（=100)を、ＲＴＣトリガレジスタ５１に設定する（S648)。また、プロセッサ３０は、起床トリガレジスタ１２をクリアする（S649)。割込みハンドラINTHL6の処理が終了すると、アプリケーションプログラムAP6に処理が戻る。アプリケーションプログラムAP6は、プロセッサ３０をスリープ状態とする（図３５:S604)。
【０１３９】
次に、時刻80で、センサＡから割込み要求が発行され、割込み通知レジスタ１１のレジスタ値は、（100)となる。このとき、起床トリガレジスタ１２のレジスタ値は（010)である。このため、ＩＮＴＣ１０は、ＰＭＵ２０に対するプロセッサ起床要求を発行しない。そのため、プロセッサ３０はスリープ状態のままであり、データ取得処理を行わない。
【０１４０】
次に、時刻100で、ＲＴＣタイマ５０のタイマ値がＲＴＣトリガレジスタ５１のレジスタ値（=100)と一致する。これにより、ＲＴＣタイマ５０からＰＭＵ２０へプロセッサ起床要求が発行され、ＲＴＣタイマ５０からプロセッサ３０への割込み要求が通知される。これにより、プロセッサ３０はアクティブ状態となり、割込みハンドラINTHL6を実行する。
【０１４１】
割込みハンドラINTHL6は、内部タイマ３１をＲＴＣタイマ５０の現在時刻=100で再設定する（S620)。割込みハンドラINTHL6は、割込み通知レジスタ１１のレジスタ値（100)を取得する（S621)。このレジスタ値（100)に基づき、プロセッサ３０は、センサＡデータ取得処理RT63を実行する（S623、S624)。そして、割込みハンドラINTHL6は、ID=0の割込みフラグを“０”にクリアする（S625)。また、割込みハンドラINTHL6は、ID=0の次回処理時刻を160(=80+80)に更新する(S626)。
【０１４２】
次に、割込みハンドラINTHL6は、管理テーブル４６からセンサＢ(ID=1)の次回処理時刻（100)を取得し（S628)、取得した次回処理時刻(100)を現在時刻（100)と比較する（S629)。このとき、現在時刻（100)が次回処理時刻（100)であるため、プロセッサ３０は、センサＢデータ取得処理RT64を実行する（S630)。そして、割込みハンドラINTHL6は、ID=1の次回処理時刻を、200(=100+100)で更新する（S631)。次に、割込みハンドラINTHL6は、起床トリガ設定ルーチンRT62を呼び出す。
【０１４３】
プロセッサ３０は、管理テーブル４６から、処理インターバル４６ｂ、次回処理時刻４６ｃ、データ有効期間４６ｅ、次回失効時刻４６ｆを取得する（S640)。次に、プロセッサ３０は、内部タイマ３１から現在時刻（100)を取得する（S641)。そして、プロセッサ３０は、センサID毎に以下の処理を実行する。プロセッサ３０は、管理テーブル４６に登録されている最新の次回処理時刻４６ｃにデータ有効期間４６ｅを加算した値で、次回失効時刻４６ｆを更新する（S642)。ID=0の次回処理時刻は160となり、次回失効時刻は240(=160+80)となる。ID=1の次回処理時刻は200となり、次回失効時刻は225(=200+25)となる。ID=2の次回処理時刻は125となり、次回失効時刻は250(=125+125)となる。現在の管理テーブル４６の状態において、最小の次回失効時刻はセンサＢの225msecであり、この225msecより小さい次回処理時刻のうちの最大値はセンサＢの200msecである。これにより、プロセッサ３０は、センサIDとして、ID=1を取得する（S644)。プロセッサ３０は、ＲＴＣトリガレジスタ５１をセンサＢの次回処理時刻である200に設定する（S648)。また、プロセッサ３０は、起床トリガレジスタ１２をクリアする（S649)。割込みハンドラINTHL6の処理が終了すると、アプリケーションプログラムAP6に処理が戻る。アプリケーションプログラムAP6は、プロセッサ３０をスリープ状態とする。
【０１４４】
以下、同様に時刻200、時刻300、時刻375、時刻400でのみプロセッサ３０が起床し、各時刻で、トリガ種別が割込みのセンサは割込み通知レジスタ１１の値に従ってデータ取得処理が実行され、トリガ種別がタイマのセンサは次回処理時刻の値に従ってデータ取得処理が実行される。
【０１４５】
第６の実施形態では、センサのデータ作成周期とデータ有効時間に基づいて、データの失効が発生しないようにプロセッサ３０を起床させるタイミングを動的に変化させている。また、割込み制御およびタイマによってセンサデータの取得処理を管理している。このため、割込み要求を発行する機能を持つセンサと前記機能を持たないセンサが混在している場合でも、プロセッサ３０のスリープ状態とアクティブ状態との遷移回数を削減することが可能である。このため、プロセッサ３０の消費電力を削減させることができる。また、プロセッサ３０が、データ失効時刻より後にデータ取得処理を行うことがないため、センシングデータを取りこぼすことがない。
【０１４６】
(第７の実施形態）
センサのデータ生成時刻に、ジッタが存在する場合、ジッタによってデータの取りこぼしが発生する可能性がある。図３９は、センサＰ、センサＱ、センサＲおよびプロセッサのタイムチャートを示す。センサＰ、センサＱ、センサＲは、割込み要求機能を持っている。図３９において、上向きの矢印は、センサデータが生成される時刻を示している。下向きの矢印は、センサデータの失効時刻を示している。上向きの矢印から下向きの矢印までの期間が、データ有効期間を示している。センサＱにジッタが発生し、センサＱのデータ生成時刻が、矢印Ｚで示すように、破線で示す正常時刻から実線で示す前の時点にずれたとする。
【０１４７】
第４の実施形態の制御によって図３９に示したセンサＰ、センサＱ、センサＲのデータを取得する場合を説明する。時刻t0の時点でセンサＰを起床トリガとしてプロセッサは起床する。なお、「センサＰを起床トリガとして」は、センサＰに対応する、割込みフラグおよび起床トリガフラグの双方が“１”である状態に対応する。時刻t0でプロセッサは、センサＰおよびセンサＱのデータを取得する。次に、プロセッサは、次回起床のための起床トリガフラグを設定するために、図２８のS436の処理を実行する。時点t0で最小の次回失効時刻は、時刻t2であり、次回失効時刻t2よりも小さい次回処理時刻のうちの最も大きな次回処理時刻は、時刻t1である。従って、プロセッサは、センサＱの起床トリガフラグを“１”とする。しかし、この時刻t1では、ジッタによりセンサＱから割込み要求が発行されないため、プロセッサは起床されない。プロセッサは、センサＱのさらに次の周期である時刻t4で、センサＱを起床トリガとして起床する。時刻t4で、プロセッサはセンサＰＱＲのデータを取得する。しかしながら、センサＲのデータ有効期間は時刻t3で終了している。このように、ジッタによってセンサＲの取得処理が遅延し、センサＲのデータの取りこぼしが発生する。
【０１４８】
第７の実施形態は、第４の実施形態の制御に適用可能である。第７の実施形態では、管理テーブル４４(図２３参照）に登録する処理インターバル４４ｂを、ジッタの最大値であるマージン値Mz1を考慮した値として登録する。すなわち、処理インターバルからマージン値Mz1を減算した値を処理インターバル４４ｂに設定する。マージン値Mz1は時間進み方向のジッタの最大値である。このような設定を行うことで、各センサのデータ生成時刻は必ず後側にずれるため、図３９で示したようなデータ生成時刻が前側にずれたことによるデータの取りこぼしが発生しない。しかし、このような設定を行っても、データの消失が発生する場合を、図４０に示す。すなわち、起床トリガとして決定されたセンサのデータ生成時刻にジッタが発生する場合である。図４０では、センサＰが起床トリガとして選択されている。このセンサＰのデータ生成時刻が時刻t0からt1に遅れている。このため、プロセッサ３０は時刻t1で起床する。時刻t0と時刻t１の間に、センサＱのデータの有効期間が終了している。このように、図４０では、ジッタによってセンサＱの取得処理が遅延し、センサＱのデータの取りこぼしが発生している。
【０１４９】
起床トリガとして選択されたセンサのデータ生成時刻がずれる場合の解決策として、第７の実施形態では、データ有効期間をジッタの最大値であるマージン値Mz2を考慮した値として計算に用いる。すなわち、データ有効期間からMz2を減算した値をデータ有効期間として計算に用いる。マージン値Mz2は時間遅れ方向のジッタの最大値である。なお、マージン値Mz1とMz2を同じ値としてもよい。また、ジッタの蓄積を考慮し、第７の実施形態では、起床トリガとして選択されたセンサについては、起床時の次回処理時刻の計算方法を変更する。すなわち、前回の次回処理時刻に処理インターバルを加算するのではなく、起床時の現在時刻に処理インターバルを加算することで、次回処理時刻を求める。ジッタが発生した場合、プロセッサの起床時に更新前の次回処理時刻を実際の起床時刻で補正し、この補正値に処理インターバルを加算することで、ジッタの蓄積を防ぐ。
【０１５０】
図４１は、第７の実施形態のアプリケーションプログラムの動作手順を示すフローチャートである。図４１と図２５との違いは、図４１にS702が追加された点のみであり、重複する説明は省略する。S702では、マージン値Mz2が設定登録される。
【０１５１】
図４２は、第７の実施形態の管理テーブル登録ルーチンを示すフローチャートである。第７の実施形態においては、処理インターバルからマージン値Mz1を減算した値を処理インターバル４４ｂに設定している（S710)。それ以外は、図２６と同様であり、重複する説明は省略する。第７の実施形態において、割込みハンドラの処理手順は図２７に示した手順と同じであり、重複する説明は省略する。
【０１５２】
図４３は、第７の実施形態の起床トリガ設定ルーチンを示すフローチャートである。図４３と図２８との違いは、図４３のS722、S723、S725およびS728であり、重複する説明は省略する。S722〜S727の処理が、各センサIDについて実行される。プロセッサは、割込フラグおよび起床トリガフラグの双方が“１”であるか否かが判定される（S722）。この判定がYesの場合は、起床トリガフラグが“１”に設定されたセンサから割込み要求が発生していることになるので、プロセッサは次回処理時刻を（現在時刻+処理インターバル）で更新する（S725)。S722の判定がNoの場合は、割込み通知レジスタ１１のレジスタ値を参照し、このセンサIDから割込み要求が発生しているか否かを判定する（S723)。S723の判定がYesの場合、プロセッサは、次回処理時刻を（次回処理時刻+処理インターバル）で更新する（S724)。なお、図２８のS432では、現在時刻を次回処理時刻と比較することで、割込み要求を発行しているセンサを識別しているが、第７の実施形態ではジッタを考慮したデータ取得制御を行っているので、図２８のS432の処理を採用していない。図４３のS728においては、プロセッサは、最小の次回失効時刻からマージン値Mz2を減算した値よりも小さい次回処理時刻のうち最も大きい次回処理時刻をもつセンサIDを取得している。そして、プロセッサは取得したセンサIDの起床トリガフラグを“１”にする（S729)。
【０１５３】
図４４は、第７の実施形態を用いたセンサＰ、センサＱ、センサＲおよびプロセッサのタイムチャートを示す。ここでは、センサＰにジッタが発生しているとする。時刻t0より前にプロセッサがスリープ状態に遷移した際、最小の次回失効時刻を持つセンサとしてセンサＱが選択される。これは、センサＱの次回失効時刻が、センサＰの次回失効時刻t3やセンサＲの次回失効時刻t5より小さいためである。図４０では、センサＰが起床トリガとして選択されていたが、図４４ではセンサＱの次回失効時刻からマージン値Mz2が減算されているため、センサＱが起床トリガとして選択される。よって、時刻t0で、センサＱを起床トリガとしてプロセッサは起床し、センサＱのデータを取得する。このように、図４０のようなセンサＱのデータの取りこぼしが発生していない。なお、センサＱは起床トリガセンサであるので、次回処理時刻が、S725の処理によって現在時刻を用いて更新されるが、センサＱにジッタが発生していないので、その更新結果はS724の更新処理と違いはない。次に、プロセッサは、次回起床のための起床トリガフラグを設定するために、S728の処理を実行する。時点t0で最小の次回失効時刻は、時刻t2であり、次回失効時刻t2よりも小さい次回処理時刻のうちの最も大きな次回処理時刻は、時刻t１である。従って、プロセッサは、センサＱの起床トリガフラグを“１”とする。
【０１５４】
時刻t1に、センサＱを起床トリガとしてプロセッサは起床する。時刻t1で、プロセッサは、センサＰおよびセンサＱのデータを取得する。センサＱは起床トリガセンサであるので、次回処理時刻が、S725の処理によって現在時刻を用いて更新されるが、センサＱにジッタが発生していないので、その更新結果はS724の更新処理と違いはない。次に、プロセッサは、次回起床のための起床トリガフラグを設定するために、S728の処理を実行する。時点t1で最小の次回失効時刻は、時刻t5であり、次回失効時刻t5よりも小さい次回処理時刻のうちの最も大きな次回処理時刻は、時刻t3である。従って、プロセッサは、センサＰの起床トリガフラグを“１”とする。
【０１５５】
センサＰの割込み要求の発生時刻は、ジッタにより時刻t3から時刻t4にずれる。このため、時刻t4になると、センサＰを起床トリガとしてプロセッサは起床し、センサＰおよびセンサＲのデータを取得する。センサＰは起床トリガセンサであるので、次回処理時刻が、S725の処理によって更新される。この更新処理では、更新前の次回処理時刻t3が、実際の起床時刻である現在時刻t4に補正され、この補正時刻t4にセンサＰの処理インターバルが加算される。
【０１５６】
第７の実施形態では、センサのデータ生成周期にジッタがある場合でも、データ消失することなく、プロセッサのスリープ状態とアクティブ状態との遷移回数を削減することが可能であり、プロセッサの消費電力を削減させることができる。
【０１５７】
(第８の実施形態）
第８の実施形態では、割込みハンドラINTHL1〜INTHL6が各データ取得処理RT13-RT15〜RT63-RT65を呼び出す際に、各データ取得処理RT13-RT15〜RT63-RT65に更新前の次回処理時刻を参照させることにより、各データ取得処理RT13-RT15〜RT63-RT65がセンサデータの生成時刻を把握可能とする。このため、各センサのデータ生成時刻をユーザに提示することが可能となる。
【０１５８】
例えば、図３（Ｂ）のタイムチャートにおいて、センサＡについては、データ生成時刻は、時刻0、時刻80、時刻160、時刻240、時刻320、時刻400であり、データ取得処理実行前の次回処理時刻に保存されている値は、それぞれ0、80、160、240、320、400であり、両者は一致する。
【０１５９】
センサＢについては、データ生成時刻は、時刻0、時刻100、時刻200、時刻300、時刻400である。データ取得処理を実行する時刻は、時刻0、時刻160、時刻240、時刻320、時刻400であり、データ生成時刻とは異なる。また、データ取得処理実行前の次回処理時刻に保存されている値は、0、100、200、300、400であり、データ生成時刻と一致する。
【０１６０】
センサＣについては、データ生成時刻は、時刻0、時刻125、時刻250、時刻375である。データ取得処理を実行する時刻は、時刻0、時刻160、時刻320、時刻400であり、データ生成時刻とは異なる。また、データ取得処理実行前の次回処理時刻に保存されている値は、0、125、250、375であり、データ生成時刻と一致する。
【０１６１】
このように、各センサのデータ取得時刻は、データ取得処理実行前の各センサ次回処理時刻に保存されている値と一致する。このため、第８の実施形態では、割込みハンドラINTHL1〜INTHL6は各データ取得処理RT13-RT15〜RT63-RT65を呼び出す際に、登録されている各センサの次回処理時刻を、各データ取得処理RT13-RT15〜RT63-RT65に参照させるあるいは提供する。これにより、各データ取得処理RT13-RT15〜RT63-RT65は、各センサの実際のデータ生成時刻を把握することが可能となる。
【０１６２】
第８の実施形態では、各データ取得処理RT13-RT15〜RT63-RT65は、各センサの実際のデータ生成時刻を把握することが可能となる。これにより、アプリケーションプログラムに対し、各センサの実際のデータ生成時刻を把握させることが可能となり、各センサの実際のデータ生成時刻をユーザに提供することが可能となる。
【０１６３】
(第９の実施形態）
第９の実施形態では、プロセッサ３０が複数段階のスリープ状態をサポートしている場合を想定している。また、第４〜第６の実施形態のように、プロセッサ３０の起床間隔が異なる場合を想定している。例えば、アクティブ状態とスリープ状態との遷移時間は短いが、消費電力が大きなスリープ状態M1と、前記遷移時間はスリープ状態M1より長いが、消費電力がスリープ状態M1より小さなスリープ状態M2がサポートされているとする。
【０１６４】
アプリケーションプログラムは、プロセッサ３０をスリープ状態にする際に、スリープ状態に遷移する時刻から次回起床までの所要時間Tkに基づきスリープ状態M1およびM2のどちらに遷移するかを決定する。アプリケーションプログラムは、所要時間Tkが閾値Ｃtよりも短い場合は、短い遷移時間を持つスリープ状態M1を選択し、所要時間Tkが閾値Ｃt以上である場合は、消費電力の小さなスリープ状態M2を選択する。
【０１６５】
第４〜第６の実施形態では、S436、S524、S644で取得されたセンサIDに対応する次回処理時刻４４ｃ、４５ｃ、４６ｃを取得し、現在時刻から取得した次回処理時刻までの時間を計算することで所要時間Tkを計算する。
【０１６６】
第９の実施形態では、スリープ状態に遷移する時刻から次回起床までの所要時間Tkを計算し、その時間Tkに基づいてスリープ状態を選択することとしたので、消費電力を削減し、プロセッサの状態遷移を効率よく行うことが可能となる。なお、閾値を２つ以上設け、３つ以上のスリープ状態を切り替えるようにしてもよい。
【０１６７】
(第１０の実施形態）
第１〜第９の実施形態では、起床トリガ設定ルーチンをソフトウェアによって実現することにしたが、起床トリガ設定ルーチンをハードウェアによって実現してもよい。例えば、図６に示した起床トリガ設定ルーチンの場合は、各センサの処理インターバルを記憶する複数のレジスタと、これら複数のレジスタのレジスタ値の最小値を演算する比較器とを備え、比較器の出力によって起床トリガレジスタ１２の設定を行わせる。
【０１６８】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１６９】
１０  割込みコントローラ、１１  割込み通知レジスタ、１２  起床トリガレジスタ、３０  プロセッサ、３１  内部タイマ、４０  メモリ、４１〜４６  管理テーブル、５０  ＲＴＣタイマ、５１  ＲＴＣトリガレジスタ、１００，１１０,１２０,１３０,１４０,１５０  プロセッサシステム。
【図１】
0006509616.tif 000002
【図２】
0006509616.tif 000003
【図３】
0006509616.tif 000004
【図４】
0006509616.tif 000005
【図５】
0006509616.tif 000006
【図６】
0006509616.tif 000007
【図７】
0006509616.tif 000008
【図８】
0006509616.tif 000009
【図９】
0006509616.tif 000010
【図１０】
0006509616.tif 000011
【図１１】
0006509616.tif 000012
【図１２】
0006509616.tif 000013
【図１３】
0006509616.tif 000014
【図１４】
0006509616.tif 000015
【図１５】
0006509616.tif 000016
【図１６】
0006509616.tif 000017
【図１７】
0006509616.tif 000018
【図１８】
0006509616.tif 000019
【図１９】
0006509616.tif 000020
【図２０】
0006509616.tif 000021
【図２１】
0006509616.tif 000022
【図２２】
0006509616.tif 000023
【図２３】
0006509616.tif 000024
【図２４】
0006509616.tif 000025
【図２５】
0006509616.tif 000026
【図２６】
0006509616.tif 000027
【図２７】
0006509616.tif 000028
【図２８】
0006509616.tif 000029
【図２９】
0006509616.tif 000030
【図３０】
0006509616.tif 000031
【図３１】
0006509616.tif 000032
【図３２】
0006509616.tif 000033
【図３３】
0006509616.tif 000034
【図３４】
0006509616.tif 000035
【図３５】
0006509616.tif 000036
【図３６】
0006509616.tif 000037
【図３７】
0006509616.tif 000038
【図３８】
0006509616.tif 000039
【図３９】
0006509616.tif 000040
【図４０】
0006509616.tif 000041
【図４１】
0006509616.tif 000042
【図４２】
0006509616.tif 000043
【図４３】
0006509616.tif 000044
【図４４】
0006509616.tif 000045