(57)【特許請求の範囲】
【請求項１】
命令を実行しかつ割込み要求に応答するプロセッサおよび複数のモジュールの各々に結合された割込み要求ライン上に割込み要求を生成することのできる前記複数のモジュールから成るマイクロコンピュータにおいて、割込みのアービトレーションおよび割込みベクトルの決定を行う方法であって：
前記プロセッサが命令の実行を継続する間、
（ｉ）前記複数のモジュールの各々に結合された、少なくとも１本を含むアービトレーション・バス上に割込みに関連する情報のみを転送する段階、
（ii）前記アービトレーション・バス上の前記複数のモジュールの少なくとも２つから、ビット・シリアルの形で、前記複数のモジュールの少なくとも２つの各々の割込み優先番号を示すマルチビットの割込み優先番号信号を供給する段階、および
（iii）前記複数のモジュールへのポーリングをしないで、前記マルチビットの割込み優先番号信号に基づき、前記複数のモジュールの少なくとも２つのうちどちらがより高い割込み優先番号を有するかを決定する段階、
を達成する段階；
前記プロセッサに割込みをかける段階；
前記より高い割込み優先番号を前記プロセッサへ転送する段階；
割込みベクトルを決定するためにベクトル・テーブルに対して前記より高い割込み優先番号をオフセットとして用いる段階；および
前記割込みベクトルを用いて、割込みベクトルのサービス・ルーチンへ入る段階；
によって構成されることを特徴とする方法。
【請求項２】
命令を実行しかつ割込み要求に応答するプロセッサおよび割込み要求を生成することのできる複数のモジュールから成るマイクロコンピュータにおいて、割込みのアービトレーションおよび割込みベクトルの決定を行う方法であって、
前記複数のモジュールの各々に結合された、少なくとも１本を含むアービトレーション・バス上に割込みに関連する情報のみを転送する段階と、
前記アービトレーション・バス上の前記複数のモジュールの少なくとも２つから、ビット・シリアルの形で、前記複数のモジュールの少なくとも２つの各々の割込み優先番号を示すマルチビットの割込み優先番号信号を供給する段階と、
前記複数のモジュールへのポーリングをしないで、前記マルチビットの割込み優先番号信号に基づき、前記複数のモジュールの少なくとも２つのうちどちらがより高い割込み優先番号を有するかを決定する段階と、
割込みベクトルを決定するために前記アービトレーション・バス上で転送された前記より高い割り込み優先番号を使用する段階と、
によって構成されることを特徴とする方法。
【請求項３】
命令を実行しかつ割込み要求に応答するプロセッサおよび割込み要求を生成することのできる複数のモジュールから成るマイクロコンピュータにおいて、割込みのアービトレーションおよび割込みベクトルの決定を行う方法であって、
前記複数のモジュールの各々に結合された、少なくとも１本を含むアービトレーション・バス上に、割込みに関連する情報を転送する段階と、
前記アービトレーション・バス上の前記複数のモジュールの少なくとも２つから、ビット・シリアルの形で、前記複数のモジュールの少なくとも２つの各々の割込み優先番号を示すマルチビットの割込み優先番号信号を供給する段階と、
前記複数のモジュールへのポーリングをしないで、前記マルチビットの割込み優先番号信号に基づき、前記複数のモジュールの少なくとも２つのうちどちらがより高い割込み優先番号を有するかを決定する段階と、
割込みベクトルを決定するために前記アービトレーション・バス上で転送された前記より高い割り込み優先番号を使用する段階と、
によって構成されることを特徴とする方法。
【発明の詳細な説明】
発明の分野
本発明は、マイクロコンピュータおける改善された割込み動作の方法に関し、さらに詳しくは、CPUの動作時間とメイン・バス上の時間とを必要とせずに、マイクロコンピュータにおいて割込みを要求するモジュール間のアービトレーションを行なう方法に関する。
発明の背景
一般に、マイクロコンピュータにはマイクロプロセッサまたは中央演算装置（CPU）と複数のモジュールとが含まれ、これらは単一チップまたは複数のチップでチップ化されており、メイン・バスにより互いに接続されている。このメイン・バスはアドレス・ラインとデータ・ラインとから成る。メイン・バスは、すべてのモジュールにより時分割で使用される。モジュールが高速レスポンスを必要とする場合、割込みとして知られる信号をCPUに送る。割込みは、CPUにその主プログラムまたは動作の実行を停止させ、割込みを生じさせたモジュールが必要とする特定のプログラムへCPUジャンプさせる。記翻的に、メイン・バスの制御は、割込み中のモジュールにシフトされると言われる。割込みには、システムに対する重要度および要求されるアクションの緊急度に応じて、さまざまな優先度がある。
一般に、割込みは、割込み要求信号を割込み要求ラインに印加するモジュールによって起こされ、この割込み要求ラインはCPUに接続されている。割込み要求が検出されると、CPUはメイン・バスを用いて割込み肯定応答シーケンス（interrupt acknowledge sequence）を開始する。この肯定応答シーケンスでは、モジュールをポーリングして、どのモジュールが割込みを要求したのかを判定し、要求を出したモジュールの優先度を判定する。割込み中のモジュールのうち少なくとも１つのモジュールの優先度がCPUによって実行中の動作の優先度よりも高い場合、CPUは割込み肯定応答信号を割込み中のモジュールに送出し、現行動作からの動作情報をスタックあるいは保存する。ここで大きな問題は、割込み肯定応答シーケンス中にCPUおよびメイン・バスが占有され、貴重な時間が消費されることである。
発明の概要
本発明の目的は、マイクロプロセッサ内のCPUに割込みを行なう新規の改善された方法を提供することである。
本発明の他の目的は、マイクロプロセッサにおいてより効率的な割込みシーケンスを行なうことである。
さらに本発明の目的は、割込み肯定応答シーケンスに対してメイン・バスおよび追加のCPU時間を使用せずに、マイクロプロセッサの割込みを行なう新規の改善された方法を提供することである。
また、本発明の目的は、相互接続を減少させ、システムへのモジュールの追加を簡単にする改善されたマイクロプロセッサを提供することである。
これらおよびその他の目的は、CPUとデータ・ラインおよびアドレス・ラインから成るメイン・バスによってCPUに動作可能に接続された複数のモジュールとを有するマイクロプロセッサに割込みを行なう方法によって実現される。この方法は、CPUと複数のモジュールのそれぞれにと接続された少なくとも１つのラインから成るアービトレーション・バスを設ける段階,CPUからアービトレーション・バスに現行動作の優先レベルを示す割込み優先レベル信号を供給する段階，割込み要求中のモジュールからアービトレーションバスに割込み要求中のモジュールの優先レベルを示す割込み優先レベル信号を供給する段階およびCPUと割込み要求モジュールのうち優先度のもっとも高いものからメイン・バスを制御する段階から成る。CPUはアービトレーション・バス上で割込み要求中のモジュールとアービトレーションを直接行なうので、割込み肯定応答または割込み肯定応答シーケンスは必要ない。
【図面の簡単な説明】
第１図は、本発明を具現するマイクロプロセッサの概略ブロック図である。
第２図は、本発明を具現するマイクロプロセッサの具体的な実施例を示す第１図と同様なブロック図である。
第３図は、第２図のマイクロプロセッサからの割込みレジスタを示す図である。
第４図は、第２図のマイクロプロセッサにおける割込みサイクルを示すタイミング図である。
好適な実施例の説明
第１図において、本発明を具現するマイクロプロセッサ10の概略ブロック図を示す。マイクロプロセッサ10は、CPU12とNo.1からNo.nまでの複数のモジュールとから成る。複数のモジュールのそれぞれは、一般的なデータ・ラインとアドレス・ラインとを有するメイン・バス（図示せず）を介してCPUに結合され、通常動作中にCPU12に割込みを行なうことができる。当技術分野で周知のように、割込み中に、その割込みを行なうモジュールはメイン・バスに対する制御を引き受け、アドレスおよびデータが割込み中のモジュールとCPU12との間でやり取りされる。
また、マイクロプロセッサ10において、CPU12および複数のモジュールは割込み要求ライン14と少なくとも１つのラインから成るシリアル・アービトレーション・バス16とによって接続されている。割込み要求は、割込み要求ライン14を介してCUP12に送られ、その割込みのための一切のアービトレーションはシリアル・アービトレーションバス16上で本発明による新規な方法を用いて実現され、メイン・バスを使用せずに済み、また割込み肯定応答シーケンスは必要ない。
第２図において、マイクロプロセッサ10の具体的な実施例20に示す。マイクロプロセッサ20は、CPU22,スレーブ・モジュール24および外部バス・インタフェース（EBI）26から成る。この外部バス・インタフェース26は、メイン・バス（図示せず）を介してさまざまな外部モジュールをCPU12に結合させるために用いられる。また、CPU22,スレーブ・モジュール24およびEBI26は、割込み要求ラインIRQおよび一対の割込みアービトレーション・ライン（シリアル・アービトレーション・バス）IARB0,IARB1を介して結合されている。本実施例では、シリアル・アービトレーション・バスにおいて２つのラインを用いることにより、以下で説明するようにラインIARB0,IARB1のプリチャージを行なう。
スレーブ・モジュール24は８ビットの割込みレジスタ34を有し、EBI26は８ビットの割込みレジスタ36を有する。これらのレジスタの内容は、第３図に示すように２つのフィールドに分割される。割込みレジスタ34,36の最下位の６ビットには、関連モジュールの割込み番号または割込み要求ソースが入る。割込み番号は、残りすべての割込み要求ソースに対する該当ソースの割込み優先度を示す。この値が高ければ高いほど、優先度も高くなる。割込み番号は、２つ以上の割込み要求が同時に発生した場合のみに用いられる。本実施例では、割込み番号はユーザによるプログラムが可能であるが、例えば、割込み要求を起こしているチャンネルの番号に応じて自動的に構成させることもできる。割込みレジスタ34,36の最上位の２ビットは、割込み方式に対する拡張として使用され、要求されるフレキシビリティに応じて、固定でもプログラム可能でもよい。この最上位の２ビットは、さらに４つの割込み優先レベルを与える。割込みレジスタ（両フィールド）におけるこの８ビットの番号を、ここではアービトレーション番号と呼ぶ。また、割込み要求がCPU22によって認識されると仮定すると、割込みレジスタ34,36の８ビットを用いて、CPUベクトルも判定する。割込みレジスタの考えられるそれぞれの値に対応して、全部で256のCPU割込みベクトルが可能である。割込みベクトルは当業者には周知であり、ここでは詳しく説明しない。
CPU22は、割込みマスク・レジスタ38を有し、これは基本的に割込みレジスタ34,36と同じである。割込みマスク・レジスタ38には、最上位の２ビットにCPU22の現行動作の割込みレベルが常に入る。最下位の６ビットは常にゼロである。割込みマスク・レジスタ38は、アービトレーション方式においてCPU22によって以下のように用いられる。明らかなように、割込みレジスタ34,36や割込みマスク・レジスタ38のような１つ以上のレジスタにおける具体的なビット数やその番地は、本発明の特定の構成要件に適合させるため大幅に変えてもよい。
モジュールまたは割込みソースは、割込み信号を割込み要求ラインIRQに印加し、それにより割込みが要求されていることを知らせる。各モジュールまたはソースは、すでに進行中のアービトレーション・サイクルと干渉しないように、まず別のソースが現在要求を行なっていないことを調べてから、要求を行なわなければならない。もし２つ以上のソースが同時に割込みを要求すると、その２つ以上のソースとCPU22との間でアービトレーションが生じ、それ以外の場合には、１つの割込みソースとCPU22との間でのみアービトレーションが生じる。第４図は、割込みサイクルの典型的なタイミング図を示す。
割込みサイクルは、１つ以上のモジュールまたはソースによる割込み要求から始まる。割込み要求は、クロック信号（第４図参照）の立ち下がりで割込み要求ラインIRQをアクティブにすることにより通知される。割込み要求ラインIRQは、論理ワイヤードORラインであり、複数のモジュールが同時に割込みを要求することを可能にする。割込み要求ラインIRQをアクティブにする前に、割込み要求を行なうモジュールは、割込みアービトレーション・サイクルがすでに進行中であるかどうかを確認しなければならない。割込みアービトレーション・サイクルがすでに進行中であることは、割込み要求ラインIRQがすでにアクティブになっていることにより判断される。割込み要求ラインIRQを、プリチャージされる直前に、クロック信号の各立ち上がりでサンプリングして、この確認を行なう。割込みアービトレーションが進行中である場合、割込み要求中のモジュールは割込み要求ラインIRQがアクティブでなくなるまで待機しなければならず、この割込み要求ラインIRQがアクティブでなくなると、割込み要求中のモジュールは割込み要求を行ない、それぞれのモジュールが割込み要求ラインIRQをアクティブにする。その後、割込み要求ラインIRQは、割込みアービトレーション・サイクルが完了するまでアクティブに維持されなければならない。
割込み要求を検出すると、CPU22およびすべての割込み要求中のモジュールは、割込みアービトレーション・サイクルを即刻開始するが、CPU22は現行命令が完全に実行されるまでスタック動作を開始しない。本実施例では、２本のラインのビット・シリアル・アービトレーション方式と割込みを起こすことのできる各モジュールに対するプログラム可能な８ビットの番号（アービトレーション番号）とを用いて、アービトレーションが実行される。割込みアービトレーションの間、アービトレーション番号はビット・シリアル方式で駆動され、ラインIARB0とラインIARB1との間で交互に行ない、そのためプリチャージが可能になる。ラインIARB0,IARB1の性質により、アービトレーション番号の「１」ビットは、割込みアービトレーション期間中に対応する「Ｌ」レベルを発生させ、アービトレーション番号の最上位ビットが最初に生成される。論理ワイヤードORバスのため、「Ｌ」レベルが実質的に競合に勝つ。競合が検出されると、すなわち「Ｈ」に駆動し「Ｌ」を検出すると、アービトレーションに負けたモジュールは、割込みアービトレーション・ラインIARB0,IARB1上にそのアービトレーション番号を駆動することを即時停止しなければならない。割込みアービトレーション・サイクル終了時に、１つの割込みソースが残り、そのソースは「アービトレーションに勝った」という。CPU22は、この勝ったモジュールのアービトレーション番号を用いて、どこにベクトル化を行なうか判断する。最後のビットが送られた後、割込み要求ラインIRQ上の割込み要求は非アクティブにされ、次の割込みサイクルが行なえるようにする。
割込み番号フィールド（最下位の６ビット）は常にゼロに設定されるので、CPU22は割込み優先レベル・フィールドにおいて実質的に「アービトレーションに勝つ」ことを試みるにすぎない。CPU22が実際に勝つと、割込み要求中の割込みソースの優先レベルはそれほど高くなく、従って、その割込み要求中の割込みソースは、現行割込み要求サイクルが終了した時点で再度試みる必要がある。この割込み要求は、「マスク」されたという。CPU22がアービトレーションに負けると、要求中の割込みの優先レベルが十分高く、従って、CPU22は現行状態を保存するため、必要なスタック動作を即時開始することができる。この割込み要求は、マスクされていない。一般に、CPU22も割込み優先レベル・フィールドの値を増加させて、同一レベルで生じるそれ以上の割込みをマスクする。
特に第４図を参照して、各割込みサイクル中に生じる活動について以下で説明する。第４図では、斜線部はプリチャージを示し、網線部は現行割込みマスク・レベルを示す。
状態（IW）−これは、アイドル状態または「割込み待機」状態である。この状態は、割込みサイクルが発生していない限り、維持される。CPU22は、その現行割込みマスク・レベルの表示で、割込みアービトレーション・ラインIARB0,IARB1を駆動する。割込み要求を希望するモジュールが現行マスク・レベルが割込み要求レベルよりも低いと判断した場合、クロック信号の次の立ち上がりで割込み要求ラインIRQをアクティブにする。ただし、割込み要求ラインIRQがまだアクティブになっていないものとする。CPU22は、割込み要求信号をゲート信号として用いて、割込みアービトレーション・ラインIARB0,IARB1を駆動し、そのため割込み要求ラインIRQをアクティブにすることによりラインIARB0,IARB1を３状態にし、また割込み要求ラインIRQを非アクティブにすることによりラインIARB0,IARB1をCPU22で駆動させる。また、割込み要求ラインIRQをアクティブにすることは、EBI26が割込みサイクル中にプリチャージ・デューティを開始しなければならないことをEBI26に知らせる。また、この状態はリセット後に入るか、あるいは状態（I2）ないし状態（I9）中に被駆動ビット値とラインIARB0,IARB1上の生成ビット値との間の相違が検出されるとこの状態に入る。
状態（I1）−割込み要求モジュールは、割込み要求を非アクティブにしてもよいが、デバイスをEBI26内に維持するのでラインIRQ（RMB）上でアクティブ状態に維持される。この時点で、EBI26は割込みアービトレーション・ラインIARB0をプリチャージする。
状態（I2）−割込み要求モジュールは、その割込みレジスタのビットL1を割込みアービトレーション・ラインIARB0上に駆動する。EBI26は、ラインIARB1をプリチャージする。
状態（I3）−割込み要求モジュールは、その割込みレジスタのビットL0をラインIARB1上に駆動する。EBI26は、ラインIARB0をプリチャージする。
状態（I4）−割込み要求モジュールは、その割込みレジスタのビットN5をラインIARB0上に駆動する。EBI26は、ラインIARB1をプリチャージする。
状態（I5）−割込み要求モジュールは、その割込みレジスタのビットN4をラインIARB1上に駆動する。EBI26は、ラインIARB0をプリチャージする。
状態（I6）−割込み要求モジュールは、その割込みレジスタのビットN3をラインIARB0上に駆動する。EBI26は、ラインIARB1をプリチャージする。
状態（I7）−割込み要求モジュールは、その割込みレジスタのビットN2をラインIARB1上に駆動する。EBI26は、ラインIARB0をプリチャージする。
状態（I8）−割込み要求モジュールは、その割込みレジスタのビットN1をラインIARB0上に駆動する。EBI26は、ラインIARB1をプリチャージする。
状態（I9）−割込み要求モジュールは、その割込みレジスタのビットN0をラインIARB1上に駆動する。デバイスをEBI26内に維持することにより、ラインIARB0の先行レベルが維持される。
状態（I10）−デバイスをEBI26内に維持することにより、IARB0の先行レベルが維持される。割込み要求モジュールは、ラインIARB0,IARB1のいずれも駆動してはならない。
状態（I11）−EBI26がラインIRQをプリチャージする。これにより、ラインIRQは非アクティブになり、そのためCPU22はそのマスクレベルで再びラインIARB0,IARB1を駆動し始める。
状態（IW）−次の割込み要求に備えてこの状態に入る。
このように、上記の特定の実施例の割込み構造は、全部で128の割込みベクトルと４つの割込みレベルに対応可能である。各割込みソースには、ユーザにより、アービトレーション番号が割り付けられ、２つ以上のソースが同時に割込みを要求する場合に、このアービトレーション番号を用いてモジュールの相対的な優先度を判定する。このアービトレーション番号が高ければ高いほど、割込みソースの有効優先度も高くなる。その後、このアービトレーション番号をCPU22のベクトル・テーブルへのオフセットとして用いて、割込み処理ルーチンに直接入ることができ、そのためどのソースが割込みを行なったかを判定するのにすべてのソースをポーリングする必要がなくなる。すべての外部割込みソースは、EBI26を介して内部割込みソースとしてグループ化される。EBI26は、割込みソースの最大数を超えない限り、オペレータが選択する方法で、外部割込みをグループ化し、その優先度を決めて、外部割込みを解決することができる。
本構造および方法は、一般に割込みソースに対してCPUへの割込みに成功したかどうかを通知する「割込み肯定応答シーケンス」を完全に省略する。割込みソースは、割込み優先レベル・フィールドでアービトレーションに勝ったかどうかを判定することにより割込みに成功したかどうか判断することができる。また、個別の割込みアービトレーション・ラインと割込み要求ラインとを設けているので、割込みアービトレーション・サイクル全体はメイン・バスを使用せずに完了することができる。もちろん、シリアル・アービトレーション・バスは１本以上のラインでもよく、好適な実施例では２つのラインを示し、このラインのプリチャージを行なっている。ほとんどのMCUでは、割込みはネスティングされる。従って、電力を節約するため、モジュールが完全に割込み処理されると、CPUはシリアル・アービトレーション・バス上の割込みマスクを先行の割込みレベルまで落とすことができる。このように、モジュールはシリアル・アービトレーション・バスに割込み信号を供給し続けることがなく、従って電力が節約される。アービトレーション番号を用いて、モジュールにより高い優先レベルを与えることができ、かつ／またはMCU内の特定の機能を示すことができる。本発明は、チップ・レベルでもシステム・レベルでも利用することができ、シリアル・アービトレーション・バスと割込み要求ラインとを接続するだけで、モジュールを追加することができ、従って、相互接続を低減し、システムへのモジュールの追加を簡単にする。
シリアル・アービトレーション・ラインの活動を監視し、その活動の検出を割込み要求として利用することにより、割込み要求ラインを完全に削除することも可能であることに注目されたい。しかし、このシステムの欠点は、シリアル・アービトレーション・ラインが本当にアイドル状態である（データのビット・ストリームのなかにはアイドル・ラインに類似するものがある）ことを保証するためには、割込み要求中のソースが十分な時間待機しなければならないので、システムの待ち時間が長くなることである。
以上、本発明の具体的な実施例を説明してきたが、さらに修正あるいは改善することが可能であることが当業者には理解される。従って、本発明は上述の特定の例に限定されず、添付のクレームにおいて本発明の精神および範疇から逸脱することのない一切の変形を内包するものとする。
【図１】
0003553060.tif 000002
【図２】
0003553060.tif 000003
【図３】
0003553060.tif 000004
【図４】
0003553060.tif 000005