Embedded-systems-es-interrupts

提供:Dev Guides
移動先:案内検索

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

割り込みは、ハードウェアまたはソフトウェアが発するプロセッサへの信号であり、即座に注意が必要なイベントを示します。 割り込みが発生するたびに、コントローラーは現在の命令の実行を完了し、割り込みサービスルーチン(ISR)または*割り込みハンドラー*の実行を開始します。 ISRは、割り込みが発生したときの処理をプロセッサまたはコントローラに伝えます。 割り込みは、ハードウェア割り込みまたはソフトウェア割り込みのいずれかです。

ハードウェア割り込み

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

ソフトウェア割り込み

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

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

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

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

ポーリング対割り込み

割り込みとポーリングを区別する例えは次のとおりです-

Interrupt Polling
An interrupt is like a shopkeeper. If one needs a service or product, he goes to him and apprises him of his needs. In case of interrupts, when the flags or signals are received, they notify the controller that they need to be serviced. The polling method is like a salesperson. The salesman goes from door to door while requesting to buy a product or service. Similarly, the controller keeps monitoring the flags or signals one by one for all devices and provides service to whichever component that needs its service.

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

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

プログラムの実行

割り込みベクタテーブル

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

Interrupts ROM Location (Hex) Pin
Interrupts ROM Location (HEX)
Serial COM (RI and TI) 0023
Timer 1 interrupts(TF1) 001B
External HW interrupt 1 (INT1) 0013 P3.3 (13)
External HW interrupt 0 (INT0) 0003 P3.2 (12)
Timer 0 (TF0) 000B
Reset 0000 9
  • リセットピンがアクティブになると、8051はアドレス位置0000にジャンプします。 これはパワーアップリセットです。
  • タイマーには、タイマー0用とタイマー1用の2つの割り込みが確保されています。 メモリの場所は、割り込みベクタテーブルでそれぞれ000BHと001BHです。
  • ハードウェア外部割り込み用に2つの割り込みが確保されています。 ピン番号 12およびピン番号 ポート3の13は、それぞれ外部ハードウェア割り込みINT0およびINT1用です。 メモリ位置は、割り込みベクタテーブルでそれぞれ0003Hおよび0013Hです。
  • シリアル通信には、受信と送信の両方に属する単一の割り込みがあります。 メモリ位置0023Hは、この割り込みに属します。

割り込みを実行する手順

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

  • マイクロコントローラーは現在実行中の命令を閉じ、スタック上の次の命令(PC)のアドレスを保存します。
  • また、すべての割り込みの現在のステータスを内部的に保存します(つまり、スタック上ではありません)。
  • 割り込みサービスルーチンのアドレスを保持する割り込みベクターテーブルのメモリ位置にジャンプします。
  • マイクロコントローラーは、割り込みベクトルテーブルからISRのアドレスを取得し、そこにジャンプします。 RETI(割り込みからの復帰)である割り込みサービスサブルーチンの実行を開始します。
  • RETI命令を実行すると、マイクロコントローラーは中断された場所に戻ります。 まず、スタックの上位バイトをPCにポップすることにより、スタックからプログラムカウンター(PC)アドレスを取得します。 次に、そのアドレスから実行を開始します。

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

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

Level Triggered Edge Triggered
A level-triggered interrupt module always generates an interrupt whenever the level of the interrupt source is asserted. An edge-triggered interrupt module generates an interrupt only when it detects an asserting edge of the interrupt source. The edge gets detected when the interrupt source level actually changes. It can also be detected by periodic sampling and detecting an asserted level when the previous sample was de-asserted.
If the interrupt source is still asserted when the firmware interrupt handler handles the interrupt, the interrupt module will regenerate the interrupt, causing the interrupt handler to be invoked again. Edge-triggered interrupt modules can be acted immediately, no matter how the interrupt source behaves.
Level-triggered interrupts are cumbersome for firmware. Edge-triggered interrupts keep the firmware’s code complexity low, reduce the number of conditions for firmware, and provide more flexibility when interrupts are handled.

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

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

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 Not Implemented.
- IP.6 Not Implemented.
- IP.5 Not Implemented.
- IP.4 Not Implemented.
PT1 IP.3 Defines the Timer 1 interrupt priority level.
PX1 IP.2 Defines the External Interrupt 1 priority level.
PT0 IP.1 Defines the Timer 0 interrupt priority level.
PX0 IP.0 Defines the External Interrupt 0 priority level.

割り込み内部割り込み

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

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

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