組み込みシステム-割り込み

割り込みは、ハードウェアまたはソフトウェアによって発行されるプロセッサへの信号であり、早急な対応が必要なイベントを示します。割り込みが発生するたびに、コントローラは現在の命令の実行を完了し、Interrupt Service Routine (ISR)または Interrupt Handler。ISRは、割り込みが発生したときに何をするかをプロセッサまたはコントローラに指示します。割り込みは、ハードウェア割り込みまたはソフトウェア割り込みのいずれかです。

ハードウェア割り込み

ハードウェア割り込みは、ディスクコントローラや外部周辺機器などの外部デバイスからプロセッサに送信される電子アラート信号です。たとえば、キーボードのキーを押したり、マウスを動かしたりすると、ハードウェア割り込みがトリガーされ、プロセッサがキーストロークまたはマウスの位置を読み取るようになります。

ソフトウェア割り込み

ソフトウェア割り込みは、例外的な状態、またはプロセッサによって実行されたときに割り込みを引き起こす命令セット内の特別な命令のいずれかによって引き起こされます。たとえば、プロセッサの算術論理演算装置が数値をゼロで除算するコマンドを実行すると、ゼロによる除算の例外が発生し、コンピュータは計算を中止するか、エラーメッセージを表示します。ソフトウェア割り込み命令は、サブルーチン呼び出しと同様に機能します。

ポーリングとは何ですか?

継続的な監視の状態は、 polling。マイクロコントローラは他のデバイスのステータスをチェックし続けます。その間、他の操作は行われず、監視のためにすべての処理時間を消費します。この問題は、割り込みを使用することで解決できます。

割り込み方式では、コントローラは割り込みが発生した場合にのみ応答します。したがって、コントローラは、インターフェイスされたデバイスおよび組み込みデバイスのステータス(フラグ、信号など)を定期的に監視する必要はありません。

v / sポーリングを中断します

これは、割り込みとポーリングを区別するアナロジーです。

割り込み ポーリング
割り込みは shopkeeper。サービスや製品が必要な場合、彼は彼のところに行き、彼に彼の必要性を知らせます。割り込みの場合、フラグまたは信号を受信すると、サービスが必要であることをコントローラに通知します。 ポーリング方法は salesperson。セールスマンは、製品やサービスの購入を要求している間、訪問販売を行っています。同様に、コントローラーはすべてのデバイスのフラグまたは信号を1つずつ監視し続け、サービスを必要とするコンポーネントにサービスを提供します。

割り込みサービスルーチン

割り込みごとに、割り込みサービスルーチン(ISR)が必要です。 interrupt handler。割り込みが発生すると、マイクロコントローラは割り込みサービスルーチンを実行します。割り込みごとに、その割り込みサービスルーチンISRのアドレスを保持するメモリ内の固定位置があります。ISRのアドレスを保持するために確保されているメモリ位置のテーブルは、割り込みベクタテーブルと呼ばれます。

割り込みベクタテーブル

8051のRESETを含む6つの割り込みがあります。

割り込み ROMの場所(16進数) ピン
割り込み ROMロケーション(HEX)
シリアルCOM(RIおよびTI) 0023
タイマー1割り込み(TF1) 001B
外部ハードウェア割り込み1(INT1) 0013 P3.3(13)
外部ハードウェア割り込み0(INT0) 0003 P3.2(12)
タイマー0(TF0) 000B
リセット 0000 9
  • リセットピンがアクティブになると、8051はアドレス位置0000にジャンプします。これはパワーアップリセットです。

  • タイマー用に2つの割り込みが確保されています。1つはタイマー0用、もう1つはタイマー1用です。割り込みベクタテーブルのメモリ位置は、それぞれ000BHと001BHです。

  • ハードウェア外部割り込み用に2つの割り込みが確保されています。ピン番号 12およびピン番号 ポート3の13は、それぞれ外部ハードウェア割り込みINT0およびINT1用です。メモリ位置は、割り込みベクタテーブルでそれぞれ0003Hと0013Hです。

  • シリアル通信には、受信と送信の両方に属する単一の割り込みがあります。メモリ位置0023Hはこの割り込みに属します。

割り込みを実行する手順

割り込みがアクティブになると、マイクロコントローラは次の手順を実行します。

  • マイクロコントローラは、現在実行中の命令を閉じ、次の命令(PC)のアドレスをスタックに保存します。

  • また、すべての割り込みの現在のステータスを内部的に(つまり、スタック上ではなく)保存します。

  • 割り込みサービスルーチンのアドレスを保持する割り込みベクタテーブルのメモリ位置にジャンプします。

  • マイクロコントローラは、割り込みベクタテーブルからISRのアドレスを取得し、それにジャンプします。RETI(割り込みからの復帰)である割り込みサービスサブルーチンの実行を開始します。

  • RETI命令を実行すると、マイクロコントローラは中断された場所に戻ります。まず、スタックの最上位バイトをPCにポップすることにより、スタックからプログラムカウンタ(PC)アドレスを取得します。次に、そのアドレスから実行を開始します。

エッジトリガーとレベルトリガー

割り込みモジュールには、レベルトリガーまたはエッジトリガーの2つのタイプがあります。

レベルトリガー エッジトリガー
レベルトリガー割り込みモジュールは、割り込みソースのレベルがアサートされるたびに常に割り込みを生成します。 エッジトリガー割り込みモジュールは、割り込みソースのアサートエッジを検出した場合にのみ割り込みを生成します。割り込みソースレベルが実際に変化すると、エッジが検出されます。また、定期的なサンプリングと、前のサンプルがアサート解除されたときにアサートされたレベルを検出することによっても検出できます。
ファームウェアの割り込みハンドラが割り込みを処理するときに割り込みソースがまだアサートされている場合、割り込みモジュールは割り込みを再生成し、割り込みハンドラを再度呼び出します。 エッジでトリガーされる割り込みモジュールは、割り込みソースの動作に関係なく、すぐに実行できます。
レベルでトリガーされる割り込みは、ファームウェアにとって面倒です。 エッジトリガー割り込みは、ファームウェアのコードの複雑さを低く抑え、ファームウェアの条件の数を減らし、割り込みが処理されるときの柔軟性を高めます。

割り込みの有効化と無効化

リセットすると、割り込みがアクティブになっていても、すべての割り込みが無効になります。マイクロコントローラがこれらの割り込みに応答するには、ソフトウェアを使用して割り込みを有効にする必要があります。

IE(割り込みイネーブル)レジスタは、割り込みの有効化と無効化を担当します。IEはビットアドレス可能なレジスタです。

割り込みイネーブルレジスタ

EA - ET2 ES ET1 EX1 ET0 EX0
  • EA −グローバルな有効化/無効化。

  • - −未定義。

  • ET2 −タイマー2割り込みを有効にします。

  • ES −シリアルポート割り込みを有効にします。

  • ET1 −タイマー1割り込みを有効にします。

  • EX1 −外部1割り込みを有効にします。

  • ET0 −タイマー0割り込みを有効にします。

  • EX0 −外部0割り込みを有効にします。

割り込みを有効にするには、次の手順を実行します-

  • 残りのレジスタを有効にするには、IEレジスタ(EA)のビットD7をハイにする必要があります。

  • EA = 1の場合、IEの対応するビットがハイであれば、割り込みが有効になり、応答されます。EA = 0の場合、IEレジスタ内の関連するピンがハイであっても、割り込みは応答しません。

8051での割り込み優先度

いずれかの割り込みに高い優先度を割り当てることで、割り込みの優先度を変更できます。これは、と呼ばれるレジスタをプログラミングすることによって実現されます。IP (割り込み優先度)。

次の図は、IPレジスタのビットを示しています。リセット時に、IPレジスタにはすべて0が含まれます。割り込みの優先度を高くするために、IPレジスタの対応するビットをハイにします。

- - - - PT1 PX1 PT0 PX0

- IP.7 実装されていません。
- IP.6 実装されていません。
- IP.5 実装されていません。
- IP.4 実装されていません。
PT1 IP.3 タイマー1の割り込み優先度レベルを定義します。
PX1 IP.2 外部割り込み1の優先度レベルを定義します。
PT0 IP.1 タイマー0の割り込み優先度レベルを定義します。
PX0 IP.0 外部割り込み0の優先度レベルを定義します。

割り込み内部割り込み

8051が割り込みに属するISRを実行していて、別のISRがアクティブになった場合はどうなりますか?このような場合、優先度の高い割り込みが優先度の低い割り込みを中断する可能性があります。これはとして知られていますinterrupt inside interrupt。8051では、優先度の低い割り込みは、優先度の高い割り込みによって割り込むことができますが、優先度の低い別の割り込みによって割り込むことはできません。

ソフトウェアによる割り込みのトリガー

シミュレーションによってISRをテストする必要がある場合があります。これは、割り込みをハイに設定し、それによって8051を割り込みベクタテーブルにジャンプさせる簡単な命令で実行できます。たとえば、タイマー1のIEビットを1に設定します。命令SETB TF1 何をしていても8051に割り込みをかけ、割り込みベクタテーブルにジャンプさせます。