📄 interrupt-8259_5.htm
字号:
<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 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> </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> </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> </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> </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> </DIV>
<DIV align=left><FONT face="Courier New"
size=2>所以我们可以用下列代码初始化2个8259A芯片:</FONT></DIV>
<DIV align=left><FONT face="Courier New" size=2></FONT> </DIV>
<DIV align=left><FONT face="Courier New" size=2>inline void
init_8259a(void)<BR>{<BR> /* icw1
*/<BR> outb( 0x11, 0x20 ); /* master port A
*/<BR> outb( 0x11, 0xA0 ); /* slave port A
*/</FONT></DIV>
<DIV align=left><FONT face="Courier New" size=2></FONT> </DIV>
<DIV align=left><FONT face="Courier New" size=2> /* icw2
*/<BR> outb( 0x20, 0x21 ); /* master offset of 0x20 in
the IDT */<BR> outb( 0x28, 0xA1 ); /* slave offset
of 0x28 in the IDT */</FONT></DIV>
<DIV align=left><FONT face="Courier New" size=2></FONT> </DIV>
<DIV align=left><FONT face="Courier New" size=2> /* icw3
*/<BR> outb( 0x04, 0x21 ); /* slaves attached to IR line
2 */<BR> outb( 0x02, 0xA1 ); /* this slave in IR line 2
of master */</FONT></DIV>
<DIV align=left><FONT face="Courier New" size=2></FONT> </DIV>
<DIV align=left><FONT face="Courier New" size=2>
/* icw4 */<BR> outb( 0x01, 0x21 ); /* set as master
*/<BR> outb( 0x01, 0xA1 ); /*set as slave
*/<BR>}</FONT></DIV>
<DIV align=left><FONT face="Times New Roman TUR">
<DIV align=left> </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> </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 + -