(57)【要約】【課題】任意のタイミングで発生する割込みを処理しつつ、周期的な信号入力処理又は信号出力処理を実行できるマイクロコンピュータを提供する。【解決手段】マイクロコンピュータは、ＣＰＵが制御周期の冒頭で周期タスクの実行を開始し、その周期タスクの実行が終了した後に非周期タスクの実行を開始するように構成され、周期タスクにおいて周期的な信号入力処理又は信号出力処理を実行し、割込みが発生した場合は、その割込み処理を非周期タスクで実行する。【選択図】図１
2009199424.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵが一定の制御周期に基づく処理を繰り返し実行するもので、前記制御周期においては、当該周期の冒頭で周期タスクの実行を開始し、当該周期タスクの実行が終了した後に非周期タスクの実行を開始するマイクロコンピュータであって、
前記ＣＰＵは、前記周期タスクにおいて周期的な信号入力処理又は信号出力処理を実行し、
前記ＣＰＵに対する割込みが発生した場合には、前記非周期タスクにおいて割込み処理を実行することを特徴とするマイクロコンピュータ。
【請求項２】
前記ＣＰＵにより、信号出力周期が設定可能に構成され、前記周期設定に基づいて信号を出力する周期信号出力回路を備え、
前記ＣＰＵは、前記信号の出力周期を前記制御周期と同一に設定し、前記信号の出力に関連して行う入力信号処理を、前記周期タスクにおいて実行することを特徴とする請求項１記載のマイクロコンピュータ
【請求項３】
前記信号出力周期を生成するためのタイマカウンタは、
下位ビット側がハードウエアカウンタで構成され、
上位ビット側は、前記ＣＰＵが、前記ハードウエアカウンタのカウント終了回数を計数するソフトウエアカウンタとして構成されていることを特徴とする請求項２記載のマイクロコンピュータ。
【請求項４】
前記非周期タスクの実行を停止させる停止タイミングを示すサイクル数を格納する停止タイミングレジスタと、
前記制御周期に相当するサイクル数をカウントする時間計測手段と、
前記周期タスクの先頭アドレスを格納する周期タスクレジスタと、
前記周期タスクもしくは前記非周期タスクを実行すべくフェッチする命令のフェッチアドレスを格納すると共に、前記フェッチする命令を読み出す度に前記フェッチアドレスを更新するプログラムカウンタと、
前記時間計測手段がカウントするカウント数と、前記停止タイミングレジスタに格納された停止タイミングを示すサイクル数とがそれぞれ入力されると共に、
前記カウント数と前記サイクル数とが一致したときに前記プログラムカウンタを停止させることで前記非周期タスクの実行を中断させ、
この後、前記時間計測手段から入力されるカウント数が前記制御周期の終わりを示すカウント数に一致した場合、前記周期タスクレジスタに格納された前記周期タスクの先頭アドレスを前記プログラムカウンタに格納して前記周期タスクの実行を開始させるプログラムカウンタ制御ユニットとを備えることを特徴とする請求項１乃至３の何れかに記載のマイクロコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＣＰＵが一定の制御周期に基づく処理を繰り返し実行するように構成されるマイクロコンピュータに関する。
【背景技術】
【０００２】
例えば、モータをＰＷＭ（Pulse Width Modulation）制御する場合に、ＰＷＭ信号によりモータに通電を行った場合の電流値を、マイクロコンピュータがＡ／Ｄ変換して取得し、通電電流を監視する処理を行うケースがある。この時、マイコンが行うＡ／Ｄ変換処理は、ＰＷＭ信号の出力タイミング（搬送波周期）に同期して行うことが好ましい。
【０００３】
図１０は、上記の処理を行うマイクロコンピュータの構成例を示す。マイクロコンピュータ１は、ＣＰＵ２，ＰＷＭ回路３，Ａ／Ｄ変換器４，タイマ５等で構成されており、これらはアドレス及びデータバス６を介して接続されている。
ＰＷＭ回路３は、内部にカウンタ７，サイクルレジスタ８，デューティレジスタ９等を備えている。ＣＰＵ２は、サイクルレジスタ８，デューティレジスタ９にデータを書き込むことで、ＰＷＭ信号の搬送波周期及びデューティ比を設定する。そして、ＰＷＭ回路３は、カウンタ７のカウントデータとレジスタ８，９に設定されたデータとを図示しないコンパレータにより比較することで、所定周期，所定デューティ比のＰＷＭ信号を生成出力する。尚、ＰＷＭ回路３は、ＰＷＭ信号の立上がりエッジのタイミングで、ＣＰＵ２に対してＰＷＭ割込みを発生させる。
【０００４】
タイマ５は、内部にカウンタ１０，コンペアレジスタ１１等を備えている。ＣＰＵ２は、コンペアレジスタ１１にデータを書き込むことで、コンペア割込みの発生タイミングを設定する。そして、タイマ５は、カウンタ１０のカウントデータとコンペアレジスタ１１に設定されたデータとを図示しないコンパレータにより比較することで、ＣＰＵ２に対してコンペア割込みを発生させる。
尚、ＣＰＵ２に対しては、例えばマイコン１の外部より通信要求割込み等も発生するようになっており、これらの各種割込みは、図示しない割込み制御回路を介してＣＰＵ２に与えられる。
【０００５】
図１１は、マイコン１の動作を示すタイミングチャートである。図１１（ｃ）に示すようにＰＷＭ信号の出力タイミングでＰＷＭ割込みが発生すると、ＣＰＵ２は、タイマ５よりカウンタ１０のデータ値を読み出す（図１１（ｅ）参照）。カウンタ１０は例えば４ビットカウンタであるとする。この場合、カウントデータが「１」であり、ＣＰＵ２は、コンペアレジスタ１１にデータ「７」をセットする（図１１（ｄ）参照）。次回のＰＷＭ割込みタイミングにおけるカウントデータ「Ｂ（ＨＥＸ）」の場合、コンペアデータは「１」となる。
【０００６】
そして、タイマ５のカウントデータが「７」に達するとコンペア割込みが発生し（図１１（ｆ）参照）、ＣＰＵ２は、Ａ／Ｄ変換器４にＡ／Ｄ変換を実行させる（図１１（ｇ）参照）。Ａ／Ｄ変換結果のデータは、図示しないデータレジスタに格納され（図１１  （ｈ）参照）、ＣＰＵ２は、そのレジスタに格納されたデータ値を読み出す。但しデータレジスタは、ＣＰＵ２の内部レジスタであっても良い。
尚、上記のような処理を行うマイクロコンピュータは極一般的な構成であるため、先行技術文献を特段に提示する必要はないと考える。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
ここで、マイコン１が専ら上記の処理のみを実行する場合には問題ないが、それ以外の処理も並行して行う場合に、より優先度が高い処理要求が割込みとして発生すると（図１１（ｂ），割込みＡ参照）、その割込み処理が先立って開始される。すると、その処理中にコンペア割込みが発生してもマスクされて受付けられず、Ａ／Ｄ変換処理がＰＷＭ搬送波周期に同期して実行されないケースが生じ、取得したデータの処理精度が低下するという問題があった。
【０００８】
本発明は上記事情に鑑みてなされたものであり、その目的は、任意のタイミングで発生する割込みを処理しつつ、周期的な信号入力処理又は信号出力処理を実行できるマイクロコンピュータを提供することにある。
【課題を解決するための手段】
【０００９】
請求項１記載のマイクロコンピュータによれば、ＣＰＵは、制御周期の冒頭で周期タスクの実行を開始し、その周期タスクの実行が終了した後に非周期タスクの実行を開始する。そして、周期タスクにおいて周期的な信号入力処理又は信号出力処理を実行し、割込みが発生した場合は、その割込み処理を非周期タスクで実行する。したがって、周期的な信号入力処理又は信号出力処理を実行するべきタイミングでＣＰＵに割込みが発生しても、その割込みを処理するために周期的な信号処理が妨げられることがなく、信号処理の等時性を維持することができる。
【００１０】
請求項２記載のマイクロコンピュータによれば、周期信号出力回路が、ＣＰＵにより設定された周期に基づいて信号を出力する場合、ＣＰＵは、その信号出力周期を制御周期と同一に設定し、前記信号の出力に関連して行う入力信号処理を周期タスクで実行する。したがって、マイクロコンピュータが周期的に出力する信号に伴い、変化を呈する可能性がある信号の状態を監視する必要がある場合に、その信号を監視するタイミングが遅延することはなく、監視を一定の周期で確実に行うことができる。
【００１１】
請求項３記載のマイクロコンピュータによれば、信号出力周期を生成するためのタイマカウンタを、下位ビット側をハードウエアカウンタとし、上位ビット側は、ＣＰＵがハードウエアカウンタのカウント終了回数を計数するソフトウエアカウンタとして構成する。したがって、ハードウエアとして用意するカウンタの規模（ビット数）を小さくすることができる。
【００１２】
請求項４記載のマイクロコンピュータによれば、プログラムカウンタ制御ユニットには、制御周期に相当するサイクル数をカウントする時間計測手段のカウントデータが与えられると共に、停止タイミングレジスタから非周期タスクの停止タイミングを示すサイクル数が与えられる。そして、プログラムカウンタ制御ユニットは、時間計測手段のカウントデータと停止タイミングを示すサイクル数とを比較し、両者が一致すると、プログラムカウンタを停止して非周期タスクの実行を中断させる。
【００１３】
この後、プログラムカウンタ制御ユニットは、時間計測手段のカウントデータが制御周期の終わりを示す値に一致すると、周期タスクレジスタに格納された周期タスクの先頭アドレスをプログラムカウンタに格納させて、周期タスクの実行を開始させる。すなわち、時間計測手段のカウント数が停止タイミングを示すサイクル数に一致すると、非周期タスクの実行が中断されて周期タスクの実行が開始されるので、周期タスクを周期的に実行させることができる。
【発明を実施するための最良の形態】
【００１４】
（第１実施例）
以下、本発明の第１実施例について図１乃至図７を参照して説明する。本実施例のマイクロコンピュータ（以下、マイコンという）は、周期処理（以下、周期タスクという）と非周期処理（以下、非周期タスクという）とを実行することで所望の処理を行う。具体的には、周期タスクを周期的に実行し、その周期タスクと周期タスクとの間に非周期タスクを実行する。周期タスクは、例えばタイマのカウントや通信処理を行うものなどで、非周期タスクは、例えば周期的な実行を必要としないアプリケーションを実行するもの（割込み処理など）である。
【００１５】
図３は、マイコンのブロック構成図である。この図に示されるように、マイコンＭ１は、ＲＯＭ１００と、ＲＡＭ２００と、ＣＰＵ３００とを備えており、各々が、アドレスを転送するために用いられるアドレスバス４００、データを転送するために用いられるデータバス５００に接続されている。
【００１６】
ＲＯＭ１００には、マイコンＭ１が搭載された製品に、上述のように周期的な処理を実行させる周期タスクと、上記製品の機能等を実現させるアプリケーションとしての非周期タスクとがプログラムとして書き込まれており、それぞれがＣＰＵ３００により読み出されて実行される。ＲＡＭ２００は、ＣＰＵ３００が周期タスクや非周期タスクを実行する上でデータの書き込み・読み出しを行う際に用いられる。ＣＰＵ３００は、アドレスバス４００およびデータバス５００を介してＲＯＭ１００に内蔵された各タスクのプログラムを読み出して、周期タスクを周期的に実行すると共に周期タスクの処理の間に非周期タスクを実行し、その際に、読み出した命令を解読（デコード）し、解読した命令に従いデータの移動や演算、加工等を行う。
【００１７】
図４は、ＣＰＵ３００のブロック構成図である。ＣＰＵ３００は、タスクの実行状況を制御する制御ユニット３１０と、データの格納や算術・論理演算を実行するデータパス３２０とを備えている。制御ユニット３１０は、命令デコーダ３１１と、プログラムカウンタ制御ユニット３１２とを備えている。命令デコーダ３１１は、ＲＯＭ１００から取り込んだタスクが示す命令コードをデータパス３２０を介して格納すると、その命令コードを解読する。プログラムカウンタ制御ユニット３１２は、命令デコーダ３１１により解読された命令に基づき演算制御信号を出力してデータパス３２０を制御する。
【００１８】
データパス３２０は、ロードストアユニット３２１と、実行ユニット３２２と、プログラムカウンタ３２３（以下、ＰＣと称す）と、レジスタファイル３２４とを備えている。ロードストアユニット３２１は、ＣＰＵ３００の外部（例えばＲＯＭ１００）からのデータ読み込み、および外部（例えばＲＡＭ２００）へのデータ書き込みを制御する。実行ユニット３２２は、命令デコーダ３１１で解読された命令コードに従い、プログラムカウンタ制御ユニット３１２から入力される演算制御信号に応じて算術・論理演算を実行する。
【００１９】
ＰＣ３２３は、次に実行する命令が格納されているＲＯＭ１００のフェッチアドレスを示すもので、ＣＰＵ３００がＲＯＭ１００から命令（プログラム）の読み込みを行なう際、その命令を読み出すためのフェッチアドレスが、ＰＣ３２３からロードストアユニット３２１を介してアドレスバス４００に出力される。また、ＣＰＵ３００がＲＯＭ１００から命令を読み込む度に、読み取った命令の分だけＰＣ３２３のフェッチアドレス値が増加する。
【００２０】
レジスタファイル３２４は、実行ユニット３２２による実行結果データもしくはＣＰＵ３００の外部より取り込まれたデータを格納するもので、周期タスクの先頭アドレスを格納する周期タスクレジスタ３２５と、マシンサイクルに同期してカウントダウンするカウンタ３２６（時間計測手段）と、非周期タスクの停止タイミングを格納する停止タイミングレジスタ３２７とを備えて構成されている。
【００２１】
上記構成を有するマイコンＭ１において、ＣＰＵ３００は、メモリから命令を読み込むＩＦ（フェッチ）ステージと、命令を解読するＤＥＣ（デコード）ステージと、解読された命令に従って算術・演算やメモリアクセス等のアドレス演算を行うＥＸＥ（実行）ステージと、データのメモリ（例えばＲＡＭ２００）への読み書きを行うＭＡ（メモリアクセス）ステージと、メモリから読み込んだ結果や算術演算の結果をレジスタ（例えばレジスタファイル３２４）に書き込むＷＢ（ライトバック）ステージからなるパイプライン処理を行うようになっている。
【００２２】
図５は、ＣＰＵ３００が実行するパイプライン処理の一例を示した図である。まず、本実施形態では、ＣＰＵ３００で実行される命令を以下の３種類とする。
（１）論理・算術命令Ａ：ＲＡＭ２００もしくはＲＯＭ１００へのアクセスを必要とせず、レジスタファイル３２４から格納データを読み込み演算し、演算結果をレジスタファイル３２４に書き込む動作をする命令
（２）ロードストア命令Ｂ：ＣＰＵ３００の外部メモリ（ＲＡＭ２００もしくはＲＯＭ１００）からレジスタファイル３２４へデータを書き込むためのロードデータを読み込むロード命令、レジスタファイル３２４から外部メモリへストアデータを書き込むストア命令
（３）分岐命令Ｃ：レジスタファイル３２４の格納データから分岐先アドレスを取得してＰＣ３２３に書き込み、分岐先アドレスが書き込まれる前のＰＣ３２３のアドレスをレジスタファイル３２４に格納する動作を行う命令（ＰＣ３２３のアドレスを変更してタスクの命令順序を変更する命令）
上記各命令のうち、命令Ａおよび命令Ｃは４サイクル、命令Ｂは５サイクルで１つの命令を処理するようになっている。
【００２３】
図５に示すパイプライン処理のサイクル０において、ＰＣ３２３のアドレスが０ｘ００である場合、ＩＦステージが実行される。すなわち、アドレス０ｘ００を示すフェッチアドレスがＰＣ３２３からロードストアユニット３２１、アドレスバス４００を介してＲＯＭ１００に入力される。そして、ＲＯＭ１００に記憶されたタスクのアドレス０ｘ００の命令がデータパス３２０を介してＣＰＵ３００に入力される。なお、ＣＰＵ３００がＲＯＭ１００からアドレス０ｘ００の命令Ａを読み込んだ際、ＰＣ３２３のフェッチアドレスの値が０ｘ０１に増加される。
【００２４】
次に、サイクル１では、アドレス０ｘ００の命令ＡについてＤＥＣステージが実行される。すなわち、図４に示されるＣＰＵ３００の命令デコーダ３１１にて命令が解読され、解読された命令がプログラムカウンタ制御ユニット３１２に入力される。また、ＰＣ３２３のアドレス０ｘ０１について上記と同様に命令ＡのＩＦステージが実行される。
続いて、サイクル２では、アドレス０ｘ００の命令ＡについてはＥＸＥステージが実行される。すなわち、プログラムカウンタ制御ユニット３１２から実行ユニット３２２に演算制御信号が入力され、命令に従った演算が実行される。また、アドレス０ｘ０１の命令Ａについては上記と同様に命令ＡのＤＥＣステージが実行される。さらに、ＰＣ３２３のアドレス０ｘ０２について上記と同様に命令ＡのＩＦステージが実行される。
【００２５】
この後、サイクル３では、アドレス０ｘ００の命令ＡについてＷＢステージが実行される。すなわち、実行ユニット３２２にて実行された演算の結果がレジスタファイル３２４に書き込まれる。また、アドレス０ｘ０１の命令Ａについて上記と同様に命令ＡのＥＸＥステージが実行され、アドレス０ｘ０２の命令Ａについて上記と同様に命令ＡのＤＥＣステージが実行される。さらに、ＰＣ３２３のアドレス０ｘ０３について命令ＢのＩＦステージが実行される。以後、サイクル数の増加に伴い、上記各アドレスの各ステージが順を追って実行されていく。
【００２６】
ここで、上記アドレス０ｘ０３の命令Ｂが実行される場合は、ＥＸＥステージの後にＭＡステージが実行されるが、前記ＭＡステージと同じサイクル（サイクル６）で実行される下位のアドレスの各ステージ（図５に示される例では、アドレス０ｘ０４の命令ＡのＥＸＥステージ、アドレス０ｘ０５の命令ＡのＤＥＣステージ、アドレス０ｘ０７の命令Ｃ（０ｘＡ０への分岐）のＩＦステージ）はストールされ、実行されない。
【００２７】
具体的には、上記ＭＡステージの実行中（サイクル６）は、プログラムカウンタ制御ユニット３１２からＰＣ３２３にＰＣストール信号が入力され、ＰＣ３２３のアドレスの更新が停止される。また、制御ユニット３１０からロードストアユニット３２１にフェッチ／ロードストア許可信号が入力されてロードストアが許可されるように制御され、他命令のパイプラインがストールされる。これにより２サイクルが必要となるが、メモリアクセスが必要な命令のみ、ＩＦステージとＭＡステージとの競合を避けることができる。
このようにＩＦステージとＭＡステージとの競合を避ける理由は、ＣＰＵ３００からＲＡＭ２００にデータが書き込まれるためにＭＡステージによりデータパス３２０が占有され、他の命令ステージがデータパス３２０を使用できなくなるからである。上記のようにしてストールされたサイクル６の各ステージは、次のサイクル７で実行される。
【００２８】
すなわち、アドレス０ｘ０７の命令ＣのＩＦステージがサイクル７で実行される。この場合、アドレス０ｘ０３のＷＢステージ時にＰＣ３２３の値が分岐先アドレス０ｘＡ０に書き換えられて分岐が行われる。このため、図５においてアドレス０ｘ０８、０ｘ０９の各命令Ａを破棄するため、プログラムカウンタ制御ユニット３１２にてＷＢ停止信号が生成されてレジスタファイル３２４に入力され、実行ユニット３２２からレジスタファイル３２４に対するデータの書き込みが停止される。また、制御ユニット３１０からロードストアユニット３２１にフェッチ／ロードストア許可信号が入力され、ロードストアユニット３２１にてＩＦステージのみ許可するように制御される。こうして分岐されたアドレス０ｘＡ０以降の各命令が実行されていく。以上がパイプライン処理の一例である。
【００２９】
次に、上記のようにパイプライン処理を行うＣＰＵ３００が、実行サイクルのズレなく周期タスクを周期的に実行する動作について説明する。本実施例では、５０サイクルごとに演算を行う必要がある周期タスクを実行する場合を説明する。図６は、各タスクの実行内容を示したもので、周期タスクレジスタ３２５の設定を行うタスク、停止タイミングレジスタ３２７の設定を行うタスク、周期タスク、非周期タスクが実行されるようになっている。このうち、レジスタ３２５,３２７の設定を行うタスクはＣＰＵ３００の起動時にだけ実行され、その後は周期タスクおよび非周期タスクが繰り返し実行される。これらの各タスクは、それぞれＲＯＭ１００に記憶されている。
【００３０】
すなわち、周期タスクおよび非周期タスクを実行するに際し、まず、ＣＰＵ３００のリセット直後（もしくはＣＰＵ３００に電源が供給された直後）に実行するタスクのアドレス（ＣＰＵ３００からＲＯＭ１００にアクセスするアドレス）により周期タスクレジスタ３２５の設定を行うタスクが実行される。この周期タスクレジスタ３２５の設定を行うタスクは、周期タスクの先頭アドレスを周期タスクレジスタ３２５に書き込む周期タスクレジスタ設定命令を実行する。
【００３１】
上述のように、周期タスクレジスタ３２５の設定を行うタスクは、そのアドレスが例えば０ｘ００とされ、ＣＰＵ３００がＲＯＭ１００にアクセスすることにより読み出されて実行される。続いて、停止タイミングレジスタ３２７の設定を行うタスクが実行される。このタスクは、停止タイミングレジスタ３２７に周期タスク起動準備期間を書き込む停止タイミングレジスタ設定命令を実行する。周期タスク起動準備期間とは、非周期タスクを停止させてから周期タスクが開始するまでの期間である。
【００３２】
また、本実施例では、停止タイミングを「最大の処理サイクル数＋非周期処理の再開アドレスを退避するために必要なサイクル数」と定義する。このうち、最大の処理サイクル数とは、ＤＥＣステージからＭＡステージまでのサイクル数に相当する。
【００３３】
このような定義に従い、周期タスク起動準備期間が例えば６サイクルとされ、この周期タスク起動準備期間が停止タイミングとしてプログラムカウンタ制御ユニット３１２に入力される。なお、この周期タスクレジスタ３２５の設定を行うタスクは、そのアドレスが例えば０ｘ０２とされる。この後に周期タスクが実行される。この周期タスクは、カウンタ設定を行う命令と、カウンタ設定後に実行される周期タスクを実行する命令と、周期タスクの実行が完了した後、非周期処理へ分岐する命令とにより構成されている。
【００３４】
カウンタ設定を行う命令は、制御周期をカウントするためのカウント数をカウンタ３２６に設定するもので、当該命令が実行されることでレジスタファイル３２４のカウンタ３２６にカウント数（本実施形態では５０）が書き込まれると共に、カウントダウンが開始され、カウント値がプログラムカウンタ制御ユニット３１２に入力される。上記カウンタ設定を行う命令が実行された後、周期タスクを実行する命令により周期タスクが実行される。周期タスクが実行されていく間、カウンタ３２６にてカウントダウンが行われる。
そして、周期タスクの実行が終了した後、非周期タスクへ分岐する非周期タスク開始命令が実行されると、非周期タスクの実行が開始される。カウンタ３２６のカウントダウンと共に非周期タスクが実行され、停止タイミングレジスタ３２７の値（本実施形態では６）とカウンタ３２６の値とが一致したサイクルから、周期タスク起動準備期間が開始される。
【００３５】
このタスク起動準備期間における処理シーケンスを、図７を参照して説明する。図７は、非周期タスクから周期タスクに切り替わる処理シーケンスを示した図である。周期タスク起動準備期間の第１サイクル（図７のカウント値６、停止タイミング）において、プログラムカウンタ制御ユニット３１２からＰＣ３２３にＰＣストール信号が入力されてＰＣ３２３の値の更新が停止され、命令フェッチ動作が停止される。これにより、周期タスク起動準備期間の第１サイクルの時点で、ＤＥＣステージ以降が実行中となっている命令はＷＢステージまで通常通り実行される。
【００３６】
非周期処理停止シーケンス中に分岐命令のＷＢステージが実行された場合、通常の分岐命令を実行する場合と同様にＰＣ３２３の値がＰＣストール信号より優先して分岐先アドレスに書き換えられる。そして、以後の命令が破棄され、プログラムカウンタ制御ユニット３１２からレジスタファイル３２４にＷＢ停止信号が入力され、制御ユニット３１０からロードストアユニット３２１にフェッチ／ロードストア停止信号が入力されることで、メモリ書き込み・ＷＢステージが禁止される。
【００３７】
カウンタ３２６のカウント値が「１」のとき、プログラムカウンタ制御ユニット３１２から実行ユニットに対して開始タスク読み込みトリガ信号が発行され、実行ユニットでは周期タスクレジスタの値がＰＣ３２３にロードされる。また、カウント値が「１」の時点でＰＣ３２３に書き込まれていたアドレス（非周期タスクの最終アドレス；退避ＰＣ値）は、実行ユニット３２２およびロードストアユニット３２１を介してＲＡＭ２００に書き込まれる（ＰＣＭＡ）。そして、カウント「０」のとき、周期タスクレジスタ３２５に書き込まれているアドレスと同じアドレスからタスクが開始される。
【００３８】
このようにして１制御周期が確実に終了し、再び周期タスクが実行されることとなる。そして、非周期タスクへの分岐が行われた場合、先に実行された非周期タスクＡの最終アドレスがＲＡＭ２００からロードストアユニット３２１を介してレジスタファイル３２４に書き込まれ、格納データとして実行ユニット３２２を介してＰＣ３２３に書き込まれる。これにより、図６に示される非周期タスクＢが非周期タスクＡの続きとして実行され、以後は、上記周期タスクおよび非周期タスクが制御周期ごとに繰り返し実行される。
【００３９】
すなわち、制御周期内でＣＰＵ３００に周期タスクと非周期タスクとを実行させる場合、周期タスクが終了すると直ちに非周期タスクを実行させる。また、非周期タスクの実行後は、制御周期の残りカウントが非周期タスクの停止タイミング相当値になると非周期タスクを中断させて、当該残りカウントを周期タスク起動準備期間とする。したがって、周期タスクを周期的に実行させるための割込み信号が不要となる。また、周期タスク終了後に直ちに非周期タスクを実行させるので、ＣＰＵ３００がアイドル状態となる期間がなく、ＣＰＵ３００の処理能力の有効利用を図ることができる。
【００４０】
図２は、その他の周辺回路も併せて示すマイコンＭ１の全体構成図である。尚、図１０と同一の構成には同一の符号を付して示す。マイコンＭ１は、ＣＰＵ３００と（ＲＯＭ１００及びＲＡＭ２００の図示は省略），ＰＷＭ回路３（周期信号出力回路），Ａ／Ｄ変換器４，割込み制御回路１２等で構成されている。また、マイコンＭ１に対して外部より、例えば通信要求などの割込みを発生させる外部回路１３が配置されているとする。但し、この構成では、ＰＷＭ回路３は、ＰＷＭ信号の出力タイミングでＣＰＵ３００に対して割込みを発生させることはない。
【００４１】
次に、本実施例の作用について図１も参照して説明する。ＣＰＵ３００は、ＰＷＭ回路３に対するレジスタ８，９の設定は図１０，図１１のケースと同様に行うが、この設定処理は、例えば図６に示す「周期プログラムレジスタ設定」内で行っても良いし、周期タスク，非周期タスクの最初の実行時に行っても良い。そして、ＣＰＵ３００は、ＰＷＭ信号の出力タイミング（信号出力処理）に同期して行うＡ／Ｄ変換処理（信号入力処理）を周期タスク内で行い、外部回路１３が発生した割込みの処理を非周期タスク内で行う。
【００４２】
また、ＣＰＵ３００は、ＰＷＭ搬送波周期を、タスクの制御周期と同一に設定する。これにより、図１０に示す構成のように外部のタイマ５を使用せずとも、ＣＰＵ３００は、ＰＷＭ信号の出力タイミングに同期して（出力タイミングから一定時間後に）Ａ／Ｄ変換処理を行うことが可能となっている。すなわち、ＣＰＵ３００が周期タスク内における所定のタイミングでＡ／Ｄ変換処理を行うようにプログラミングされている。マイコンＭ１内の各回路動作が共通のシステムクロックに同期していれば、タスクの制御周期とＰＷＭ搬送波周期とにずれが生じることはない。
【００４３】
したがって、図１（ｂ）に示すように周期タスクの実行期間中に、外部回路１３が発生した割込みＡはその実行期間中に処理されることはなく、非周期タスクの実行が開始されると、当該タスク内において処理される。その結果、割込みＡの発生により、ＰＷＭ信号の出力タイミングに同期したＡ／Ｄ変換処理のタイミングが遅延することはなく、常にＰＷＭ搬送波周期−制御周期に一致するタイミングで実行される。
【００４４】
以上のように本実施例によれば、マイコンＭ１は、ＣＰＵ３００が制御周期の冒頭で周期タスクの実行を開始し、その周期タスクの実行が終了した後に非周期タスクの実行を開始するように構成され、周期タスクにおいて周期的な信号入力処理を実行し、割込みが発生した場合は、その割込み処理を非周期タスクで実行するようにした。したがって、周期的な信号入力処理を実行するべきタイミングでＣＰＵ３００に割込みが発生しても、その割込みを処理するために周期的な信号処理が妨げられることがなく、信号処理の等時性を維持することができる。
【００４５】
具体的には、ＰＷＭ回路３が、ＣＰＵ３００により設定された周期に基づいてＰＷＭ信号を出力する場合、ＣＰＵ３００は、ＰＷＭ搬送波周期をタスクの制御周期と同一に設定し、ＰＷＭ信号の出力に同期して行うＡ／Ｄ変換処理を周期タスクで実行する。すなわち、マイコンＭ１が周期的に出力するＰＷＭ信号に伴い、変化を呈する可能性がある信号の状態を監視する必要がある場合、例えば、モータをＰＷＭ制御により駆動する場合のモータの駆動電流をＣＰＵ３００がＡ／Ｄ変換して監視する場合などに、監視を一定の周期で確実に行うことができる。
【００４６】
そして、マイコンＭ１は、プログラムカウンタ制御ユニット３１２に、制御周期に相当するサイクル数をカウントするカウンタ３２６のカウントデータが与えられると共に、停止タイミングレジスタ３２７から非周期タスクの停止タイミングを示すサイクル数が与えられると、プログラムカウンタ制御ユニット３１２は、カウンタ３２６のカウントデータと停止タイミングを示すサイクル数とを比較し、両者が一致するとＰＣ３２３を停止して非周期タスクの実行を中断させるようにした。
【００４７】
この後、プログラムカウンタ制御ユニット３１２は、カウンタ３２６のカウントデータが制御周期の終わりを示す値に一致すると、周期タスクレジスタ３２５に格納された周期タスクの先頭アドレスをＰＣ３２３に格納させて、周期タスクの実行を開始させる。すなわち、カウンタ３２６のカウント数が停止タイミングを示すサイクル数と一致すると非周期タスクの実行が中断されて周期タスクの実行が開始されるので、周期タスクを周期的に実行させることができる。
【００４８】
（第２実施例）
図８及び図９は本発明の第２実施例を示すものであり、第１実施例と同一部分には同一符号を付して説明を省略し、以下異なる部分について説明する。第２実施例では、ＰＷＭ回路３Ａ内のカウンタ７Ａのビットサイズを第１実施例のカウンタ７よりも削減しており、カウンタ７Ａがカウントアップすると、ＣＰＵ３００Ａに対してＰＷＭタイマ割込みを発生させるようになっている。
【００４９】
そして、ＣＰＵ３００Ａは、周期タスクにおいてＰＷＭタイマ割込みを受け付けて図９に示す処理を行い、その処理中でタイマ割込み回数をカウントし（ステップＳ１）、そのカウント値が所定値に達すると（ステップＳ２：ＹＥＳ）Ａ／Ｄ変換処理を実行する（ステップＳ３）。その後は、上記カウント値をクリアして（ステップＳ４）リターンする。また、カウント値が所定値に達していなければ（ステップＳ２：ＮＯ）そのままリターンする。
【００５０】
すなわち、第２実施例では、ＰＷＭ搬送波周期をカウントするためのカウンタ７Ａ（ハードウエアカウンタ）が下位ビット側に対応し、ＣＰＵ３００Ａが周期タスク内でカウントを行うソフトウエアカウンタが上位ビット側に対応するようになっている。例えば、第１実施例のカウンタのビットサイズが８ビットであるとすると、例えばカウンタ７Ａが下位４ビット，ソフトウエアカウンタが上位４ビットをカウントする。但しこの場合、カウンタ７Ａが発生するＰＷＭタイマ割込みは、必ず周期タスクの実行期間中に発生するように割込み周期を調整する必要がある。
【００５１】
以上のように第２実施例によれば、ＰＷＭ信号の出力周期を生成するためのタイマカウンタを、下位ビット側をハードウエアカウンタ７Ａとし、上位ビット側は、ＣＰＵ３００Ａが、ハードウエアカウンタのカウント終了回数を計数するソフトウエアカウンタとして構成したので、ハードウエアとして用意するカウンタ７Ａの規模（ビット数）を小さくすることができる。
【００５２】
本発明は上記し且つ図面に記載した実施例にのみ限定されるものではなく、以下のような変形または拡張が可能である。
例えば、制御周期内における周期タスクと非周期タスクとの実行比率をそれぞれ５０％とすれば、特開平６−２５０８５７号公報に開示されているマイクロコンピュータが実行するＬタスクを周期タスク，Ａタスクを非周期タスクとみなすことができる。したがって、上記構成のマイクロコンピュータにおいても同様に、本発明の制御内容を実行させることができる。
各カウンタのカウント動作は、ダウンカウントであっても良い。
制御周期は５０サイクルに限ることなく、個別の設計に応じて適宜変更すれば良い。
マイクロコンピュータが周期的に出力する信号はＰＷＭ信号に限ることなく、パルス幅が一定の信号でも良い。また、ロウアクティブ信号でも良い。
【００５３】
信号入力処理は、Ａ／Ｄ変換処理に限ることなく、例えば入力ポートの信号レベル（ハイ，ロウ）を読み取る処理や、メモリやレジスタのデータを読み出す処理でも良い。
また、周期タスクにおいては、周期的な信号入力処理をトリガとして、信号出力処理を周期的に行うようにしても良い。
第２実施例におけるハードウエアカウンタ７Ａの下位側ビットサイズと、ソフトウエアカウンタの上位側ビットサイズとは、個別の設計に応じて適宜変更すれば良い。
【図面の簡単な説明】
【００５４】
【図１】本発明の第１実施例であり、マイクロコンピュータの処理内容を示すタイミングチャート
【図２】周辺回路を含むマイクロコンピュータの全体構成図
【図３】マイクロコンピュータの内部構成図
【図４】ＣＰＵの内部構成を中心に示す機能ブロック図
【図５】ＣＰＵが実行するパイプライン処理の一例を示す図
【図６】各タスクの実行内容を示す図
【図７】タスク起動準備期間における処理シーケンスを示す図
【図８】本発明の第２実施例を示す図２の一部相当図
【図９】ＣＰＵが行うＰＷＭタイマ割込み処理を示すフローチャート
【図１０】従来技術を示す図２相当図
【図１１】図１相当図
【符号の説明】
【００５５】
図面中、３はＰＷＭ回路（周期信号出力回路）、７Ａはカウンタ（ハードウエアカウンタ）３００はＣＰＵ、３１２プログラムカウンタ制御ユニット、３２３はプログラムカウンタ、３２５は周期タスクレジスタ、３２６はカウンタ（時間計測手段）、３２７は停止タイミングレジスタ、Ｍ１はマイクロコンピュータを示す。
【図１】
2009199424.tif 000003
【図２】
2009199424.tif 000004
【図３】
2009199424.tif 000005
【図４】
2009199424.tif 000006
【図５】
2009199424.tif 000007
【図６】
2009199424.tif 000008
【図７】
2009199424.tif 000009
【図８】
2009199424.tif 000010
【図９】
2009199424.tif 000011
【図１０】
2009199424.tif 000012
【図１１】
2009199424.tif 000013