进入保护模式(七)时钟中断

一、8259A可编程控制器

     上一部分已经简单的说了基本的实例化:http://my.oschina.net/u/1185580/blog/187255 

    1. 如下图:对应的是8259a中的中断描述

既然是可编程,那就是对端口的操作了

其实是对:http://wenku.baidu.com/view/dcbef6140b4e767f5acfcef3.html 的抄写

2.下面是整个流程以及对应的图解:

;设置8259A中断控制器
                  mov	al, 011h
	        out	020h, al	; 主8259, ICW1.
	        out	0A0h, al	; 从8259, ICW1
 

 

mov	al, 004h	; IR2 对应从8259
	        out	021h, al	; 主8259, ICW3.
	        
	        mov	al, 002h	; 对应主8259的 IR2
	        out	0A1h, al	; 从8259, ICW3.


mov	al, 001h
	        out	021h, al	; 主8259, ICW4.
	     
	        out	0A1h, al	; 从8259, ICW4.


mov	al, 11111110b	; 仅仅开启定时器中断
	        ;mov	al, 11111111b	; 屏蔽主8259所有中断
	        out	021h, al	; 主8259, OCW1.
	        
	       mov	al, 11111111b	; 屏蔽从8259所有中断
	        out	0A1h, al	; 从8259, OCW1.


mov al,0x20                      ;中断结束命令EOI
              out 0xa0,al                        ;向8259A从片发送
                out 0x20,al                        ;向8259A主片发送


 

二、8253可编程定时、计数器

1.概念       

        定时器:计数对象是内部标准的时钟信号,那么计数就可以是一段时间

        计数器:计数对象如果是外部对应的脉冲信号,则周期不定则为计数

2.定时、计数方法

        硬件法 废材料;

        软件法 CPU利用率

        所以软硬结合

3.芯片介绍

          一个芯片有三个计数器,和六种方式

          直奔主题:#0 计数器 法3 是8259A的IR0(明白说这个跟上面的关系,不设置这个时钟中断默认照样工作的)

                       #1 计数器 法2 是8237A-5DMA控制通道0的DMA请求DREQ0

                       #2 计数器 法3 是8255的PB0 声音的

               控制端口   计数端口

#0            0X43       0X40

#2            0X43       0X41

#3            0X43       0X42

;速度如飞啊,当al初始值0才是最大值
            MOV AL,36H
            OUT 43H,AL ;送控制字到8253的控制寄存器
              mov ax,0xff01
            OUT 40h,al ;送时间常数到2号通道
              out 40h,al

三、RTC

书上第九章《X86汇编语言:实模式到保护模式》

这个触发的是IRQ7实时中断,还有这里可以得到当前的时间

操作端口: 0x70 或者 0x74 是索引端口,0x71 或者 0x75 是数据端口,用来读写相应单元里的内容。
       

;星期几
    mov al,0x06 
    out 0x70,al 
    in al,0x71


 不得不说的是,从很早的时候开始,端口 0x70 的最高位(bit 7)是控制 NMI 中断的开关

2.

;设置和时钟中断相关的硬件 
             mov al,0x0b              ;RTC寄存器B        0000_1011
           or al,0x80              ;阻断NMI           1000_0000  
           out 0x70,al
		   
           mov al,0x12            ;设置寄存器B,禁止周期性中断,开放更 
            out 0x71,al             ;新结束后中断,BCD码,24小时制 

            mov al,0x0c
          out 0x70,al
		   
          in al,0x71            ;读RTC寄存器C,复位未决的中断状态
         ;中断态要重新设置
             mov al,0x0c        ;寄存器C的索引。且开放NMI
              out 0x70,al
              in al,0x71         ;读一下RTC的寄存器C,否则只发生一次中断



 

 

接下来把键盘中断搞定来。^_^

 

转载于:https://my.oschina.net/findurl/blog/188123

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值