CPUの割込みの仕組みと、周辺機器がCPUに対して割込みを発行した場合のCPUの動作の流れについてどうなるのか教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (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にし、退避していたプログラムの実行状態を元に戻し、再び通常の処理に戻り
ます。

以上が大まかな流れです。
長文になってしまいましたがわかりましたでしょうか・・・??
もし焦点のズレた回答になってしまってたならご指摘下さい。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAVRマイコンの割り込みについて

AVRマイコンの割り込みについて

初心者です。
・AVRマイコンの割り込みの優先順位ですが、割込みベクターのアドレスが小さい順に優先度が高いでよろしいでしょうか?
・優先低の割り込みルーチンを処理している時に、優先高の割り込みが入った場合、
 (1)優先低の割り込みルーチン処理中断→優先高の割り込みルーチンの処理、完了→優先低の割り込みルーチン処理再開(中断ヶ所から)
 (2)優先低の割り込みルーチン処理、完了→優先高の割り込みルーチンの処理、完了
 (3)その他
(1)、(2)、(3)のどの処理が行われますか?
・優先高の割り込みルーチンを処理している時に、優先高の割り込みを禁止し、ルーチン内で優先低の割り込みが入った場合、優先高の割り込みルーチンから優先低の割り込みルーチンにとばすことは可能でしょうか?

以上、よろしくお願い致します。

Aベストアンサー

AVRは使用経験がないのでマイコン一般的な回答ですが、
・優先度は割り込みごとに設定できるものが多いです。同優先度の割り込みが複数入った場合にどうなるかはハンドラ次第です。

・多重割り込みをサポートしていない、あるいは有効にしていない場合は(2)です。多重割り込みが有効の場合は(1)ですね。

・多重割り込みで可能なのはより高優先の割り込みのみです。ISR実行中にその割り込みを禁止したとしても、ISR自体が終了する訳ではない上に優先度は有効のままですから、ISR中に低優先度割り込みが入ることはできません。

QCPUの動作周波数と周辺デバイスの動作周波数について

CPUとローカルで繋ぐEthernetコントローラの動作周波数が25MHZします。
Ethernetコントローラのスペックは100baseなのですが
このコントローラの最大限のスペックを出すには
CPUはどのくらいの動作周波数のものを使う必要があるのでしょうか?
もし動作周波数以外にスペックに影響を及ぼす点があれば教えて頂きたいです。

Aベストアンサー

すみません、このカテに質問してるって技術者の方じゃないですよね?

CPUとEthernetコントローラのデータバス幅いくつなのでしょうか?
要するに、25MHzで動作するんじゃ「100Baseの125MHzの駆動動作に追いついてないじゃないか」と言う単純な話であれば・・・
データバス幅が32本だと25MHz×32=800Mbps
データバス幅が16本でも25MHz×16=400Mbps
データバス幅が 8本でも25MHz× 8=200Mbps
と、CPUとEthernetコントローラで、遅延が起こるとすれば・・・他のプログラムでのCPUの占有の度合いでしょうね
高負荷の他のプログラムが動作していれば、CPUとEthernetコントローラの通信タイミングは遅延する事はありますが・・・
それだけではなく、相手側、その途中経路なんかの状況によっては、応答待ちで速度自体を維持できません、大体こちらが通信速度を決める上でウェイトが大きいです

と、およその話ね^^;;;

Q割り込み処理について

割り込み処理について

初心者です。
AVRマイコンの割り込み処理について質問させて頂きます。
INT0割り込みの割り込みが入ったら、割り込みルーチン中の他の割り込みを許可し、かつINT0の割り込みを禁止したいのですが、下記ソースで問題はありませんか?
INT0割り込みが終了して、メインルーチンに復帰した直後にINT0割り込みを許可したいのですが、下記ソース(1)で問題はありませんか(メインルーチンに復帰した直後に許可したいのですが、方法がわかりません)?

ISR(INT0_vect,ISR_NOBLOCK)
{
    int0割り込み禁止
     ・
     ・
     ・
     ・
   (int0割り込み要求フラグクリア) ・・・・(1)    
   (int0割り込み許可)         ・・・・(1)  
}

よろしくお願い致します。

Aベストアンサー

初心者なら、マイコンのマニュアルを見てプログラムできるようになる練習をすることです。

URLに個別の割込みマスクとretiでの動作等書かれています。

・SREG ($3F) : Status Register
bit7-I : Global Interrupt Enable
すべての割り込みを可能にするにはこのビットを1にする必要があります。割り込みがかかるとクリアされ、割り込みルーチンの終わりでRETI命令がかかると同時に再びセットされます。CEI,SEI命令でクリア,セットできます。

にあるように、基本的にはAVRの割込みモデルは多重割込みでない対応としているようです。
これを
>割り込みルーチン中の他の割り込みを許可し
ということなので、多重割込みの対応をしたいようですが、多重割込みについての問題点等
検討されているでしょうか。たとえば、多重割込みでは何重の多重割込みを想定して、それに必要なスタックサイズは検討されていますか?

されているとして、以下のようになると思います。

ISR(INT0_vect,ISR_NOBLOCK)
{
    int0割り込み禁止
    ・SREG ($3F) : Status Register bit7-I : Global Interrupt Enableを1にする。
     (これで割込み許可になる。もともと他の割込みは許可されているものと考えています。)
     ・
     ・このへんは他の割込みが許可状態。
     ・
     ・
    ・SREG ($3F) : Status Register bit7-I : Global Interrupt Enableを0にする。
   (int0割り込み要求フラグクリア) ・・・・(1) これは不要と思います。(理由)   
   (int0割り込み許可)         ・・・・(1)  
}

理由:
・割り込みフラグは割り込みが起こったときにセットされ、割り込みハンドリング時に自動でクリアされます。割り込みをマスクしていた場合にはフラグは立ったままとなります。

参考URL:http://ww2.tiki.ne.jp/~maro/AVR/programing/index.html

初心者なら、マイコンのマニュアルを見てプログラムできるようになる練習をすることです。

URLに個別の割込みマスクとretiでの動作等書かれています。

・SREG ($3F) : Status Register
bit7-I : Global Interrupt Enable
すべての割り込みを可能にするにはこのビットを1にする必要があります。割り込みがかかるとクリアされ、割り込みルーチンの終わりでRETI命令がかかると同時に再びセットされます。CEI,SEI命令でクリア,セットできます。

にあるように、基本的にはAVRの割込みモデルは多重割込みでない対応と...続きを読む

QPC周辺機器でPhotoshopエレメントをハンドルしている機器

DVDなどでエレメントを附属ソフトとして付けているハードを教えてください。

Aベストアンサー

エレメンツがバンドルされているものは、
機種にもよりますがスキャナーに付属されています。

Qシステムの割り込みについて システムの割り込みで調べてもよく分からないのですが遅延など調べましたが、

システムの割り込みについて
システムの割り込みで調べてもよく分からないのですが遅延など調べましたが、主にシステムの割り込みとはどんなのでしょうか?
先程cpuが1%(何もしてない時1〜0%)でしたがシステムの割り込みというはじめて聞いた単語がありましたので質問されていただきました。
システムの割り込みが0〜0.3%になっていて何か動いているのかなと思い数分ほど放置しましたが常に0〜0.3%だったのでシャットダウンしましたが割り込みと書いてましたのでもしかしたらシャットダウンとかしない方が良かったのでしょうか?

Aベストアンサー

ある処理の途中に、その処理以外の事象発生により、処理を中断(これが割り込みです)して別のことを行う様なことを言います。
例えば、円周率πの計算プロセスが稼働中はほぼCPU100%で動作しますが、この計算中にDVDメディアが装填されて自動再生が動き出すケースです。これは円周率πの計算中にDVDデバイスからシステムに割り込みが入り、システムが計算を一旦中断して自動再生プログラムを起動(CPUをこの処理に回す)したらかなる状態なのです。
割り込み要件には、上記のデバイスの割り込みの他にタイマーの割り込み(特定の時間が経過したらある処理を実行する等)や他のプロセスが終了したことによる割り込み等多種多様なものがあります。

Q周辺機器をUSBに接続する場合について

はじめまして。

USBハブを通して、周辺機器(ポータブルHDD、カードリーダー等々)を接続する場合、PCが勝手にドライブを割り当てるのですが、割り当てが重なった場合など、PCが周辺機器を認識してくれません。例えば、カードリーダーは4つ口があり、E,F,G,Hドライブに割り当てるのですが、Hドライブがすでに使用されている場合、3つしか認識しません。で、4つ目を空いているドライブ(例えば、XとかYとか)に割り当てたいのですが、やり方がわかりません。おわかりになる方、是非、書き込みをお願いいたします。

Aベストアンサー

WindowsXPの場合ですが。

[コントロールパネル]→[管理ツール]→[コンピュータの管理]→[記憶域]→[ディスクの管理]と開いていきます。

画面右側に「リムーバブル(H:)」といったドライブの情報が表示されていますので、
そこを右クリックして、表示されたメニューの「ドライブ文字とパスの変更」をクリックします。

ドライブ文字とパスの変更の画面が表示されるので、[変更]ボタンをクリックして任意のドライブ文字を選択して[OK]ボタンをクリックします。

Qpicタイマ0割り込みについて

タイマ0割り込みについて教えて下さい。
解説書などに、割り込みルーチンの最初の部分で

(1)割り込みフラグ(TMR0IF)を消す
(2)TMR0を再設定する

と書かれていますが、なぜ(2)を割り込みルーチンの最初で行うのでしょう?
これでは、
・1秒ごとに割り込みを発生させたい
・割り込みルーチンの作業時間は0.5秒
だとすると、結果的に割り込み発生は0.5秒ごとになってしまいます。

TMR0再設定は割り込みを抜ける時(retfie の直前)に行えば、ほぼ希望通りの間隔で、割り込みを発生させられると思うのですが、それはルール違反なのでしょうか?

Aベストアンサー

N0.2です。
普通の処理だったら問題無いのですが、
たとえば、割り込みが発生してもすぐに
割り込みルーチンに入れない様な場合、
気を付けないと次の割り込みが発生してしまいます。
で、マニュアルでは割り込み原因となる
TMR0を再設定するように指示をしているのですが、
たしかに割り込み後に一定時間間隔でまた割り込みたい
場合には、抜ける前にまた再設定するしかありません。

ただ、通常の場合、一定時間の割り込みというのは
割り込みそのものを一定時間毎に発生させたい筈
なんです。
たとえば、割り込みは10mSおき、処理は1mSだとすると
スタート(0mS)から数えて
10mS 割り込み発生 TMR0再設定
11mS 割り込み処理終了
20mS 割り込み発生 TMR0再設定
21mS 割り込み処理終了
30mS 割り込み発生 TMR0再設定
と言うぐらいに、きれいに
10mSおきに割り込みが発生します。
しかも、割り込み処理が長くなっても短くなっても
間隔は変わりません。

Qパソコンの違うUSBポートに周辺機器を接続した場合について伺います。

パソコンの違うUSBポートに周辺機器を接続した場合について伺います。

掃除などでパソコン背面のUSBポートに接続の周辺機器を一度はずし、違うUSBポートに周辺機器を接続し初めて起動させた場合についてです。

通知領域にドライバ等をインストールしている旨のメッセージが表示され、完了すると画面の中央部あたりに「USB入力デバイス-使用する準備ができました」などと接続機器の数だけ表示されます。

Windows 7 を使っています。デスクトップパソコンです。周辺機器はコードレスマウス&キーボード
のレシーバーと外付けHDDとエプソンプリンターの3つです。

3つのうち2つはWindows Updateに接続しています、と表示されそこからドライバを引っ張ってくるようです。また残るひとつはOSが標準で持っているドライバを持ってくるようです。(途中でWindows Updateに接続しています、などのメッセージが出ているので分かります)

レシーバーと外付けHDDはWindows標準のドライバで良いのですが、プリンターは機種独自のものをあらかじめ入れてあります。上記のような経過をみると、OS標準かWindows Updateのどちらかは判別できませんが、独自のもの以外のドライバがプリンター用としてインストールされた感じです。

この場合、機種独自のドライバを上書きで再インストールした方が良いのでしょうか?

ドライバがインストールされたときのUSBポートを記憶していて、違うポートに刺すと上記のような動作が起こるのがWindowsの仕様のようなのですが・・・。

以前Vistaで試したのですが、Vistaをフォーマット再インストールした場合、初めてエプソンプリンターをUSB接続してパソコンを起動させると汎用?のエプソンのドライバ&ユーティリティが自動でインストールされました。グラフィック上は専用のものと良く似たものでした。どうもWindows は有名なメーカーのプリンタのドライバは一応持っているのではと思うのですがどうなのでしょうか?

質問1.違うUSBポートに接続した場合、オリジナルのドライバーが必要な場合は再度インストールする必要があるのか?

質問2.Windowsはたとえば、主なメーカーの主な機器のドライバを内部に持っていると考えてよいか?

上記が質問です。よろしくお願いします。

パソコンの違うUSBポートに周辺機器を接続した場合について伺います。

掃除などでパソコン背面のUSBポートに接続の周辺機器を一度はずし、違うUSBポートに周辺機器を接続し初めて起動させた場合についてです。

通知領域にドライバ等をインストールしている旨のメッセージが表示され、完了すると画面の中央部あたりに「USB入力デバイス-使用する準備ができました」などと接続機器の数だけ表示されます。

Windows 7 を使っています。デスクトップパソコンです。周辺機器はコードレスマウス&キーボード
のレシーバ...続きを読む

Aベストアンサー

いや、既に入れてあるドライバを参照する筈だよ
デバイスマネージャで確認してごらん。

ただ、変なのに切り替わる可能性は否定できないから、その場合は懸念通り、ちゃんとしたのを煎れた方が良いかな。

http://www.google.com/search?hl=ja&q=windows7%20%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%83%A3

QマイコンSH-2の割り込みを用いたシリアル通信

SH7144Fで割り込みを用いたシリアル通信を行っていますが,
途中で割り込みがかからなくなる症状に悩んでいます.

開発環境はHEW上でツールチェインにRenesas SuparH StandardとKPIT GNUSH [ELF]を
組み込んでおり,適宜選んで使っています.
以下,Renesas SuparH Standardで,受信割り込みの場合に限って書かせて頂きます.

少々長くなりますが状況をご説明致します.

最初にSCI1回りの設定を適切に行い,割り込みレベルを15とした後,
set_imask(0)で割り込みレベルを0として割り込みがかかるようにしています.
受信割り込みがかかるとINT_SCI1_RXI1に飛び,
_UBYTE c = SCI1.RDR;
SCI1.SSR.BIT.RDRF = 0;
と直ちにした後,cの内容をバッファに入れ,戻っていますが,一文字受信しただけで
割り込みがかからなくなります.(_UBYTEはtypedefine.hでunsigned charとしています.)

相当悩んだ挙句,INT_SCI1_RXI1の末尾に,
set_imask(0);
を入れてやると連続して割り込みがかかり,うまく受信できるようになっています.

ハードウェアマニュアルを読めば,割り込みがかかるとSRレジスタは退避され,
SCI1の割り込みレベル15の内容がSRレジスタのI0~I3に書き込まれる,とあります.
当然,割り込みが終われば,退避された内容がSRレジスタに戻るので割り込みマスクは
0に戻るもの・・・と解釈していますが,余りにも当たり前なのかハードウェアマニュアルには
明記はされていません.もしかしたら元に戻っていないのでは・・・と,上記のようにいちいちに
割り込みマスクを0にする手続きを追記すると動いている,と言う状況です.

因みに上記の状況はKPIT GNUSH [ELF]を選んだときにも同じです.
更には,送信割り込みのときも上記と同じくset_imask(0)を入れてやると動きます.

そこで質問ですが,
1.SRレジスタは割り込みが終われば元の内容に戻ると解釈していますが,
  これで合っているでしょうか.
2.上記1で元に戻るのだとしたら,なぜいちいちset_imask(0)をしてやらないといけない
  状況になっているのか・・・考えられる原因をお教えください.

雑多な説明で申し訳ございませんが,どうぞ宜しくお願い致します.<(__)>

SH7144Fで割り込みを用いたシリアル通信を行っていますが,
途中で割り込みがかからなくなる症状に悩んでいます.

開発環境はHEW上でツールチェインにRenesas SuparH StandardとKPIT GNUSH [ELF]を
組み込んでおり,適宜選んで使っています.
以下,Renesas SuparH Standardで,受信割り込みの場合に限って書かせて頂きます.

少々長くなりますが状況をご説明致します.

最初にSCI1回りの設定を適切に行い,割り込みレベルを15とした後,
set_imask(0)で割り込みレベルを0として割り込みがかかるようにしてい...続きを読む

Aベストアンサー

ハードウエアマニュアルをよく読めば書いてあるのですが、SHのSSR.RDRFビットをクリアするのは、一度1を読み込んでから0を書く必要があります。
質問文からは、1を読む作業が抜けているように思われます。

set_imask()は、関数呼び出しではなく、インライン展開されるようですが、展開されたものを読んでみても、結果的にLDC命令を使ってSRのIMASK部を書き換えるだけの処理です。
ですから、set_imask(0)を実行した時点で、再びsci割り込みがかかると思いますが、それは新たな受信データを得た訳ではないので、読み出したデータは以前と同じになっているのではないでしょうか。

一方、割り込みからの復帰に使用するRTE命令は、セーブされたSRとPCの値をレジスタに戻すものです。
アセンブラで書いていると、間違ってRTSで戻してしまうことがありますが、この場合はSRの内容うんぬんという以前に、PCの値が変になって暴走するので、すぐにわかります。
Cで書いていればそのような間違いは起きないので、SRの復帰について心配する必要はありません。

ただ、LDCでSRのIMASK部を変えるのと、RTEで変えることに違いが生じているようですが、これは内部割込みのエッジ検出フラグのリセット回路の働きに、なにか違いがあるのかも知れません。

ハードウエアマニュアルをよく読めば書いてあるのですが、SHのSSR.RDRFビットをクリアするのは、一度1を読み込んでから0を書く必要があります。
質問文からは、1を読む作業が抜けているように思われます。

set_imask()は、関数呼び出しではなく、インライン展開されるようですが、展開されたものを読んでみても、結果的にLDC命令を使ってSRのIMASK部を書き換えるだけの処理です。
ですから、set_imask(0)を実行した時点で、再びsci割り込みがかかると思いますが、それは新たな受信データを得た訳ではないので...続きを読む

QブートDVDの動作の仕組みについて教えてください

最近はさまざまなバックアップソフトが販売されており、起動CDから外付けCDを認識して、動作させるようです。
自分もそれを使用しているのですが、CDメディアだと非常に時間も手間もかかり、往生してます。
最近DVD自己ブート可能な製品も販売されているようですが、いったいどういうしくみでBIOSから認識されるのでしょうか。
今までは、BIOS上にCDドライバがあるのだと思い込んでいたのですが、、、教えてください

Aベストアンサー

DVDブートですが一般的なIDE(ATAPI)接続のDVDドライブからブートする場合はCDブートと同じく「El Torito」に準拠してDVDからのブートを実現しています。
(つまりCDブートと同じ手法でDVDからもブートすると言うことです)

参考資料
http://www.atmarkit.co.jp/fwin2k/win2ktips/006cdromboot/cdromboot.html
http://lets-go.hp.infoseek.co.jp/bootcd/bootcd2.html
http://www.phoenix.com/NR/rdonlyres/98D3219C-9CC9-4DF5-B496-A286D893E36A/0/specscdrom.pdf

>起動CDから外付けCDを認識して、動作させるようです。
ただ、USB接続の外付けのCD/DVDドライブからのCD/DVDブートの場合は
BIOS等がUSB接続のCD/DVDドライブからのブートをサポートしている必要があると思われます。


人気Q&Aランキング

おすすめ情報