Chinaunix首页 | 论坛 | 博客
  • 博客访问: 47353
  • 博文数量: 22
  • 博客积分: 598
  • 博客等级: 中士
  • 技术积分: 230
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-26 08:49
文章分类
文章存档

2011年(1)

2010年(21)

最近访客

分类:

2010-05-23 21:10:58

  可编程中断控制器是一种用来统一管理硬件中断的设备。英文全名,Programmable Interrupt Controller。最为典型的是Intel的8259A。
 
   8259A逻辑图:
  

   寄存器:
   中断请求寄存器(IRR):保存中断请求输入引脚上所有请求服务中断级。寄存器8位D7--D0分别对应引脚IR7--IR0.
   中断屏蔽寄存器(IMR): 保存被屏蔽中断请求线对应的位。寄存器8位分别对应8个中断级,哪位置位哪表示相应级中断被屏蔽。
   正在服务寄存器(ISR):保存正在接受服务的中断请求。
   初始化命令字寄存器:保存初始化命令字(ICWS)
   操作命令寄存器组:保存操作命令字(OCWS)

   8259A在正常工作前须设置初始化命令字(ICW)寄存器组内容,在工作过程中可以写入操作命令字(OCW)寄存器组来随时设置和管理工作方式。8259A采用写端口方式输入命令,逻辑图中的A0用来决定端口地址。A0=0 端口用0x20(主)和0xA0(从),A0=1 端口用0x21(主)和0xA1(从)。

   8259A在x86下工作流程:
   1)硬件设备通过中断线(IR7--IR0)向8259A发出中断信号,IRR中相应位置位。
     One or more IR lines are raised high, setting the corresponding IRR bit(s).
   2) 通过与IMR检查如果中断未被屏蔽,发出INT信号到CPU。
     Evaluate the requests and send an INT to CPU if appropriate.
   3) CPU结束当前指令后像8259A发送中断INTA脉冲。
     The CPU acknowledges the INT and responds with an INTA pulse.
   4) 8259A在接收INTA时将优先级最高的中断响应ISR位置位,IRR位复位,表示中断正在处理。
     Upon receiving an INTA from CPU, the highest priority ISR bit is set and the corressponding
   IRR bit is reset. The 8259A dose not drive the the Data Bus at during this cucle.
   5) CPU发送第二次INTA脉冲,在该脉冲信号信号期间8259A把中断号放入数据总线供CPU读取。
     CPU initiate a second INTA pulse. During this pulse 8259A release the 8-bit pointer onto the
   Data Bus where it is read by CPU.
   6) 中断周期结束。如果8259A使用的是自动结束中断AEOI方式,在第二个INTA脉冲信号结尾处ISR中当前服
   务中断比特位会被复位。如果使用的是非自动结束中断方式,中断服务程序在结束时须想8259A发送结束中断
   命令来复位ISR中的比特位。如果是级联方式,则需要向两个芯片都发送EOI。
     In the AEOI mode the ISR bit is reset at the end of the second INTA pules. Otherwise, the ISR
   bit remains set until an appropriate EOI command is issued at the end of interrupt subroutins. 

   8259A初始化流程图:
  

   1)设置ICW1, A0 = 0, 端口0x20(主),0xA0(从)。
      命令字8位D7--D0:
      D0: =1 需要IC4,=0 不需要IC4。
      D1: =1 单片8259A,=0多片
      D2: MCS80/85用于CALL指令地址间隔,x86无用
      D3: =1 电平触发中断方式, =0 边沿触发方式
      D4: =1 恒值
      D5--D7: 用于MCS80/85中断服务过程的页面其实地址,与ICW2的D7--D0共同组成。x86无用。
   2)设置ICW2,A0 = 1, 端口0x21(主),0xA1(从)。
      MCS80/85中雨ICW1的D7--D5组成中断服务页面地址。x86中D7--D3位作为中断号的高5位,与芯片自动设
      置的低3位共同组成8位中断向量号。
      比如可以把主片ICW2设置为0x20,表示主片产生的中断向量为0x20--0x27
   3)设置ICW3(如果ICW1的D1=0),多个芯片级联时,加载从寄存器。A0 = 1, 端口0x21(主),0xA1(从)
      主片的D7--D0 哪位为1表示主片改中断请求引脚IR上信号来自从片
      从片的D2--D0 对应各从片的标示,从片接收到级联线CAS2--CAS0输入值与D2--D0值相同,标示此片选中。
      此时改从片向数据线发送中断号。
   4)设置ICW4(如果ICW1的D0=1)。A0 = 1, 端口0x21(主),0xA1(从)。
      D0: =1 x86, =0 MCS80/85
      D1:  =1 自动结束中断,=0 非自动
      D2: =1 缓冲方式下主片,=0 缓冲方式下从片
      D3: =1 缓冲方式,=0 非缓冲方式
      D4: =1 特殊全嵌套方式,=0 普通全嵌套方式
      D5--D7: =0 恒值
      通常值:0x01 标示普通全嵌套、非缓冲、非自动结束中断。
  
   中断操作命令字
   1)OCW1,用于屏蔽中断。 A0=1,端口0x21(主),0xA1(从)。
      D7--D0对应8个中断请求的屏蔽位,哪位为1标示哪个中断被屏蔽
   2)OCW2,用于发送EOI命令和设置中断优先级自动循环方式。A0=0,端口0x20(主),0xA0(从)。
      D0--D2 组成级别号,对应IRQ0--IRQ7
      D3D4=0
      D5, =1 非自动结束, 0 自动结束
      D6, 优先级设定标志
      D7, 优先级循环状态
      通常值:0x20,表示全嵌套非特殊结束中断EOI命令。
   3)OCW3,设置特殊屏蔽方式和读取寄存器状态。
      D4D3=01,A0=0,对 OCW3进行读写

   TODO:PIC implement.
     
    
     
  
  
  
 

 
阅读(2506) | 评论(1) | 转发(0) |
0

上一篇:滥竽充数

下一篇:歪改信天游

给主人留下些什么吧!~~

安何2010-05-27 09:44:50