Linux内核中的可编程间隔定时器PIT

Linux内核中的可编程间隔定时器PIT(Programmable Interval Timer)

    每个PC机中都有一个PIT,通过IRQ产生周期性的时钟中断信号来充当系统定时器。i386中使用的通常是Intel 8254 PIT芯片,它的I/O端口地址范围是40h~43h。

    8254 PIT有3个计时通道,每个通道都有其不同的用途:

        通道0用来负责更新系统时钟。它在每一个时钟滴答会通过IRQ0向系统发出一次时钟中断信号。
        通道1通常用于控制DMAC对RAM的刷新。
        通道2被连接到PC机的扬声器,以产生方波信号。

    下面我们重点关心通道0。

    每个通道都有一个递减的计数器,8254 PIT的输入时钟信号的频率是1.193181MHZ,也即一秒钟输入1193181个时钟周期。该数字在Linux内核中被定义为:

include/asm-i386/timex.h

#define  CLOCK_TICK_RATE 1193180

     每输入一个时钟周期其时间通道的计数器就自减1,一直减到0。因此对于通道0而言,当他的计数器减到0时,PIT就向系统产生一次时钟中断,表示一个时钟滴答已经过去了。该计数器为16bit,因此所能表示的最大值是65536,可以算出该定时器最慢一秒内能发生的滴答数是:1193181 / 65536 = 18.206482。

    PIT的I/O端口:
        40h    通道0计数器    可读写
        41h    通道1计数器    可读写
        42h    通道2计数器    可读写
        43h    控制字         只写

    注意,因为PIT I/O端口是8位的,而PIT相应计数器是16位的,因此必须对PIT计数器进行两次读写才能得到完整的计数值。

    8254 PIT的控制寄存器43h的格式如下:

        bit[7:6]为通道选择位:
            00    通道0
            01    通道1
            10    通道2
            11    read-back command(仅8254)。

        bit[5:4]为Read/Write/Latch锁定位:
            00    锁定当前计数器以便读取计数值
            01    只读高字节
            10    只读低字节
            11    先高后低

        bit[3:1]为设定各通道的工作模式:
            000   mode0    当通道处于count out时产生中断信号,可用于系统定时
            001   mode1    Hardware retriggerable one-shot
            010   mode2    Rate Generator。产生实时时钟中断,通道0通

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值