(57)【要約】【課題】  割込み処理を１サイクルもずれることなく実行することが可能なマイクロコンピュータを提供する。【解決手段】  ＣＰＵ２によって実行される割込み処理プログラム２０を、その先頭から実質的な割込み処理を開始する命令の直前までに、複数のｎｏｐ命令を配置するように記述しておく。ＣＰＵ２の実行部８は、特殊命令を実行した場合、その実行時間が一般命令の実行時間を上回る時間に応じて割込み保留信号を外部に出力する。割込み制御部１０は、割込み要求が発生した時点で実行部８より割込み保留信号が出力されていると、その信号の出力期間に応じて、割込み処理プログラム２０に対する命令のフェッチアドレス値を増加させる。【選択図】  図１
2006236215.tif 000002
【特許請求の範囲】
【請求項１】
制御プログラムが記憶されているメモリと、
このメモリよりフェッチした命令をデコードするデコード部と、このデコード部によってデコードされた命令を実行する実行部と、割込みを制御する割込み制御部とを備えるＣＰＵとで構成され、
前記制御プログラムの一部である割込み処理プログラムは、その先頭から実質的な割込み処理を開始する命令の直前までに１つ以上のｎｏｐ命令を配置するように記述されており、
前記ＣＰＵの実行部は、一般命令よりも実行時間が長い特殊命令を実行した場合に、後者の実行時間が前者を上回る時間に応じて割込み保留信号を外部に出力するように構成され、
前記割込み制御部は、割込み要求が発生した時点で前記割込み保留信号が出力されていると、当該信号の出力期間に応じて、前記割込み処理プログラムに対する命令のフェッチアドレス値を増加させるように構成されていることを特徴とするマイクロコンピュータ。
【請求項２】
前記割込み制御部は、前記割込み保留信号の出力期間をカウントするカウンタを備え、前記カウンタのカウント値に応じて、前記フェッチアドレスの増分値を設定するように構成されていることを特徴とする請求項１記載のマイクロコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御プログラムが記憶されているメモリと、このメモリよりフェッチした命令をデコードして実行するＣＰＵとで構成されるマイクロコンピュータに関する。
【背景技術】
【０００２】
マイクロコンピュータにおいては、割込み処理を利用して定時的（タイムコンスタント）な処理を行なうアプリケーションがある。例えば、通信処理などでは通信速度の定時制を確保するため専用の通信制御ブロックを実装している。ここで、本発明の発明者らは、通信制御ブロックの変わりに、タイマ割込み処理とソフト処理により通信を実現することを想定した。このようにすれば、通信制御ブロックを実装する必要が無く、マイコンを低コストで構成することができる。
【０００３】
しかし、この場合、上述した定時処理をどのように実現するかが問題となる。即ち、タイマ割込みを１サイクルのずれも無く実行する必要がある。１サイクルでもずれると、通信速度誤差として影響がでることになる。ところが、ＣＰＵが実行する様々な命令には実行時間が異なるものがあるため、実行時間がより長い命令を実行している途中で割込み要求が発生すると、割り込み処理の開始が保留される場合がある。
即ち、図８（ａ）に示すように、例えば全ての命令が１サイクルで実行されており、プログラムカウンタの値（命令フェッチアドレス）が「１」ずつ増加している場合に割込み要求が発生すると、その割込みは保留されずに直ちに割込み処理がその先頭アドレス「２００」より開始される。これに対して、図８（ｂ）に示すように、実行時間が２サイクルの命令が実行されている途中に割込み要求が発生すると、その割込みは１サイクル分保留されるため割込み処理の開始タイミングが遅れてしまう。
【０００４】
例えば、特許文献１には、通常処理（ユーザプログラム実行処理，Ｉ／Ｏリフレッシュ処理）をサイクリックに実行すると共に予め定められた周期で割込みトリガを発生させ、その割込みトリガの発生タイミングでユーザプログラム実行処理を中断して、周辺サービス処理を規定の分量だけ実行するようにしたプログラマブルコントローラが開示されている。
【特許文献１】特開２００１−２６５４１２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１に開示されている技術では、割込み処理が保留されている場合には周辺サービス処理の実行開始タイミングがずれることは避けられない。即ち、特許文献１では、実行開始タイミングが１サイクルずれることを防止するというような厳密な時間管理を行うことは想定していないと思われる。
本発明は上記事情に鑑みてなされたものであり、その目的は、タイマの割込み処理を１サイクルもずれることなく行なうことが可能なマイクロコンピュータを提供することにある。
【課題を解決するための手段】
【０００６】
請求項１記載のマイクロコンピュータによれば、ＣＰＵによって実行される割込み処理プログラムを、その先頭から実質的な割込み処理を開始する命令の直前までに、１つ以上のｎｏｐ命令を配置するように記述しておく。そして、ＣＰＵの実行部は、特殊命令を実行した場合に、その実行時間が一般命令の実行時間を上回る時間に応じて割込み保留信号を外部に出力する。すると、割込み制御部は、割込み要求が発生した時点でＣＰＵの実行部より割込み保留信号が出力されていると、その信号の出力期間に応じて、割込み処理プログラムに対する命令のフェッチアドレス値を増加させる。
【０００７】
即ち、発生した割込み要求の処理が保留されなかった場合、割込み要求が発生した時点から割込み処理が開始されるまでの時間は、割込み処理プログラムの先頭からｎｏｐ命令が配置されている数に応じて決定される。そして、ＣＰＵが特殊命令を実行している場合に割込み要求が発生してその処理が保留された場合は、割込み制御部が保留された期間に応じて命令フェッチアドレスを増加させるので、その増加分だけｎｏｐ命令の実行がパスされる。
その結果、割込み要求の発生時点から割込み処理の開始時点までの時間は、当該処理が保留されなかった場合と保留された場合とで同一になる。従って、割り込み処理の定時性がサイクルベースで確保されるようになる。
【０００８】
請求項２記載のマイクロコンピュータによれば、割込み制御部は、割込み保留信号の出力期間をカウンタによってカウントし、そのカウント値に応じて、フェッチアドレスの増分値を設定する。従って、割込み処理が保留される時間が一定でない場合でも、割り込み処理の定時性を容易に確保することができる。
【発明を実施するための最良の形態】
【０００９】
（第１実施例）
以下、本発明の第１実施例について図１乃至図４を参照して説明する。図１は、本発明のマイクロコンピュータ（マイコン）１の構成を、要旨にかかる部分のみ概略的に示す機能ブロック図である。マイコン１は、ＣＰＵ２，プログラムメモリ３,データメモリ４,周辺回路５や割込みコントローラ１１などによって構成されている。
ＣＰＵ２は、その内部に、プログラムカウンタ（ＰＣ）６，プログラムメモリ３よりフェッチした命令をデコードする命令デコード部（ＩＤＥＣ）７，デコードされた命令を実行する実行部（ＥＸＥ）８，レジスタファイル９，割込み制御部１０等を備えている。実行部８は、命令の実行において分岐条件が成立した場合に、ＣＰＵ２内部の他の機能部が参照可能な分岐条件成立信号をアクティブにすると共に、分岐先のアドレス（分岐アドレス）を出力する。また、実行部８は、実行している命令の長さが２サイクル以上となる特殊命令の場合は、同様に他の機能部が参照可能な割込み保留信号をアクティブ（ハイ）にするようになっている。
【００１０】
割込み制御部１０は、マルチプレクサ１２，加算器１３，マルチプレクサ１４，加算器１５，マルチプレクサ１６，割込み保留カウンタ１７で構成される。割込みコントローラ１１は、ＣＰＵ２の外部の周辺回路５が発生する割込み要求を受付けてＣＰＵ２に割込み信号を出力する。そして、ＣＰＵ２側より割込み許可信号が与えられると、割込み要因に応じた割込みベクタ（アドレス）を発生させてＣＰＵ２に出力する。即ち、ここでの周辺回路５とは、例えばタイマ等の割込み要求の発生元を示している。マルチプレクサ１２は、通常はその割込みベクタを選択して出力しており、分岐条件成立信号がアクティブになった場合は実行部８より与えられる分岐アドレスを選択して出力する。
【００１１】
加算器１３は、プログラムカウンタ６を「１」ずつインクリメントするために使用されている。即ち、ＣＰＵ２が実行する一般命令のサイズは１ワード＝１バイトであるものとする。マルチプレクサ１４は、通常はプログラムカウンタ６の出力アドレスを選択して出力し、分岐条件が成立した場合（ここでは割込み要求の発生を含む）マルチプレクサ１２を介して出力される分岐アドレス（割込みベクタを含む）を選択して出力する。
【００１２】
加算器１５は、マルチプレクサ１４を介して出力されるアドレスに、割込み保留カウンタ１７によってカウントされるカウント値を加算してマルチプレクサ１６に出力する。マルチプレクサ１６は、通常はマルチプレクサ１４側を選択しており、割込み保留信号がアクティブになると加算器１５側を選択し、プログラムメモリ３に対する命令フェッチアドレスとして出力する。また、割込み保留カウンタ１７は、実行部８によって出力される割込み保留信号がアクティブになっている期間を、ＣＰＵ２の命令実行基本サイクルを決定するクロック信号によって（但し、その位相を９０度以内で遅延させたもの）カウントするようになっている。
【００１３】
プログラムメモリ３には、制御プログラムとしての初期処理プログラム（ＩＮＩＴＩＡＬ）１８，メインプログラム（ＭＡＩＮ）１９，割込み処理プログラム（ＩＮＴ）２０などが記憶されている。ここで、割込み処理プログラム２０は、例えば図２（ｂ）に示すように記述されている。即ち、割込み処理プログラム２０の先頭アドレスが「２００」であるとすると、割込み処理が実質的に開始される（スタック処理の開始）アドレスは「２０４」となっている。そして、アドレス「２００」〜「２０３」には、ｎｏｐ（No Operation）命令が配置されている。
【００１４】
次に、本実施例の作用について図２乃至図４も参照して説明する。図２（ａ）は、ＣＰＵ２が制御プログラムを実行する流れを概略的に示すフローチャートである。ＣＰＵ２は、リセットが解除されて起動すると先ず初期処理プログラム１８を実行し、それから、メインプログラム１９を実行する。そして、メインプログラム１９の実行中に割込み要求が発生すると、割込み処理プログラム２０に分岐して当該プログラム２０を実行し、その実行が終了するとメインプログラム１９にリターンする。
【００１５】
図３（ａ）は、図８（ａ）相当図である。メインプログラム１９の大部分は、実行時間が１サイクルである一般命令によって記述されている。そして、一般命令の実行中に割込み要求が発生し、ＣＰＵ２が割込み処理を許可すると、割込みコントローラ１１は割込みベクタ「２００」を出力する。そのベクタアドレスはマルチプレクサ１２を介してマルチプレクサ１４に与えられる。マルチプレクサ１４はマルチプレクサ１２側を選択し、マルチプレクサ１６はマルチプレクサ１４側を選択する。従って、マルチプレクサ１６は、フェッチアドレスとして「２００」を出力する。
この場合、割込み要求は保留されることなく、直ちにメインプログラム１９から割込み処理プログラム２０に分岐して割込み処理が実行される。すると、割込み要求の発生から、割込み処理が実質的に開始される（アドレス「２０４」）までの期間は４サイクルとなる。その４サイクルの間はｎｏｐ命令が実行される。尚、ＣＰＵ２に対して出力される割込み信号はクロック同期化されており、割込み要求はＣＰＵ２によりサイクルの開始時点で認識されるようになっている。
【００１６】
一方、図３（ｂ）は、図８（ｂ）相当図である。メインプログラム１９の一部には、実行時間が２サイクル以上となる特殊命令も記述されている。例えば、実行時間が１サイクルの命令が１ワード命令であるとすると、実行時間が２サイクルの特殊命令は２ワード命令である。そして、本実施例では、実行部８において実行時間が２サイクルの特殊命令が実行された場合、実行部８は、割込み保留信号を１サイクルに相当する期間だけアクティブにする。すると、割込み保留カウンタ１７は、そのアクティブ期間に応じた「１」をカウントして加算器１５に出力する。
【００１７】
この特殊命令の実行中に割込み要求が発生すると、割込みコントローラ１１は図３（ａ）のケースと同様に割込みベクタ「２００」を出力し、マルチプレクサ１６は加算器１５側を選択しているので、マルチプレクサ１６は、フェッチアドレスとして「２００＋１＝２０１」を出力する。そして、特殊命令が２サイクルに亘って実行されたため割込み処理は１サイクル保留されることになり、メインプログラム１９から割込み処理プログラム２０に分岐する。すると、この場合も、割込み要求の発生から割込み処理が実質的に開始されるまでの期間は４サイクルとなり、図３（ａ）のケースと同様になる。
【００１８】
また、図４は、実行時間が３サイクルとなる特殊命令の実行中に割込み処理要求が発生した場合を示す。この場合、実行部８は、割込み保留信号を２サイクルに相当する期間だけアクティブにする。すると、割込み保留カウンタ１７は、そのアクティブ期間に応じた「２」をカウントして加算器１５に出力する。そして、この特殊命令の実行中に割込み要求が発生すると、割込みコントローラ１１は割込みベクタ「２００」を出力しているので、マルチプレクサ１６は、フェッチアドレスとして「２００＋２＝２０２」を出力する。そして、特殊命令が３サイクルに亘って実行されたため割込み処理は２サイクル保留された後、メインプログラム１９から割込み処理プログラム２０に分岐する。すると、この場合も、割込み要求の発生から割込み処理が実質的に開始されるまでの期間は４サイクルとなり、図３（ａ）のケースと同様になる。
【００１９】
以上のように本実施例によれば、ＣＰＵ２によって実行される割込み処理プログラム２０を、その先頭から実質的な割込み処理を開始する命令の直前までに、複数のｎｏｐ命令を配置するように記述しておき、ＣＰＵ２の実行部８は、特殊命令を実行した場合に、その実行時間が一般命令の実行時間を上回る時間に応じて割込み保留信号を外部に出力する。割込み制御部１０は、割込み要求が発生した時点で実行部８より割込み保留信号が出力されていると、その信号の出力期間に応じて、割込み処理プログラム２０に対する命令のフェッチアドレス値を増加させるようにした。従って、割り込み処理の定時性が確保されるようになり、１サイクルのずれもなく実行することが可能となり、通信制御ブロックを使わずともタイマ割込みとソフト処理によって通信機能を実現することができるためマイクロコンピュータ１のサイズを小型化することができる。
また、割込み制御部１０は、割込み保留信号の出力期間を保留カウンタ１７によってカウントし、そのカウント値に応じてフェッチアドレスの増分値を設定するので、割込み処理が保留される時間が一定でない場合でも、割り込み処理の定時性を容易に確保することができる。
【００２０】
（第２実施例）
図５乃至図７は本発明の第２実施例を示すものであり、第１実施例と同一部分には同一符号を付して説明を省略し、以下異なる部分についてのみ説明する。第２実施例のマイコン１Ａでは、使用される特殊命令は実行時間が２サイクルのものに限定されている場合に対応した構成であり、第１実施例のマイコン１より割り込み保留カウンタ１７が取り除かれている。そして、加算器１５の一方には、割込みベクタのアドレス増分「１」が固定的に与えられている。
また、割込み処理プログラム１９Ａは、図６に示すように、先頭アドレス「２００」にのみｎｏｐ命令が配置されており、次のアドレス「２０１」より実質的な割込み処理が開始されるように記述されている。
【００２１】
次に、第２実施例の作用について図７も参照して説明する。第２実施例では、図７（ａ）に示すように、一般命令の実行中に割込み要求が発生しその要求処理がＣＰＵ２Ａにより許可されると、割込みコントローラ１１は第１実施例と同様に割込みベクタ「２００」を出力し、マルチプレクサ１６は、フェッチアドレスとして「２００」を出力する。この場合、割込み要求は保留されず、直ちにメインプログラム１９から割込み処理プログラム２０Ａに分岐して割込み処理が実行される。すると、割込み要求の発生から、割込み処理が実質的に開始される（アドレス「２０１」）までの期間は１サイクルとなる。
【００２２】
一方、図７（ｂ）に示すように、実行部８において実行時間が２サイクルの特殊命令が実行された場合、実行部８は、割込み保留信号を１サイクルに相当する期間だけアクティブにする。すると、マルチプレクサ１６は加算器１５側を選択するので、マルチプレクサ１６は、フェッチアドレスとして「２００＋１＝２０１」を出力する。そして、割込み処理は１サイクル保留されて、メインプログラム１９から割込み処理プログラム２０Ａに分岐する。すると、この場合も割込み要求の発生から割込み処理が実質的に開始されるまでの期間は１サイクルとなり、図７（ａ）のケースと同様になる。
以上のように第２実施例によれば、一般命令と特殊命令との実行時間差が固定的（この場合、１サイクル）である場合、第１実施例で使用した保留カウンタ１７は不要となるので、マイコン１Ａの構成をより簡単にすることができる。
【００２３】
本発明は上記し又は図面に記載した実施例にのみ限定されるものではなく、以下のような変形が可能である。
ＣＰＵが実行する一般命令の実行期間は１サイクルに限ることなく、２サイクル以上であっても良く、特殊命令の実行期間は、その一般命令の実行期間よりも長いものであれば良い。
ＣＰＵが実行する命令のサイズは、１バイトに限ることなく２バイトや４バイト、或いはそれ以上であっても良い。例えば、命令サイズが４バイトの場合は、加算器１３に与えるアドレスの増分を「４」とする。また、割込み保留カウンタ１７のカウント増分も、４バイトの一般命令の実行時間が１サイクルであれば「４」に設定すれば良い。
【図面の簡単な説明】
【００２４】
【図１】本発明の第１実施例であり、マイクロコンピュータの構成を要旨にかかる部分のみ概略的に示す機能ブロック図
【図２】（ａ）はＣＰＵが制御プログラムを実行する流れを概略的に示すフローチャート、（ｂ）は割込み処理プログラムの記述例を示す図
【図３】（ａ）は一般命令の実行中に割込み要求が発生した場合、（ｂ）は実行時間が２サイクルの特殊命令の実行中に割込み要求が発生した場合を示すタイミングチャート
【図４】実行時間が３サイクルの特殊命令の実行中に関する図３（ｂ）相当図
【図５】本発明の第２実施例を示す図１相当図
【図６】図２（ｂ）相当図
【図７】図３相当図
【図８】従来技術を示す図３相当図
【符号の説明】
【００２５】
図面中、１，１Ａはマイクロコンピュータ、２，２ＡはＣＰＵ、３，３Ａはプログラムメモリ、６はプログラムカウンタ、７は命令デコード部、８は実行部、１０，１０Ａは割込み制御部、１７は割込み保留カウンタを示す。
【図１】
2006236215.tif 000003
【図２】
2006236215.tif 000004
【図３】
2006236215.tif 000005
【図４】
2006236215.tif 000006
【図５】
2006236215.tif 000007
【図６】
2006236215.tif 000008
【図７】
2006236215.tif 000009
【図８】
2006236215.tif 000010