No.1ベストアンサー
- 回答日時:
CPUの「回路としての」仕組みはよくわかりませんので、あくまでもソフトが
利用するモノとしての仕組みを書きます。
CPUの割り込みの種類には「ノンマスカブル割り込み(NMI)」「内部割込み」
「外部割込み」があり、後者2つは「マスカブル割り込み」と総称されます。
周辺機器がCPUに発行する割り込みは「外部割込み」にあたり、これをIRQと呼んで
優先順位が高い方から順に番号が振られています。
内部割込みはタイマーなどに使い、ノンマスカブルはリセット割り込みです。
外部割込みはIRQに割り当てられたポートの状態によってCPUが認識しますが、
この「状態」には「立ち上がりエッジ」「立下りエッジ」があります。(ポート
の電圧がL状態からH状態になった瞬間が「立ち上がりエッジ」、「立下りエッ
ジ」はその逆です)CPUの種類によっては「H状態である時間が経ったら」など
も要因として認識します。
割り込みが発生すると、CPU内部のレジスタ「割り込み状態フラグ」の、対応する
ビットが1になり、CPUは例外処理(割り込み発生の処理)に移ります。
この最初の処理をしているのが「割り込みコントローラ」です。
するとまず、「割り込みマスクレジスタ」というレジスタをチェックし、マスク
の状態が検出されるとその割り込みは無視されます。(NMIはマスクできません)
そしてマスクされていないときは、通常、NMI→内部割込み→外部割込みの順に
「割り込み状態フラグ」の状態をチェックしていき、1のところを見つけると
該当する「割り込みベクタ」という領域に処理を移します。
ここでわかるのは、同時に複数のビットが1になっていても、優先順位の高い
ところで引っかかってしまうということです。
さて、「割り込みベクタ」というのは、割り込み処理への分岐先のアドレスが
記述してあるテーブルです。プログラマーはここに、割り込みルーチンのアド
レスを登録しておきます。CPUによっては「セカンダリベクタ」という所が
用意されており、プログラマーはセカンダリベクタに割り込みルーチンを登録
するものもあります。
そして「割り込みベクタ」(→「セカンダリベクタ」)から割り込みルーチン
に処理が移されるとき、CPUは現在のプログラムの実行状態をすべて退避させ
ます(この退避先はCPUによってさまざまです)。それから処理を移し、通常
ここから割り込み処理終了まではNMI以外のすべての割り込みが禁止されます。
(このため、割り込みルーチンは短めにしておかないと、他の割り込みが実行
されなくなってしまいます)
そして割り込み処理ルーチンが終了すると、CPUは「割り込み状態フラグ」のビット
を0にし、退避していたプログラムの実行状態を元に戻し、再び通常の処理に戻り
ます。
以上が大まかな流れです。
長文になってしまいましたがわかりましたでしょうか・・・??
もし焦点のズレた回答になってしまってたならご指摘下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PICマイコンでエンコーダパルス...
-
電車で待機列の割り込みについ...
-
割り込み処理について
-
このレジの並び方は間違ってま...
-
スーパーのレジで並んでいたら...
-
プリントスクリーンの自動化
-
PICでタイマー割込み(mikroC V...
-
Macターミナルで実行中のプログ...
-
バックグラウンドのプロセスの...
-
C#でのbatファイル実行結果取得
-
緯度、経度の 10進法と 60進法...
-
TCP/IP通信時のサーバーからの受信
-
C言語で、メモリを解放しないで...
-
C# シリアル通信でデータ受信...
-
Linuxのchdir(カレントディレク...
-
プロダクションコードとは?
-
VBAの配列サイズとメモリに関して
-
プロセスが実行中かどうか調べ...
-
system関数を使用してsuコマン...
-
Application.ScreenUpdating=Fa...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スーパーのレジで並んでいたら...
-
電車で待機列の割り込みについ...
-
このレジの並び方は間違ってま...
-
pic 複数の割り込み関数 切り分...
-
マイコン C言語 割り込み処理...
-
USB機器からのデータ受信による...
-
【組込み】割り込み中のstatic...
-
USJでの割り込み
-
CPUの処理量を減らすコーデ...
-
マイコンSH-2の割り込みを用い...
-
PICで内部タイマーを使わずカウ...
-
VBAのDoEventsが上手く動きません
-
CPU負荷率の安全な上限と計...
-
プリントスクリーンの自動化
-
一定時間操作がなかったら、と...
-
電車乗車時、並んでいるのに割...
-
割り込み処理について
-
アセンブラのタイマー割り込み
-
複数の割込み処理からアクセス...
-
VB6でSendKeyを利用したTab移動...
おすすめ情報