質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CPU

CPUは、コンピュータの中心となる処理装置(プロセッサ)で中央処理装置とも呼ばれています。プログラム演算や数値計算、その他の演算ユニットをコントロール。スマホやPCによって内蔵されているCPUは異なりますが、処理性能が早いほど良いとされています。

x86

x86はIntel 8086 CPU シリーズの命令セットアルキテクチャーです。

Q&A

解決済

2回答

1747閲覧

PIC 初期化コマンドはどのように区別される?

kazuyakazuya

総合スコア193

CPU

CPUは、コンピュータの中心となる処理装置(プロセッサ)で中央処理装置とも呼ばれています。プログラム演算や数値計算、その他の演算ユニットをコントロール。スマホやPCによって内蔵されているCPUは異なりますが、処理性能が早いほど良いとされています。

x86

x86はIntel 8086 CPU シリーズの命令セットアルキテクチャーです。

0グッド

0クリップ

投稿2020/03/31 06:47

編集2020/03/31 08:43

PIC初期設定について

PIC初期化にはICWコマンド0~4
OCWコマンド0~2(?)
これらを使用し初期化を進めると思いますが

このポートではICW1コマンドを使っているのか?
このポートではOCW2コマンドを使っているのか?

という区別はどのようにされているのですか?

例えば・・・
割込み要求レジスタ・・・割り込み中か判断するレジスタ
割込みマスクレジスタ・・・割り込み許可するか判断するレジスタ
それぞれOCW1コマンド、EOIコマンドで初期化するそうですが
ポートは同じですよね?

30日で作るOS

ICW1コマンドが来たら次はICW2コマンドが来るはずだという細かいルールがあると書かれていますがそのルールを具体的に知りたいです。

30日で作るOSでは
マスタPIC ICW1
マスタPIC ICW2
マスタPIC ICW3
マスタPIC ICW4

スレーブPIC ICW1
スレーブPIC ICW2
スレーブPIC ICW3
スレーブPIC ICW4

マスタPIC OCW1
スレーブPIC OCW1

0から作るOSでは

0から作るOS

マスタPIC ICW1
スレーブPIC ICW1
マスタPIC ICW2
スレーブPIC ICW2
マスタPIC ICW3
スレーブPIC ICW3
マスタPIC ICW4
スレーブPIC ICW4

マスタPIC OCW1
スレーブPIC OCW1

といった手順で初期化されていました。
ここの詳しいルールを知りたいです。
参考サイト・資料などでもいいのでお願いします。

リンク内容

C

1void pic_init(void) 2{ 3 /* マスタPICの初期化 */ 4 io_write(MPIC_ICW1_ADDR, 0x11); 5 io_write(MPIC_ICW2_ADDR, INTR_NO_BASE_MASTER); 6 io_write(MPIC_ICW3_ADDR, 0x04); 7 io_write(MPIC_ICW4_ADDR, 0x01); 8 io_write(MPIC_OCW1_ADDR, 0xff); 9 10 /* スレーブPICの初期化 */ 11 io_write(SPIC_ICW1_ADDR, 0x11); 12 io_write(SPIC_ICW2_ADDR, INTR_NO_BASE_SLAVE); 13 io_write(SPIC_ICW3_ADDR, 0x02); 14 io_write(SPIC_ICW4_ADDR, 0x01); 15 io_write(SPIC_OCW1_ADDR, 0xff); 16}

こっちではまた順番が違います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/03/31 07:34

あなたのいってるPICとは具体的な型番は何でしょうか
kazuyakazuya

2020/03/31 07:52 編集

Virtualboxでディスクイメージを走らせています。 今調べていますがなかなか出てきません・・・。 ただ、0から作るOS、30日で作るOSでは 8259Aというワードが出てくるのでそれ・・・なんでしょうか?
y_waiwai

2020/03/31 08:04

ああ、PICってそのPICと違うのかw IDみるべきやったな。。 intel8259 でぐぐったら、そいつのデータシートがでてくるので、それを読んでみてください。そこに書いてあります
kazuyakazuya

2020/03/31 08:09

分かりました。調べてみます
y_waiwai

2020/03/31 08:36

ああ、どちらもおなじでしょw # 手元には日本語のマニュアルあったり
y_waiwai

2020/03/31 08:41

ああ、それと、タグのPICというのは誤解を招くため、CPUか、x86 に変えといてください。
guest

回答2

0

「ICW1コマンドが来たら次はICW2コマンドが来るはずだという細かいルールがある」
は説明不足です

0x20 マスタPICのコマンドレジスタとステータスレジスタです ICW1 , OCW2 , OCW3
0x21 マスタPICの割り込みマスクレジスタとデータレジスタです ICW2 , ICW3 , ICW4 , OCW1

ポート0x20 に Initialization Command (ICW1) を書き込み
ポート0x21 に ICW2 → ICW3 → ICW4 を続けて書き込むことで初期設定が完了します

コマンドとデータをポートアドレスで区別しています

投稿2020/04/01 14:37

koujikuu

総合スコア401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuyakazuya

2020/04/02 11:33

ありがとうございました。 無事PIC初期ができハードウエア割り込みを起こせました。
guest

0

ベストアンサー

質問は PICマイコン ではなく
PIC - Programmable Interrupt Controller 8259A の方だと思います

↓引用元

 まず,ICW1~ICW4をみていきましょう.ベース・アドレス+0番地(0020h,または00A0h)への書き込みが行われたとき,データのビット4が“1”になっていると,PICは書き込まれたデータをICW1と解釈し,初期化モードに入ります.いったん初期化モードに入ると,その後ベース・アドレス+1番地(0021hまたは00A1h)へ書き込んだデータは,順にICW2,ICW3,ICW4へと格納されます.

マスタPIC と スレーブPIC では、ベースアドレスが異なるので、初期化は順番にでも 交互に書き込んでも結果は同じです

投稿2020/03/31 14:04

koujikuu

総合スコア401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuyakazuya

2020/03/31 22:52

回答ありがとうございます。 >ベース・アドレス+0番地(0020h,または00A0h)への書き込みが行われたとき すみません これは具体的にどういうことでしょうか? //マスタPIC ICW1 "mov $0x20,%al\n\t" "mov $0x11,%dx\n\t" "out %al,%dx\n\t" //スレーブPIC ICW1 "mov $0xA0,%al\n\t" "mov $0x11,%dx\n\t" "out %al,%dx\n\t" ICW1はこのように初期化されていました。 ここでいうポート0x20、0xA0の指定によって書き込まれた値 のことを指しているのでしょうか? >データのビット4が“1”になっていると 0x11は0b10001 だから・・・確かに4ビット目が1になっていますね。 フォーマットを見ると固定1となっていました。 http://softwaretechnique.jp/OS_Development/Image/Kernel_Development03/PIC_ICW1.png
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問