(57)【要約】【課題】  プログラムサイズの増加を極力抑制した上で、多様な周辺機能をソフトウエアによって実現することができるマイクロコンピュータを提供する。【解決手段】  マイクロコンピュータ１０のＣＰＵ１１を、Ｌタスクに記述されている周辺機能命令を１命令として実行処理可能に構成する。そして、ＣＰＵ１１は、オペランドで指定されている汎用レジスタ３０より周辺機能命令の実行に要する情報を取得する共に、当該命令の実行結果に関する情報を汎用レジスタ３０に格納する。【選択図】  図１
2006195910.tif 000002
【特許請求の範囲】
【請求項１】
複数のタスクを時分割並行処理可能であると共に、それらの内少なくとも１つのタスクは、命令アドレスの増分が一定となるようにしてループするプログラムが記述された特定タスクとなっているマイクロコンピュータにおいて、
前記複数のプログラムの１つは、プログラムアドレスの増分が固定され且つループ化された特定タスクとして記述されていると共に、前記プログラムカウンタをタイマカウンタとして利用可能であり、
前記特定タスクには、周辺機能を１命令で実行するための周辺機能命令が記述されており、
前記周辺機能命令は、オペランドとして汎用レジスタを１つ以上指定するように設定され、
前記ＣＰＵは、前記周辺機能命令を１命令として実行処理可能に構成され、汎用レジスタより当該命令の実行に要する情報を取得する共に、当該命令の実行結果に関する情報を汎用レジスタに格納することを特徴とするマイクロコンピュータ。
【請求項２】
前記ＣＰＵは、前記周辺機能命令としてインプットキャプチャ命令を実行する場合、汎用レジスタよりタイマ値を取得する条件となる入力端子のエッジ指定情報を取得し、
汎用レジスタに、前回にサンプリングした前記入力端子のレベルと、前記入力端子の現在のレベルとを格納し、
前回と現在の入力端子の状態に基づいて前記取得条件が成立したと判断するとタイマカウンタの値を取得し、キャプチャ値として汎用レジスタに格納することを特徴とする請求項１記載のマイクロコンピュータ。
【請求項３】
前記ＣＰＵは、前記周辺機能命令としてサンプリングコンペア命令を実行する場合、汎用レジスタにセットされるコンペア周期値を取得し、
汎用レジスタに、サンプリングタイミング毎に前記コンペア周期値を累算したコンペア値をセットし、
前記コンペア値と前記タイマカウンタの値とを比較して一致判断を行い、両者の一致時に入力端子の状態をサンプリングして、成立フラグと共に汎用レジスタに格納することを特徴とする請求項１又は２記載のマイクロコンピュータ。
【請求項４】
前記ＣＰＵは、前記周辺機能命令としてインプットコンペアセット命令を実行する場合、汎用レジスタにセットされるコンペアセット値及びコンペアセット条件となる入力端子のエッジ指定情報を取得し、
前記コンペアセット条件が成立すると、汎用レジスタに、前記コンペアセット値にその時点のタイマカウンタの値を加えたコンペア値と共に、成立フラグを格納することを特徴とする請求項１乃至３の何れかに記載のマイクロコンピュータ。
【請求項５】
前記ＣＰＵは、前記周辺機能命令として条件付サンプリング命令を実行する場合、汎用レジスタに条件フラグがセットされたことを認識すると入力端子のサンプリングを行ない、
汎用レジスタに、前記サンプリング結果及び成立フラグを格納することを特徴とする請求項１乃至４の何れかに記載のマイクロコンピュータ。
【請求項６】
前記ＣＰＵは、前記周辺機能命令として入力処理系の命令を実行する場合、汎用レジスタに、前回の入力端子の状態と今回の入力端子の状態とを格納し、
両者の値が一致した場合に、前記入力処理系命令の実行を許可する２度一致フィルタ機能を備えていることを特徴とする請求項２乃至５の何れかに記載のマイクロコンピュータ。
【請求項７】
前記ＣＰＵは、前記汎用レジスタにおけるビットの設定に応じて、前記２度一致フィルタ機能の実行可否を選択可能に構成されていることを特徴とする請求項６記載のマイクロコンピュータ。
【請求項８】
前記ＣＰＵは、前記周辺機能命令としてアウトプットコンペア命令を実行する場合、汎用レジスタにセットされるコンペア周期値及び出力レベル指定条件を取得し、
汎用レジスタに、アウトプット条件の成立毎に前記コンペア周期値を累算したコンペア値をセットし、
前記コンペア値と前記タイマカウンタの値とを比較して一致判断を行い、両者が一致すると（アウトプット条件成立）、前記指定条件に応じたレベルを出力端子より出力させると共に、成立フラグを汎用レジスタに格納することを特徴とする請求項１乃至７の何れかに記載のマイクロコンピュータ。
【請求項９】
前記ＣＰＵは、前記周辺機能命令として条件付アウトプット命令を実行する場合、汎用レジスタにセットされる出力レベル指定条件及び条件フラグを取得し、
前記条件フラグがセットされたことを認識すると、前記指定条件に応じたレベルを出力端子より出力させると共に、成立フラグを汎用レジスタに格納することを特徴とする請求項１乃至８の何れかに記載のマイクロコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のタスクを時分割並行処理可能であると共に、それらの内少なくとも１つのタスクは、命令アドレスの増分が一定となるようにしてループするプログラムが記述された特定タスクとなっているマイクロコンピュータに関する。
【背景技術】
【０００２】
ＣＰＵにＲＯＭ，ＲＡＭやその他の周辺機能などを加えて構成されるマイクロコンピュータを様々なユーザアプリケーションに適用する場合は、一般に、夫々のアプリケーションで要求される機能に応じてハードウエアを変更する必要があり、製品のバリエーションが多くなってしまうという問題がある。
そこで、周辺機能としての動作をソフトウエアによって実現する構成が考えられている。例えば、特許文献１には、１つのＣＰＵにおいて２つのタスク（Ａ，Ｌ）を時分割並行的に処理し、Ｌタスクでは分岐命令の実行を禁止して固定ループ化することで、プログラムカウンタの値をタイマとして使用したり、Ａタスクの暴走監視処理を行なわせるようにしたマイクロコンピュータが開示されている。
【０００３】
しかしながら、特許文献１のマイコンにおいて、例えば、特定の入力端子のレベル変化に応じてタイマ値を取得する、所謂「インプットキャプチャ」機能や、シリアル通信といったようなより複雑な周辺機能を実現しようとすると、プログラムサイズが非常に大きくなってしまうという問題がある。
また、特許文献２には、マイクロコンピュータが実行する命令機能を拡張するため、プログラムに記述されているターゲット命令の直前にプリフィックス命令を配置するようにして、そのプリフィックス命令にセットするフラグの状態に応じて前記ターゲット命令の機能を拡張するようにした構成が開示されている。
【特許文献１】特開平６−２５０８５７号公報
【特許文献２】特開２００４−３８５２１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献２の技術では、命令機能を拡張するためには必ずプリフィックス命令を挿入する必要があるため、やはりプログラムサイズが増加してしまう。
本発明は上記事情に鑑みてなされたものであり、その目的は、プログラムサイズの増加を極力抑制した上で、多様な周辺機能をソフトウエアによって実現することができるマイクロコンピュータを提供することにある。
【課題を解決するための手段】
【０００５】
請求項１記載のマイクロコンピュータによれば、ＣＰＵは、特定タスクに記述されている周辺機能命令を１命令として実行処理可能に構成されている。そして、オペランドで指定されている汎用レジスタより周辺機能命令の実行に要する情報を取得する共に、当該命令の実行結果に関する情報を汎用レジスタに格納する。従って、周辺機能をソフトウエアによって実現するためのプログラムの記述が極めて簡単になり、プログラムサイズを小さくすることができる。また、汎用レジスタのビットは、ＣＰＵに通常用意されている命令によって操作可能であるから、周辺機能命令を実行させるために、プリフィックス命令のような特殊な命令を別途用意する必要がない。尚、ここで言う「周辺機能をソフトウエアによって実現する」とは、本発明のマイクロコンピュータにおけるＣＰＵの内部構成であるハードウエアと、当該ＣＰＵが実行するプログラムとの協働によって周辺機能を実現することを示す。
【０００６】
請求項２記載のマイクロコンピュータによれば、ＣＰＵは、インプットキャプチャ命令を実行する場合、タイマ値を取得する条件となる入力端子のエッジ指定情報を汎用レジスタより取得する。そして、汎用レジスタに格納される、前回サンプリングした入力端子のレベルと、当該入力端子の現在のレベルとを比較すれば取得条件（エッジの立上がり，立下りなど）の成立を判定することができ、条件成立時に取得したタイマカウンタの値をキャプチャ値として格納すると共に、インプットキャプチャが成立したことを示すフラグを格納する。従って、予め通常命令によって汎用レジスタにエッジ指定情報をセットした後、インプットキャプチャ命令を実行することで、ソフトウエアによってインプットキャプチャ機能を実現することができる。
【０００７】
請求項３記載のマイクロコンピュータによれば、ＣＰＵは、サンプリングコンペア命令を実行する場合、汎用レジスタにセットされるコンペア周期値を取得する。また、汎用レジスタには、サンプリングタイミング毎にコンペア周期値を累積加算したデータをコンペア値として格納し、そのコンペア値とタイマカウンタ値とが一致した場合に、サンプリング結果及び成立フラグを汎用レジスタに格納する。従って、予め通常命令によって汎用レジスタにコンペア周期値をセットした後サンプリングコンペア命令を実行することで、ソフトウエアによってサンプリングコンペア機能を実現できる。
【０００８】
請求項４記載のマイクロコンピュータによれば、ＣＰＵは、インプットコンペアセット命令を実行する場合、汎用レジスタにセットされるコンペア周期値及びコンペアセット条件となる入力端子のエッジ指定情報を取得する。そして、コンペアセット条件が成立すると、その時点のタイマカウンタの値にコンペア周期値を加算した値をコンペア値として汎用レジスタに格納すると共に成立フラグを格納する。従って、予め通常命令によって汎用レジスタにコンペア周期値及びエッジ指定情報をセットした後インプットコンペアセット命令を実行することで、ソフトウエアによってインプットコンペアセット機能を実現できる。
【０００９】
請求項５記載のマイクロコンピュータによれば、ＣＰＵは、条件付サンプリング命令を実行する場合、汎用レジスタに条件フラグがセットされたか否か判断する。そして、条件フラグのセットを認識すると、汎用レジスタにサンプリング結果及び成立フラグを格納する。従って、特定タスクを実行している間に所定の条件が成立した場合に、通常命令によって汎用レジスタに条件フラグをセットすることで、ソフトウエアによって条件付サンプリング機能を実現できる。
【００１０】
請求項６記載のマイクロコンピュータによれば、ＣＰＵは、入力処理系の命令を実行する場合、汎用レジスタに前回の入力端子の状態と今回の入力端子の状態とを格納して、両者の値が一致した場合に、前記入力処理系命令の実行を許可する２度一致フィルタ機能を備える。ここで言う「入力処理系の命令」とは、請求項２乃至５における「インプットキャプチャ命令」，「サンプリングコンペア命令」，「インプットコンペアセット命令」，「条件付サンプリング命令」を示す。従って、入力信号又はデータの状態が安定したことを確認した段階で、入力処理系命令を実行することができる。
請求項７記載のマイクロコンピュータによれば、ＣＰＵは、汎用レジスタにおけるビットの設定に応じて２度一致フィルタ機能の実行可否を選択可能に構成されるので、当該フィル多機能の要否を、ユーザのアプリケーションに応じて選択することができる。
【００１１】
請求項８記載のマイクロコンピュータによれば、ＣＰＵは、アウトプットコンペア命令を実行する場合、汎用レジスタにセットされるコンペア周期値及び出力レベル指定条件を取得する。また、汎用レジスタには、サンプリングコンペア命令の場合と同様に、コンペア周期値が累積加算されたデータをコンペア値として格納し、そのコンペア値とタイマカウンタ値とが一致すれば、指定されたレベルを出力端子より出力すると共に成立フラグを汎用レジスタに格納する。従って、予め通常命令によって汎用レジスタにコンペア周期値をセットした後アウトプットコンペア命令を実行することで、ソフトウエアによってアウトプットコンペア機能を実現できる。
【００１２】
請求項９記載のマイクロコンピュータによれば、ＣＰＵは、条件付アウトプット命令を実行する場合、汎用レジスタにセットされる出力レベル指定条件を取得する。また、汎用レジスタに条件フラグがセットされたか否かを判断する。そして、条件フラグのセットを認識すると、前記指定条件に応じたレベルを出力端子に出力させると共に汎用レジスタに成立フラグを格納する。従って、予め通常命令によって汎用レジスタに出力レベル指定条件をセットした後、特定タスクを実行している間に所定の条件が成立した場合、通常命令によって汎用レジスタに条件フラグをセットすれば、ソフトウエアによって条件付アウトプット機能を実現できる。
【発明を実施するための最良の形態】
【００１３】
以下、本発明の一実施例について図面を参照して説明する。図１は、マイクロコンピュータ１０の構成を示す機能ブロック図である。マイクロコンピュータ１０は、ＣＰＵ１１と、ＲＯＭにより構成されたプログラムメモリ１２と、ＲＡＭにより構成されたデータメモリ１３と、Ｉ／Ｏブロック１４（入出力ピン）と、後述するＣＰＵ切替信号（クロック信号）を発生するタイミングジェネレータ（図示せず）と、データを送受信するデータバス１５と、アドレス信号を送受信するアドレスバス１６と、リード信号とライト信号をそれぞれ送受信するコントロールバス１７，１８とを備えている。
上記ＣＰＵ１１は、例えば、２種類のタスク（Ｌタスク，Ａタスク）を時分割で並行にパイプライン処理するため２つのアドレスレジスタ１９，２０と２つの演算レジスタ２１，２２を備え、これらアドレスレジスタ１９，２０と演算レジスタ２１，２２をＣＰＵ切替信号により交互に切り替えることで、見掛上、２つのＣＰＵを交互に切り替えて動作させるように機能する。
【００１４】
この場合、一方のアドレスレジスタ１９と演算レジスタ２１がＣＰＵ０用（Ｌタスク用）のレジスタとなり、他方のアドレスレジスタ２０と演算レジスタ２２がＣＰＵ１用（Ａタスク用）のレジスタとなる。これらアドレスレジスタ１９，２０の切替えに応じてプログラムカウンタ２３の値（次にフェッチする命令のアドレス）が更新され、このプログラムカウンタ２３からＣＰＵ０用（Ｌタスク用）とＣＰＵ１用（Ａタスク用）のアドレス信号が交互にプログラムメモリ１２に出力される。
【００１５】
また、ＣＰＵ１１内には、プログラムメモリ１２から読み込まれた命令の属するタスクの種類を判別してそのエラーを検出するエラー検出手段たるエラー検出回路２４と、このエラー検出回路２４を通過した命令をデコード（解読）する命令デコーダ・命令シーケンサ２５が設けられ、この命令デコーダ・命令シーケンサ（以下、単に命令デコーダと称す）２５によりデコードした命令の内容に応じて、演算器２６（ＡＬＵ）で演算レジスタ２１，２２を用いて演算したり、リード信号又はライト信号をコントロールバス１７，１８に出力するようになっている。
【００１６】
一方、プログラムメモリ１２内には、ＣＰＵ０用（Ｌタスク用）のプログラム領域２７と、ＣＰＵ１用（Ａタスク用）のプログラム領域２８と、テーブル即値データ領域２９とが設けられている。この場合、ＣＰＵ０用のプログラム領域２７に格納されたＬタスクは、プログラム暴走に至る危険性のある分岐命令が禁止された固定ループ化されたプログラムで構成されている。これにより、Ｌタスクのプログラムの実行時には０番地から２バイト命令アクセスで実行を開始し、２番地，４番地，６番地，…と順々に命令を実行していき、その後、所定番地まで行くと、プログラムカウンタ２３がオーバーフローして０番地に戻り、以後、上述した番地順の命令実行を繰り返すようになる。また、このＬタスクは、命令が全て１ワード（２バイト）命令に固定されている。
【００１７】
Ｌタスク（特定タスク）は、シーケンス制御の処理を行うのに適し、そのプログラム中に、Ａタスクの暴走監視用のルーチンと、システムのフェイルセーフを成立させるためのバックアップシーケンス用のルーチンが含まれている。更に、このＬタスクは、固定ループ動作によるタイマとしての機能も備え、例えばインクリメント命令又はデクリメント命令を実行させてそのカウント値が所定の設定値に達したときに、Ａタスクの処理に割込みを発生させることでタイマ割込みと等価な定時間処理が可能となっている。
一方、Ａタスクは、Ｌタスクで禁止されている分岐命令も許容されており、例えば複雑な解析処理・数値処理に適している。このＡタスクについても、Ｌタスクと同じく、命令が全て１ワード命令に固定されている。このＡタスクとＬタスクは、１ワード内にオペコードとオペランド（アドレス）の両方が割り付けられている。
【００１８】
次に、上記構成のマイクロコンピュータ採用しているパイプライン制御方式について図２に基づいて説明する。このパイプラインは、例えば、命令フェッチ，命令デコード，命令実行の各ステージからなる３段のパイプラインとして構成され、全命令がこの３段のパイプラインで遅滞なく処理できるように設計されている。各ステージはそれぞれ１サイクルで実行され、３サイクルで１命令を実行するようになっているが、３段のパイプラインにより３つの命令を並行処理することで、見掛上、１命令を１サイクルで実行するのと等価となっている。
【００１９】
１サイクル（各ステージ）の時間は、ＣＰＵ切替信号（クロック信号）により規定されている。このＣＰＵ切替信号は、ローレベルの時間ＴLoとハイレベルの時間ＴHiとが同一であり、ローレベル期間でＣＰＵ０（Ｌタスク）の命令フェッチを行い、ハイレベル期間でＣＰＵ１（Ａタスク）の命令フェッチを行うことにより、ＣＰＵ０（Ｌタスク）とＣＰＵ１（Ａタスク）の両プログラムを１：１の時分割比で並行にパイプライン処理するようになっている。
更に、ＣＰＵ１がＡタスクのプログラムに含まれる分岐命令をフェッチしたときには、当該分岐命令が含まれるＡタスクの次の命令フェッチステージで分岐先アドレスの命令をフェッチするために、命令デコードステージで分岐先アドレスをセットするように構成されている。また、図２では、パイプライン処理中に、ＣＰＵ１のＹ＋１番地の命令が分岐命令（ＪＭＰ）である場合の処理タイミングが示されている。
【００２０】
ＣＰＵ１１は、プログラムカウンタ２３に異なる命令アドレスを順次セットするための複数のアドレスレジスタと１９，２０と、命令デコーダ２５によってデコードされた命令を、演算器２６に順次セットするための複数の演算レジスタ（命令レジスタ）２１，２２とを備え、前記複数のアドレスレジスタ１９，２０及び複数の演算レジスタ２１，２２を順次切替えることで、プログラムメモリ１２に記憶されている複数のプログラム２７，２８をパイプライン処理可能に構成されている。
【００２１】
また、ＣＰＵ１１の命令セットとして、後述する「周辺機能命令」が用意されている。この「周辺機能命令」とは、従来はＣＰＵ１１の外部に構成されたハードウエアを利用して実現していた処理を、ＣＰＵ１１がＬタスクにおいてソフトウエア的に処理するために用意された命令である。そして、命令デコーダ２５及び演算器２６は、周辺機能命令を、パイプライン処理の実行ステージにおいて１サイクルで実行するように構成されている。
【００２２】
汎用レジスタ３０は、通常は例えばＣＰＵ１１の周辺回路に対してロード命令が実行された場合に、データバス１５を介して読み出されたデータが格納されるものである。本実施例の汎用レジスタ３０は、命令デコーダ２５が命令のデコード動作を行なった結果、当該命令が「周辺機能命令」であった場合、一部のビットに入力端子３１の入力信号レベルが格納されたり、或いは、一部のビットに設定されたデータに応じた信号を、出力端子３２を介して出力することが可能となるように構成されている。また、汎用レジスタ３０とプログラムカウンタ２３との間で、データの転送も可能となっている。尚、実際には、汎用レジスタ３０，入力端子３１，出力端子３２は夫々複数存在するが、図示の都合上図１では夫々１つだけ示している。
【００２３】
次に、本実施例の作用について図３乃至図１５も参照して説明する。以降に示す図３乃至図８は、何れもＣＰＵ１１が周辺機能命令を実行した場合における（ａ）汎用レジスタ３０における各ビットの設定状態、（ｂ）命令デコーダ２５又は演算器２６において、パイプライン処理の実行ステージにおいて１サイクルで（ハードウエアにより）実行される処理の内容をＣ言語で表現したもの、（ｃ）実行形態の一例を示すタイミングチャート、である。
【００２４】
＜インプットキャプチャ命令＞
図３はインプットキャプチャ命令に関する内容を示す。インプットキャプチャ機能は、特定のトリガ信号が与えられたタイミングでフリーランカウンタのカウント値を読み込むものである。例えば、入力端子の信号エッジ間の時間を計測する際や、単なるエッジ検出にも使用される。本実施例では、ＣＰＵ１１がＬタスクにおいて記述されたインプットキャプチャ命令を実行する場合は、プログラムカウンタ２３のカウント値をタイマカウンタとして使用することで、ＣＰＵ１１の内部でソフトウエア的に処理する。
尚、ここで「ソフトウエア的に処理する」とは、ＣＰＵ１１の外部に設けられたハードウエアを利用して行う処理に対して、ＣＰＵ１１の内部において完結する処理を意味する。即ち、ＣＰＵ１１の内部ロジックなどが動作する部分も含めて「ソフトウエア的」と称している。
【００２５】
図３（ａ）に示すように、インプットキャプチャ命令が実行される場合、汎用レジスタ３０の１つであるレジスタＲｍの各ビットは、以下のように割り当てが行なわれる。
ビット
１５  ：現在の入力端子の状態（レベル）
１４  ：前回の入力端子の状態（レベル）
１３  ：入力端子のサンプリング値（レベル）
１１  ：２度一致フィルタ許可／禁止
１０，９：入力端子の信号エッジ指定
８  ：インプットキャプチャ成立フラグ
７〜０：キャプチャ値
尚、これらのうち、ビット１１における２度一致フィルタの許可／禁止や、ビット１０，９における入力端子の信号エッジ指定は、Ａタスク側に記述されているロード命令によって予めレジスタＲｍにセットされ、インプットキャプチャ命令では、オペランドでレジスタＲｍを指定する。
【００２６】
そして、インプットキャプチャ命令は、実行ステージにおいて図３（ｂ）に示すような処理内容が実行される。尚、図３（ｂ）に示す手順がプログラム的に１ステップずつ実行されるわけではなく、インプットキャプチャ命令が実行される場合に、これらの処理が命令デコーダ２５または演算器２６のロジックにより１サイクルで実行される。
即ち、ビット１３で２度一致フィルタ許可が設定されている場合、ビット１５，１４の排他的論理和が成立し両者が不一致であれば、ビット１５の内容がビット１４に転送される。両者が一致した場合も、同様にその時点のビット１５の内容がビット１４に転送される。また、フィルタ禁止が設定されている場合は、最初の不一致判定を行うことなくビット１５の内容がビット１４に転送される。それから、入力端子３１のエッジ判定を行う。
【００２７】
エッジ判定は、現時点の入力端子３１のレベルであるビット１５と、前回同じ命令が実行された場合の入力端子３１のレベルがサンプリング値として格納されているビット１３とが比較され、両者が一致していれば入力レベルの変化がなくエッジは検出されず、ビット１５の内容をビット１３に転送して終了する。
一方、ビット１５，１３が不一致であれば入力端子３１のレベルが変化してエッジが検出されたことになる。この場合、ビット１０，９で指定されたエッジの条件（立上がり，立下り，何れかのエッジ）が成立しているかどうかを判断し、当該条件が成立していればプログラムカウンタ２３の値をレジスタＲｍのビット７：０に格納すると共に、ビット８に成立フラグを立てて処理を終了する。尚、各入力端子３１の指定は、デフォルトで固定であっても、例えば、他の汎用命令を使用して指定可能としても良い。
【００２８】
ここで、上記のインプットキャプチャ機能を、ＣＰＵ１１の外部に回路を設けて実現することを想定すると、一般に、以下のような回路が必要となる。
（１）フリーランタイマ
（２）フリーランタイマのカウント値を格納するキャプチャレジスタ
（３）トリガとするエッジの指定や、２度一致フィルタの有無を選択するため
のコントロールレジスタ
これに対して、本実施例では、（１）はプログラムカウンタ２３が対応し、（２）及び（３）はレジスタＲｍが対応することで、ハードウエアとしてはＣＰＵ１１単体でインプットキャプチャ機能を実現している。
【００２９】
＜サンプリングコンペア命令＞
図４はサンプリングコンペア命令に関する内容を示す。サンプリングコンペア機能は、指定されたサンプリング周期が経過する毎に入力端子３１のレベルをサンプリングするものである。この場合も、プログラムカウンタ２３のカウント値をタイマカウンタとして使用する。
【００３０】
図４（ａ）に示すように、サンプリングコンペア命令が実行される場合、汎用レジスタ３０におけるレジスタＲｍ，Ｒｎの各ビットは、以下のように割り当てが行なわれる。
レジスタＲｍ  ビット
１５  ：現在の入力端子の状態（レベル）
１４  ：前回の入力端子の状態（レベル）
１３  ：入力端子のサンプリング値（レベル）
１２  ：サンプリング結果（１ビットの場合）
１１  ：２度一致フィルタ許可／禁止
１０，９：サンプリングの指定
８  ：サンプリングコンペア成立フラグ
７〜０：コンペア値
レジスタＲｎ  ビット
１５〜８  ：サンプリング結果（１バイトの場合）
７〜０  ：コンペア周期
【００３１】
そして、サンプリングコンペア命令は、図４（ｂ）に示すような処理内容が実行される。２度一致フィルタに関する処理は、ビット１５，１４が不一致であれば、ビット１５の内容をビット１４に転送する。両者が一致した場合、若しくはフィルタ禁止が設定されている場合は、ビット１５の内容がビット１４，１３に夫々転送される。それから、プログラムカウンタ２３のカウント値がレジスタＲｍのビット７：０以上となった場合、即ちコンペア周期Δｔが経過すると、レジスタＲｎのビット７：０がレジスタＲｍのビット７：０に加算されて次回のコンペア値がセットされる。そして、ビット８に成立フラグを立てると、レジスタＲｍのビット１０，９で指定された態様に応じてサンプリングを行う。サンプリング指定は、例えば以下のように設定される。
ビット１０，９    サンプリング態様
００    １ビット
０１    不履行
１０    １バイト（左シフト）
１１    １バイト（右シフト）
尚、左シフトはＭＳＢファーストに対応し、レジスタＲｎを１ビットずつ左シフトさせながら、レジスタＲｍのビット１３をレジスタＲｎのビット８側から格納する。また、右シフトはＬＳＢファーストに対応しており、レジスタＲｎを１ビットずつ右シフトさせながら、レジスタＲｍのビット１３をレジスタＲｎのビット１５側から格納する。
【００３２】
＜アウトプットコンペア命令＞
図５はアウトプットコンペア命令に関する内容を示す。アウトプットコンペア機能は、指定されたコンペア周期が経過する毎に出力端子より出力を行うものである。例えば、ＰＷＭ信号の出力や、マイクロコンピュータ１０がスリープモードに移行した場合に、その移行している時間を計測するためのスリープタイマに連動して信号の出力を行う場合などに使用される。この場合も、プログラムカウンタ２３のカウント値をタイマカウンタとして使用する。
【００３３】
図５（ａ）に示すように、アウトプットコンペア命令が実行される場合、汎用レジスタ３０におけるレジスタＲｍ，Ｒｎの各ビットは、以下のように割り当てが行なわれる。
レジスタＲｍ  ビット
１５  ：出力端子のレベル設定
１１〜９：出力レベルの指定
８  ：アウトプットコンペア成立フラグ
７〜０：コンペア値
レジスタＲｎ  ビット
１５〜８  ：出力データ（１バイトの場合）
７〜０  ：コンペア周期
【００３４】
尚、出力指定及びコンペア周期は、アウトプットコンペア命令の実行前に他の命令によりセットされる。そして、アウトプットコンペア命令は、以下のように実行される。まず、プログラムカウンタ２３のカウント値がレジスタＲｍのビット７：０以上となった場合、即ちコンペア周期Δｔが経過すると、レジスタＲｎのビット７：０がレジスタＲｍのビット７：０に加算されて次回のコンペア値がセットされる。それから、ビット８に成立フラグを立てると、レジスタＲｍのビット１１〜９で指定された態様に応じて出力を行う。出力レベル指定は、例えば以下のように設定される。
ビット１１〜９    サンプリング態様
０００    出力なし
００１    「Ｌ」出力
０１０    「Ｈ」出力
０１１    現在のレベルの反転
１００    出力なし
１０１    出力なし
１１０    １バイト出力（右シフト）
１１１    １バイト出力（左シフト）
尚、１バイト出力の右シフトはＬＳＢファーストに対応し、レジスタＲｎのビット８をレジスタＲｍのビット１５に格納すると、レジスタＲｎのビット１５〜８を１ビット右シフトさせる。また、１バイト出力の左シフトはＭＳＢファーストに対応しており、レジスタＲｎのビット１５をレジスタＲｍのビット１５に格納すると、レジスタＲｎのビット１５〜８を１ビット左シフトさせる。
【００３５】
＜インプットコンペアセット命令＞
図６はインプットコンペアセット命令に関する内容を示す。インプットコンペアセット機能は、入力端子３１の指定されたエッジを検出した場合に、コンペア値をセットするものである。この場合も、プログラムカウンタ２３のカウント値をタイマカウンタとして使用する。尚、２度一致フィルタに関する処理は、インプットキャプチャ命令の場合と同様である。
【００３６】
図６（ａ）に示すように、インプットコンペアセット命令が実行される場合、汎用レジスタ３０におけるレジスタＲｍ，Ｒｎの各ビットは以下のように割り当てが行なわれる。
レジスタＲｍ  ビット
１５  ：現在の入力端子の状態（レベル）
１４  ：前回の入力端子の状態（レベル）
１３  ：入力端子のサンプリング値（レベル）
１１  ：２度一致フィルタ許可／禁止
１０，９：エッジの指定
８  ：インプットコンペアセット成立フラグ
７〜０：コンペアセット値
レジスタＲｎ  ビット
７〜０：コンペア値
尚、エッジの指定及びコンペアセット値は、インプットコンペアセット命令の実行前に他の通常命令によりセットされる。そして、インプットコンペアセット命令は、以下のように実行される。尚、２度一致フィルタに関する処理はインプットキャプチャ命令等と同様であるから省略する。まず、ビット１５の内容がビット１４に夫々転送される。それから、インプットキャプチャ命令の場合と同様に入力端子３１についてエッジ判定が行われ、エッジが検出され且つエッジ条件が成立すると、プログラムカウンタ２３のカウント値にレジスタＲｍのビット７：０を加算した値をレジスタＲｎのビット７：０にセットする。そして、ビット８に成立フラグを立てる。このインプットコンペアセット命令は、図６（ｃ）に示すように、例えば信号の立下りエッジを検出した時点にコンペアセット値Δｔをセットする場合などに使用する。
【００３７】
＜条件付サンプリング命令＞
図７は条件付サンプリング命令に関する内容を示す。条件付サンプリング機能は、何らかの処理の結果により条件フラグがセットされた場合に入力端子３１のレベルをサンプリングするものである。図７（ａ）に示すように、条件付サンプリング命令が実行される場合、レジスタＲｍの各ビットには、以下のように割り当てが行なわれる。
ビット
１５  ：現在の入力端子の状態（レベル）
１４  ：前回の入力端子の状態
１３  ：入力端子のサンプリング値（レベル）
１２  ：サンプリング結果（１ビット）
１１  ：２度一致フィルタ許可／禁止
１０，９：サンプリング指定
８  ：条件付サンプリング成立フラグ
７〜０：サンプリング結果（１ビット）
また、レジスタＲｎのビット８には条件フラグが格納される。そして、図７（ｂ）に示すように、条件フラグがセットされると２度一致フィルタ処理と共にサンプリング処理を行ない、条件フラグがセットされていなければ２度一致フィルタ処理だけを実行する。尚、何れの場合も、フィルタ処理はフィルタ許可フラグがセットされている場合に行われることは上述と同様である。
【００３８】
サンプリング処理については、レジスタＲｍのビット８に成立フラグを立てると、サンプリングコンペア命令と同様のサンプリング指定に応じてサンプリングを行う。但し、１バイトサンプリングの場合、サンプリング結果はレジスタＲｍのビット７〜０に格納される。図７（ｃ）は、例えばある入力端子３１の立下がりエッジが検出されたことを条件としてサンプリングを行なう場合を示している。
【００３９】
＜条件付アウトプット命令＞
図８は条件付アウトプット命令に関する内容を示す。条件付アウトプット機能は、何らかの処理の結果により条件フラグがセットされた場合に、指定されたレベルを出力端子より出力するものである。図８（ａ）に示すように、条件付アウトプット命令が実行される場合、レジスタＲｍの各ビットには、以下のように割り当てが行なわれる。
レジスタＲｍ  ビット
１５  ：出力端子のレベル設定
１１〜９：出力レベルの指定
８  ：アウトプットコンペア成立フラグ
７〜０：出力値（１バイト）
また、レジスタＲｎのビット８には条件フラグが格納される。そして、条件付アウトプット命令は、レジスタＲｎのビット８に条件フラグがセットされると、図８（ｂ）に示すような処理内容として実行される。まず、レジスタＲｍのビット８に成立フラグを立てると、アウトプットコンペア命令と同様のアウトプット指定に応じて出力端子３２より出力を行う。但し、１バイト出力の場合、レジスタＲｍのビット１５にはビット７〜０にセットされたデータが１ビットずつシフトされながら与えられる。図８（ｃ）は、例えばある入力端子３１の立上がりエッジが検出されたことを条件として反転出力，出力無し，反転出力を行なう場合を示している。
【００４０】
［ケーススタディ：ＣＳＭＡ／ＣＤ，受信］
次に、図９乃至図１５は、以上に説明した周辺機能命令（ペリフェラル命令）を使用してより具体的な機能の実現を図る例を示す。図９はＬＡＮにおいて利用される通信方式の１つであるＣＳＭＡ／ＣＤ方式について、受信側の機能を実現する場合を示す。実現する機能は、以下のようになる。
（１）受信データＲｘの立下りを検出すると、
その時点からΔｔ２後に受信データＲｘをサンプリング
（２）（１）のサンプリング結果においてエッジが検出されなければ、更にΔｔ１（１ビット周期）後に受信データＲｘをサンプリングし、エッジが検出されれば（衝突検出）更にΔｔ２後に受信データＲｘをサンプリング（ビット同期）
ビット同期は、以下のように行なう。
前回の受信データ  ：０  →  立下りエッジで同期
前回の受信データ  ：１  →  立上りエッジで同期
ドミナント「０」送信中  →  立下りエッジで同期
ドミナント「１」送信中  →  立上りエッジで同期
上記機能は、
＜インプットコンペアセット命令＞
（１）受信データＲｘのエッジが検出されるとサンプリングタイミングをΔｔ２に変更
＜サンプリングコンペア命令＞
（２）Δｔ１毎に受信データＲｘをサンプリング
によって実現することができる。
【００４１】
［ケーススタディ：ＣＳＭＡ／ＣＤ，送信］
図１０はＣＳＭＡ／ＣＤ方式における送信側の機能を実現するものである。機能の内容は、以下のようになる。
（１）一定周期（Δｔ１）毎に送信データを出力
（２）受信データレベルが変化してエッジを検出すると送信データを出力
これらの機能は、
＜アウトプットコンペア命令＞
（１）一定周期（Δｔ１）毎に送信データを出力端子より出力。
＜インプットコンペアセット命令＞
（２ａ）受信データＲｘのエッジを検出
この場合、当該命令の実行結果によりレジスタＲｍのビット８に成立フラグがセットされると、そのビット８の内容をレジスタＲｎのビット８に転送する。
＜条件付アウトプット命令＞
（２ｂ）上記エッジの検出により、送信データを出力端子より出力
これらの周辺機能命令によって実現することができる。
【００４２】
［ケーススタディ：イベントタイマ］
図１１は、イベントタイマ機能を実現するものである。この機能は、
（１）入力端子３１において信号エッジを検出
（２）エッジ検出からΔｔ後に入力端子３１のレベルをサンプリング
であり、周辺機能命令によっては、
＜インプットコンペアセット命令＞
（１）入力端子３１の信号エッジを検出してコンペア周期Δｔを設定
＜サンプリングコンペア命令＞
（２）コンペア周期Δｔ経過時に入力端子３１のレベルをサンプリング
で実現できる。
【００４３】
［ケーススタディ：ポートサンプリング］
図１２は、ポートサンプリング機能である。この機能は、
（１）任意のタイミングで、出力端子より信号を出力
（２）上記出力端子の信号エッジを検出すると、Δｔ後に入力端子３１をサンプリング
である。また、サンプリングポートは、例えば「３２」の内から選択可能である。これらの機能は、
＜アウトプットコンペア命令＞
（１）所定のカウント値にプログラムカウンタ２３が一致すると、出力端子３２（PSMOUT）より信号出力
＜インプットコンペアセット命令＞
（２ａ）上記出力端子３２のエッジ検出により、コンペア周期を設定
（２ｂ）上記コンペア周期にプログラムカウンタ２３が一致すると、入力端子３１をサンプリング
で実現することができる。
【００４４】
［ケーススタディ：クロック同期シリアル］
図１３は、クロック同期シリアル通信機能を実現する場合を示す。この通信機能は、以下のようになる。
（１）シリアルクロックＳＣＬＫの立下りエッジ検出で出力端子３２（ＳＯＵＴ）より信号出力（送信）
（２）ＳＣＬＫの立上りエッジ検出で入力端子３１（ＳＩＮ）をサンプリング（受信）
また、その他の機能として、外部クロック／内部クロック，ＬＳＢ／ＭＳＢファースト，クロック極性の選択や、オーバーランエラーの検出などがある。
【００４５】
上記（１），（２）の機能は、周辺機能命令によって以下のように実現される。
＜インプットキャプチャ命令＞
（１ａ）ＳＣＬＫのエッジ（立下り，立上がり）を検出
＜条件付アウトプット命令＞
（１ｂ）上記エッジ（立下り）の検出により、送信データを出力端子３２より出力
＜条件付サンプリング命令＞
（２）上記エッジ（立上がり）の検出により、入力端子３１をサンプリング
【００４６】
［ケーススタディ：ＵＡＲＴ］
図１４は、ＵＡＲＴ通信機能を実現する場合である。この通信機能は
（１）エッジ検出（立下り，スタートビット検出）からΔｔ後に入力端子３１をサンプリング
（２）その後、（Δｔ×２）毎に入力端子３１をサンプリング（受信）
（３）または（Δｔ×２）毎に出力端子３２よりデータ出力（送信）
その他、オーバーランエラー、フレーミングエラー、パリティエラーの検出などを行なう。
【００４７】
上記（１）〜（３）の機能は、周辺機能命令によって以下のように実現される。
＜インプットコンペアセット命令＞
（１）端子の信号エッジ（立上がり）を検出し、コンペア周期Δｔを設定
＜サンプリングコンペア命令＞
（２）プログラムカウンタが一致した場合に、入力端子３１をサンプリング
＜アウトプットコンペア命令＞
（３）プログラムカウンタが一致した場合に（周期：Δｔ×２）、出力端子３２よりデータ出力
【００４８】
［ケーススタディ：ＬＩＮ］
図１５は、車内ＬＡＮの一種であるＬＩＮにおいて、通信開始時に行うビット同期機能を実現する場合を示す。この機能は、以下のようになる。
（１）ＳＹＮＣＨ  ＢＲＥＡＫのロウレベル期間がΔｔ１に達したことを計測すると、通信開始を認識
（２）ＳＹＮＣＨ  ＦＩＥＬＤにおいて、送信されるクロック周期（立下りエッジ間）Δｔ２を計測し、ビットレートを調整（４周期分計測し、「８」で除す）
上記（１），（２）の機能は、周辺機能命令によって以下のように実現される。
＜インプットキャプチャ命令＞
入力端子３１のエッジを検出してプログラムカウンタ２３のカウント値を取得する。その他の処理は、通常命令で実現可能である。
【００４９】
即ち、以上のように、複数の方式が異なる通信機能をソフトウエアによって実現することができるので、マイクロコンピュータ１０は、夫々の通信機能を実現する場合に対応して通信インターフェイス用のＬＳＩを搭載する必要がなくなる。従って、マイクロコンピュータ１０の汎用性を高めることが可能となる。
【００５０】
以上のように本実施例によれば、マイクロコンピュータ１０のＣＰＵ１１を、Ｌタスクに記述されている周辺機能命令を１命令として実行処理可能に構成する。そして、ＣＰＵ１１は、オペランドで指定されている汎用レジスタ３０より周辺機能命令の実行に要する情報を取得する共に、当該命令の実行結果に関する情報を汎用レジスタ３０に格納するようにした。従って、周辺機能をソフトウエアによって実現するためのプログラムの記述が極めて簡単になり、プログラムサイズを小さくすることができる。また、汎用レジスタ３０のビットはＣＰＵ１１に通常用意されている命令によって操作可能であるから、周辺機能命令を実行させるために、プリフィックス命令のような特殊な命令を別途用意する必要がない。
【００５１】
また、ＣＰＵ１１は、インプットキャプチャ命令を実行する場合、タイマ値の取得条件となる入力端子３１のエッジ指定情報を汎用レジスタ３０より取得し、汎用レジスタ３０に格納される入力端子３１の状態から取得条件の成立を判定し、その条件成立時に取得したプログラムカウンタ２３の値をキャプチャ値として格納すると共に成立フラグを格納する。従って、予め通常命令によって汎用レジスタ３０にエッジ指定情報をセットした後、インプットキャプチャ命令を実行することで、ソフトウエアによってインプットキャプチャ機能を実現することができる。
【００５２】
また、ＣＰＵ１１は、サンプリングコンペア命令を実行する場合、汎用レジスタ３０にセットされるコンペア周期値を取得し、また、汎用レジスタ３０に、サンプリングタイミング毎にコンペア周期値を累積加算したデータをコンペア値として格納する。そして、コンペア値とプログラムカウンタ２３の値とが一致した場合に、サンプリング結果及び成立フラグを汎用レジスタ３０に格納する。従って、予め通常命令によって汎用レジスタ３０にコンペア周期値をセットした後サンプリングコンペア命令を実行することで、ソフトウエアによってサンプリングコンペア機能を実現できる。
【００５３】
また、ＣＰＵ１１は、インプットコンペアセット命令を実行する場合、汎用レジスタ３０にセットされるコンペア周期値及びコンペアセット条件となる入力端子３１のエッジ指定情報を取得し、その条件が成立すると、その時点のプログラムカウンタ２３の値にコンペア周期値を加算した値をコンペア値として汎用レジスタ３０に格納すると共に成立フラグを格納する。従って、予め通常命令によって汎用レジスタ３０にコンペア周期値及びエッジ指定情報をセットした後インプットコンペアセット命令を実行することで、ソフトウエアによってインプットコンペアセット機能を実現できる。
【００５４】
また、ＣＰＵ１１は、条件付サンプリング命令を実行する場合、汎用レジスタ３０に条件フラグがセットされたか否か判断し、条件フラグのセットを認識すると、汎用レジスタ３０にサンプリング結果及び成立フラグを格納する。従って、Ｌタスクを実行している間に所定の条件が成立した場合に、通常命令によって汎用レジスタ３０に条件フラグをセットすることで、ソフトウエアによって条件付サンプリング機能を実現できる。
【００５５】
また、ＣＰＵ１１は、入力処理系の命令であるインプットキャプチャ命令，サンプリングコンペア命令，インプットコンペアセット命令，条件付サンプリング命令を実行する場合、汎用レジスタ３０に前回と今回の入力端子３１の状態を格納して、両者の値が一致した場合に入力処理系命令の実行を許可する２度一致フィルタ機能を備えるので、入力信号又はデータの状態が安定したことを確認した段階で、入力処理系命令を実行することができる。そして、ＣＰＵ１１は、汎用レジスタ３０におけるビットの設定に応じて２度一致フィルタ機能の実行可否を選択可能に構成されるので、当該フィル多機能の要否を、ユーザのアプリケーションに応じて選択することができる。
【００５６】
また、ＣＰＵ１１は、アウトプットコンペア命令を実行する場合、汎用レジスタ３０にセットされるコンペア周期値及び出力レベル指定条件を取得し、また、汎用レジスタ３０には、サンプリングコンペア命令の場合と同様のコンペア値を格納し、そのコンペア値とプログラムカウンタ２３値とが一致すれば指定されたレベルを出力端子より出力すると共に成立フラグを汎用レジスタ３０に格納するようにした。従って、予め通常命令によって汎用レジスタ３０にコンペア周期値をセットした後アウトプットコンペア命令を実行することで、ソフトウエアによってアウトプットコンペア機能を実現できる。
【００５７】
また、ＣＰＵ１１は、条件付アウトプット命令を実行する場合、汎用レジスタ３０にセットされる出力レベル指定条件を取得し、汎用レジスタ３０に条件フラグがセットされたか否かを判断する。そして、条件フラグのセットを認識すると、前記指定条件に応じたレベルを出力端子に出力させると共に汎用レジスタ３０に成立フラグを格納する。従って、予め通常命令によって汎用レジスタ３０に出力レベル指定条件をセットした後、特定タスクを実行している間に所定の条件が成立した場合に、通常命令によって汎用レジスタ３０に条件フラグをセットすれば、ソフトウエアによって条件付アウトプット機能を実現できる。
【００５８】
本発明は上記し又は図面に記載した実施例にのみ限定されるものではなく、以下のような変形が可能である。
２度一致フィルタの実行可否を設定する機能は必要に応じて設ければ良く、また、２度一致フィルタ自体の機能も必要に応じて設ければ良い。
ＣＰＵが時分割並行的に処理するタスクの数は、３つ以上あっても良い。
周辺機能命令は、マイクロコンピュータの仕様に応じて必要なものを適宜選択して実現すれば良い。
【図面の簡単な説明】
【００５９】
【図１】本発明の一実施例であり、マイクロコンピュータの構成を示す機能ブロック図
【図２】マイクロコンピュータがＡタスク,Ｌタスクを時分割並行処理する状態を示すタイミングチャート
【図３】インプットキャプチャ命令について、（ａ）汎用レジスタにおける各ビットの設定状態、（ｂ）パイプライン処理の実行ステージにおいて実行される処理の内容をＣ言語で表現したもの、（ｃ）実行形態の一例を示すタイミングチャート
【図４】サンプリングコンペア命令についての図３相当図
【図５】アウトプットコンペア命令についての図３相当図
【図６】インプットコンペアセット命令についての図３相当図
【図７】条件付サンプリング命令についての図３相当図
【図８】条件付アウトプット命令についての図３相当図
【図９】ＣＳＭＡ／ＣＤ通信方式について、受信側の機能を周辺機能命令によって実現する場合を示す図
【図１０】同送信側の機能についての図９相当図
【図１１】イベントタイマ機能についての図９相当図
【図１２】ポートサンプリング機能についての図９相当図
【図１３】クロック同期シリアル通信機能についての図９相当図
【図１４】ＵＡＲＴ通信機能についての図９相当図
【図１５】ＬＩＮの通信開始時に行うビット同期機能を実現する場合の図９相当図
【符号の説明】
【００６０】
図面中、１０はマイクロコンピュータ、１１はＣＰＵ、２３はプログラムカウンタ、３０は汎用レジスタ、３１は入力端子、３２は出力端子を示す。
【図１】
2006195910.tif 000003
【図２】
2006195910.tif 000004
【図３】
2006195910.tif 000005
【図４】
2006195910.tif 000006
【図５】
2006195910.tif 000007
【図６】
2006195910.tif 000008
【図７】
2006195910.tif 000009
【図８】
2006195910.tif 000010
【図９】
2006195910.tif 000011
【図１０】
2006195910.tif 000012
【図１１】
2006195910.tif 000013
【図１２】
2006195910.tif 000014
【図１３】
2006195910.tif 000015
【図１４】
2006195910.tif 000016
【図１５】
2006195910.tif 000017