芯片8259的初始化程序怎么写

2025-03-03 06:07:00
推荐回答(2个)
回答1:

中断控制器8259A的初始化尤为复杂,他的控制字、方式字相对于8253 8255要多。就给你一道例题吧。

某微机系统使用主、从两片8259A管理中断,从片中断请求INT与主片的IR2连接。设主片工作于特殊完全嵌套、非缓冲和非自动结束方式,中断类型号为40H,端口地址为20H和21H。从片工作于完全嵌套、非缓冲和非自动结束方式,中断类型号为70H,端口地址为80H和81H。试编写主片和从片的初始化程序。


根据题意,写出ICW1, ICW2, ICW3和ICW4的格式,按图6.21的顺序写入。编写初始化程序如下:

;主片8259A的初始化程序如下:

  MOV   AL, 00010001B ; 级联, 边沿触发, 需要写ICW4
  OUT   20H, AL    ; 写ICW1
  MOV   AL, 01000000B ; 中断类型号40H
  OUT   21H, AL    ; 写ICW2
  MOV   AL, 00000100B ; 主片的IR2引脚接从片
  OUT   21H, AL    ; 写ICW3
  MOV   AL, 00010001B ; 特殊完全嵌套、非缓冲、自动结束
  OUT   21H, AL    ; 写ICW4
  
;从片8259A初始化程序如下:

  MOV   AL, 00010001B ; 级联, 边沿触发, 需要写ICW4
  OUT   80H, AL    ; 写ICW1
  MOV   AL, 01110000B ; 中断类型号70H
  OUT   81H, AL    ; 写ICW2
  MOV   AL, 00000010B ; 接主片的IR2引脚
  OUT   81H, AL    ; 写ICW3
  MOV   AL, 00000001B  ; 完全嵌套、非缓冲、非自动结束
  OUT   81H, AL     ; 写ICW4

建议楼主多看看课本,理解里面控制字方式字的格式,多看看例题。

回答2:

你说的是中断控制器8259A吧?这代码量太大了就不贴了
你去下载linux早期的内核源码,很小,地址放下面了
0.11-0.95之类的随你选,其中的system_call.s就是详细的中断初始化代码
不要下最新的内核源码,因为其中包含很多为了支援新式APIC的代码,现代APIC对8259A做了极大的扩展,因此差别很大的
书籍方面,赵炯的《Linux内核完全注释》和于渊的《自己动手写操作系统》都有相关说明,可以找找电子版