⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 interrupt-8259_5.htm

📁 编写自己的操作系统
💻 HTM
📖 第 1 页 / 共 4 页
字号:
  <TR>
    <TD>
      <CENTER><FONT face="Courier New" size=2>7</FONT></CENTER></TD>
    <TD><FONT face="Courier New" size=2>IR7 is connected to a 
  Slave</FONT></TD></TR>
  <TR>
    <TD>
      <CENTER><FONT face="Courier New" size=2>6</FONT></CENTER></TD>
    <TD><FONT face="Courier New" size=2>IR6 is connected to a 
  Slave</FONT></TD></TR>
  <TR>
    <TD>
      <CENTER><FONT face="Courier New" size=2>5</FONT></CENTER></TD>
    <TD><FONT face="Courier New" size=2>IR5 is connected to a 
  Slave</FONT></TD></TR>
  <TR>
    <TD>
      <CENTER><FONT face="Courier New" size=2>4</FONT></CENTER></TD>
    <TD><FONT face="Courier New" size=2>IR4 is connected to a 
  Slave</FONT></TD></TR>
  <TR>
    <TD>
      <CENTER><FONT face="Courier New" size=2>3</FONT></CENTER></TD>
    <TD><FONT face="Courier New" size=2>IR3 is connected to a 
  Slave</FONT></TD></TR>
  <TR>
    <TD>
      <CENTER><FONT face="Courier New" size=2>2</FONT></CENTER></TD>
    <TD><FONT face="Courier New" size=2>IR2 is connected to a 
  Slave</FONT></TD></TR>
  <TR>
    <TD>
      <CENTER><FONT face="Courier New" size=2>1</FONT></CENTER></TD>
    <TD><FONT face="Courier New" size=2>IR1 is connected to a 
  Slave</FONT></TD></TR>
  <TR>
    <TD>
      <CENTER><FONT face="Courier New" size=2>0</FONT></CENTER></TD>
    <TD><FONT face="Courier New" size=2>IR0 is connected to a 
  Slave</FONT></TD></TR></TBODY></TABLE><FONT face="Courier New" 
size=2>Initialization Command Word 3 for Master&nbsp;8259A (ICW3) 
</FONT></CENTER>
<P><FONT face="Courier New" size=2>Slave 8259A被接在Master 
8259A的那个IRQ上,则相应的位就被设置为1,其余的位都被设置为0。在IBM PC上,Slave 8259A被接在Master 
8259A的IRQ2上,则此ICW3的值应该被设置为二进制00000100 = 0x04。</FONT></P>
<CENTER>
<TABLE width="80%" border=1>
  <TBODY>
  <TR>
    <TD width="15%"><B>
      <CENTER><FONT face="Courier New" size=2>Bit(s)</FONT></B></CENTER></TD>
    <TD colSpan=2><B><FONT face="Courier New" size=2>Function</FONT></B></TD></TR>
  <TR>
    <TD>
      <CENTER><FONT face="Courier New" size=2>7</FONT></CENTER></TD>
    <TD colSpan=2><FONT face="Courier New" size=2>Reserved. Set to 
  0</FONT></TD></TR>
  <TR>
    <TD>
      <CENTER><FONT face="Courier New" size=2>6</FONT></CENTER></TD>
    <TD colSpan=2><FONT face="Courier New" size=2>Reserved. Set to 
  0</FONT></TD></TR>
  <TR>
    <TD>
      <CENTER><FONT face="Courier New" size=2>5</FONT></CENTER></TD>
    <TD colSpan=2><FONT face="Courier New" size=2>Reserved. Set to 
  0</FONT></TD></TR>
  <TR>
    <TD>
      <CENTER><FONT face="Courier New" size=2>4</FONT></CENTER></TD>
    <TD colSpan=2><FONT face="Courier New" size=2>Reserved. Set to 
  0</FONT></TD></TR>
  <TR>
    <TD>
      <CENTER><FONT face="Courier New" size=2>3</FONT></CENTER></TD>
    <TD colSpan=2><FONT face="Courier New" size=2>Reserved. Set to 
  0</FONT></TD></TR>
  <TR>
    <TD vAlign=top rowSpan=9>
      <CENTER><FONT face="Courier New" size=2>2:0</FONT></CENTER></TD>
    <TD colSpan=2><I><FONT face="Courier New" size=2>Slave ID</FONT></I></TD></TR>
  <TR>
    <TD width="10%">
      <CENTER><FONT face="Courier New" size=2>000</FONT></CENTER></TD>
    <TD><FONT face="Courier New" size=2>Slave 0</FONT></TD></TR>
  <TR>
    <TD>
      <CENTER><FONT face="Courier New" size=2>001</FONT></CENTER></TD>
    <TD><FONT face="Courier New" size=2>Slave 1</FONT></TD></TR>
  <TR>
    <TD>
      <CENTER><FONT face="Courier New" size=2>010</FONT></CENTER></TD>
    <TD><FONT face="Courier New" size=2>Slave 2</FONT></TD></TR>
  <TR>
    <TD>
      <CENTER><FONT face="Courier New" size=2>011</FONT></CENTER></TD>
    <TD><FONT face="Courier New" size=2>Slave 3</FONT></TD></TR>
  <TR>
    <TD>
      <CENTER><FONT face="Courier New" size=2>100</FONT></CENTER></TD>
    <TD><FONT face="Courier New" size=2>Slave 4</FONT></TD></TR>
  <TR>
    <TD>
      <CENTER><FONT face="Courier New" size=2>101</FONT></CENTER></TD>
    <TD><FONT face="Courier New" size=2>Slave 5</FONT></TD></TR>
  <TR>
    <TD>
      <CENTER><FONT face="Courier New" size=2>110</FONT></CENTER></TD>
    <TD><FONT face="Courier New" size=2>Slave 6</FONT></TD></TR>
  <TR>
    <TD>
      <CENTER><FONT face="Courier New" size=2>111</FONT></CENTER></TD>
    <TD><FONT face="Courier New" size=2>Slave 
7</FONT></TD></TR></TBODY></TABLE></CENTER>
<CENTER><FONT face="Courier New" size=2>Initialization Command Word 3 for Slaves 
(ICW3) </FONT></CENTER>
<DIV align=left><FONT face="Courier New" size=2></FONT>&nbsp;</DIV>
<DIV align=left><FONT face="Courier New" size=2>Slave 
8259A的ICW3的bit3:7被保留,必须被设为0;而bit0:2被设置为此Slave 8259A被接在Master 
8259A的哪个IRQ上。比如,在IBM PC上,Slave 8259A被接在Master 
8259A的IRQ2上,则此ICW3应被设为0x02。</FONT></DIV>
<DIV align=left><FONT face="Times New Roman TUR"></FONT>&nbsp;</DIV>
<DIV align=left><STRONG><FONT face="Times New Roman TUR" 
size=4>ICW4</FONT></STRONG></DIV>
<DIV align=left><FONT face="Times New Roman TUR"></FONT>&nbsp;</DIV>
<CENTER>
<TABLE width="80%" border=1>
  <TBODY>
  <TR>
    <TD><B>
      <CENTER><FONT face="Courier New" 
    size=2>Bit(s)</FONT></CENTER><B></B></B></TD>
    <TD colSpan=2><B><FONT face="Courier New" size=2>Function</FONT></B></TD></TR>
  <TR>
    <TD>
      <CENTER><FONT face="Courier New" size=2>7</FONT></CENTER></TD>
    <TD colSpan=2><FONT face="Courier New" size=2>Reserved. Set to 
  0</FONT></TD></TR>
  <TR>
    <TD>
      <CENTER><FONT face="Courier New" size=2>6</FONT></CENTER></TD>
    <TD colSpan=2><FONT face="Courier New" size=2>Reserved. Set to 
  0</FONT></TD></TR>
  <TR>
    <TD>
      <CENTER><FONT face="Courier New" size=2>5</FONT></CENTER></TD>
    <TD colSpan=2><FONT face="Courier New" size=2>Reserved. Set to 
  0</FONT></TD></TR>
  <TR>
    <TD rowSpan=2>
      <CENTER><FONT face="Courier New" size=2>4</FONT></CENTER></TD>
    <TD>
      <CENTER><FONT face="Courier New" size=2>1</FONT></CENTER></TD>
    <TD><FONT face="Courier New" size=2>Special Fully Nested Mode</FONT></TD></TR>
  <TR>
    <TD>
      <CENTER><FONT face="Courier New" size=2>0</FONT></CENTER></TD>
    <TD><FONT face="Courier New" size=2>Not Special Fully Nested Mode 
    </FONT></TD></TR>
  <TR>
    <TD vAlign=top rowSpan=3>
      <CENTER><FONT face="Courier New" size=2>3:2</FONT></CENTER></TD>
    <TD>
      <CENTER><FONT face="Courier New" size=2>0x</FONT></CENTER></TD>
    <TD><FONT face="Courier New" size=2>Non - Buffered Mode</FONT></TD></TR>
  <TR>
    <TD>
      <CENTER><FONT face="Courier New" size=2>10</FONT></CENTER></TD>
    <TD><FONT face="Courier New" size=2>Buffered Mode - Slave </FONT></TD></TR>
  <TR>
    <TD>
      <CENTER><FONT face="Courier New" size=2>11</FONT></CENTER></TD>
    <TD><FONT face="Courier New" size=2>Buffered Mode - Master</FONT></TD></TR>
  <TR>
    <TD rowSpan=2>
      <CENTER><FONT face="Courier New" size=2>1</FONT></CENTER></TD>
    <TD>
      <CENTER><FONT face="Courier New" size=2>1</FONT></CENTER></TD>
    <TD><FONT face="Courier New" size=2>Auto EOI</FONT></TD></TR>
  <TR>
    <TD>
      <CENTER><FONT face="Courier New" size=2>0</FONT></CENTER></TD>
    <TD><FONT face="Courier New" size=2>Normal EOI</FONT></TD></TR>
  <TR>
    <TD rowSpan=2>
      <CENTER><FONT face="Courier New" size=2>0</FONT></CENTER></TD>
    <TD>
      <CENTER><FONT face="Courier New" size=2>1</FONT></CENTER></TD>
    <TD><FONT face="Courier New" size=2>8086/8080 Mode</FONT></TD></TR>
  <TR>
    <TD>
      <CENTER><FONT face="Courier New" size=2>0</FONT></CENTER></TD>
    <TD><FONT face="Courier New" size=2>MCS-80/85 
</FONT></TD></TR></TBODY></TABLE></CENTER>
<CENTER><FONT face="Courier New" size=2>Initialization Command Word 4 (ICW4) 
</FONT></CENTER>
<DIV align=left><FONT face="Courier New" size=2></FONT>&nbsp;</DIV>
<DIV align=left><FONT face="Courier New" 
size=2>在80x86模式下,我们不需要使用8259A的特殊功能,因此我们将bit1:4都设为0,这意味使用默认的Full Nested 
Mode,不使用Buffer,以及手动EOI模式;我们只需要将bit-0设为1,这也正是我们ICW0处提到的我们为什么必须要ICW4的原因。所以ICW4的值应该被设为0x01。</FONT></DIV>
<DIV align=left><FONT face="Courier New" size=2></FONT>&nbsp;</DIV>
<DIV align=left><FONT face="Courier New" 
size=2>所以我们可以用下列代码初始化2个8259A芯片:</FONT></DIV>
<DIV align=left><FONT face="Courier New" size=2></FONT>&nbsp;</DIV>
<DIV align=left><FONT face="Courier New" size=2>inline void 
init_8259a(void)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp; /* icw1 
*/<BR>&nbsp;&nbsp;&nbsp;&nbsp; outb( 0x11, 0x20 ); /* master port A 
*/<BR>&nbsp;&nbsp;&nbsp; &nbsp;outb( 0x11, 0xA0 ); /* slave port A 
*/</FONT></DIV>
<DIV align=left><FONT face="Courier New" size=2></FONT>&nbsp;</DIV>
<DIV align=left><FONT face="Courier New" size=2>&nbsp;&nbsp;&nbsp;&nbsp; /* icw2 
*/<BR>&nbsp;&nbsp;&nbsp;&nbsp; outb( 0x20, 0x21 ); /* master offset of 0x20 in 
the IDT */<BR>&nbsp;&nbsp;&nbsp;&nbsp; outb( 0x28, 0xA1 ); /*&nbsp;slave offset 
of 0x28 in the IDT */</FONT></DIV>
<DIV align=left><FONT face="Courier New" size=2></FONT>&nbsp;</DIV>
<DIV align=left><FONT face="Courier New" size=2>&nbsp;&nbsp;&nbsp;&nbsp; /* icw3 
*/<BR>&nbsp;&nbsp;&nbsp;&nbsp; outb( 0x04, 0x21 ); /* slaves attached to IR line 
2 */<BR>&nbsp;&nbsp;&nbsp;&nbsp; outb( 0x02, 0xA1 ); /* this slave in IR line 2 
of master */</FONT></DIV>
<DIV align=left><FONT face="Courier New" size=2></FONT>&nbsp;</DIV>
<DIV align=left><FONT face="Courier New" size=2>&nbsp;&nbsp;&nbsp;&nbsp; 
/*&nbsp;icw4 */<BR>&nbsp;&nbsp;&nbsp;&nbsp; outb( 0x01, 0x21 ); /* set as master 
*/<BR>&nbsp;&nbsp;&nbsp;&nbsp; outb( 0x01, 0xA1 ); /*set as slave 
*/<BR>}</FONT></DIV>
<DIV align=left><FONT face="Times New Roman TUR">
<DIV align=left>&nbsp;</DIV>
<DIV align=left>
<HR width="100%" SIZE=2>
</DIV>
<DIV align=left></DIV>
<P align=left><SPAN lang=EN-US><FONT face="Times New Roman"><SPAN 
style="mso-tab-count: 1"><FONT face="Times New Roman TUR" size=5><STRONG>2.5.6 
Operation</STRONG></FONT></SPAN></FONT></SPAN></P>
<P align=left><SPAN lang=EN-US><FONT face="Times New Roman"><SPAN 
style="mso-tab-count: 1"><FONT face="Times New Roman TUR" size=5><SPAN 
lang=EN-US><FONT face="Times New Roman" size=5><SPAN 
style="mso-tab-count: 1"><FONT face=宋体><FONT size=+0><FONT size=3><FONT 
face="Courier New" 
size=2>一旦按照初始化协议初始化完成之后,程序员就可以在任何时候,以任何顺序向8259A发送操作控制字OCW了。</FONT></P>
<P><FONT face="Times New Roman TUR"><FONT 
size=4><STRONG>OCW1</STRONG></FONT>&nbsp;</FONT></P>
<P><FONT face="Times New Roman TUR"></FONT>
<CENTER>
<TABLE width="80%" border=1>
  <TBODY>
  <TR>
    <TD>
      <CENTER><B><FONT face="Courier New" size=2>Bit</FONT></B></CENTER></TD>
    <TD>
      <CENTER><B><FONT face="Courier New" size=2>PIC 2</FONT></B></CENTER></TD>
    <TD>
      <CENTER><B><FONT face="Courier New" size=2>PIC 1</FONT></B></CENTER></TD></TR>
  <TR>
    <TD>
      <CENTER><FONT face="Courier New" size=2>7</FONT></CENTER></TD>
    <TD>
      <CENTER><FONT face="Courier New" size=2>Mask IRQ15</FONT></CENTER></TD>
    <TD>
      <CENTER><FONT face="Courier New" size=2>Mask IRQ7</FONT></CENTER></TD></TR>
  <TR>
    <TD>
      <CENTER><FONT face="Courier New" size=2>6</FONT></CENTER></TD>
    <TD>
      <CENTER><FONT face="Courier New" size=2>Mask IRQ14</FONT></CENTER></TD>
    <TD>
      <CENTER><FONT face="Courier New" size=2>Mask IRQ6</FONT></CENTER></TD></TR>
  <TR>
    <TD>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -