Intel 8253/8254是一个可编程定时/计数器(PIT-Programmable Interval Timer)芯片,用于处理计算机中的精确时间延迟。该芯片提供了 3个独立的16位计数器通道。每个通道可工作在不同的工作方式下, 并且这些工作方式均可以使用软件来设置。

对于PC/AT及其兼容微机系统采用的是8254芯片。Linux 0.11操作系统只对通道0进行了重新设置,使得该计数器工作在方式3下,并且每间隔10毫秒发出一个信号以产生中断请求信号(IRQ0)。这个间隔定时产生的中断请求就是Linux 0.11内核工作的脉搏,它用于定时切换当前执行的任务和统计每个任务使用的系统资源量(时间)。

1、Intel 8253 (8254)芯片功能

Intel 8253 (或 8254)是一个可编程定时/计数器(PIT-Programmable Interval Timer)芯片,用于解决计算机中通常碰到的时间控制问题,即在软件的控制下产生精确的时间延迟。该芯片提供了3个独立的16位计数器通道。每个通道可工作在不同的工作方式下,并且这些工作方式均可以使用软件来设置。

8254是8253的更新产品,主要功能基本一样,只是8254芯片増加了回读命令。在下面描述中我们用8253来代称8253和8254两种芯片,仅在它们功能有区别处再特别加以指出。

2、端口说明

对于PC/AT及其兼容微机系统,采用的是8254芯片。3个计数器的输入时钟频率都是 1.193180MHz。PC/AT微机中8254芯片连接示意图如下。

其中A1、A0管脚被连接到系统地址线A1、A0上。并且当系统地址线A9–A2信号是0b00100 00时会选择8254芯片,因此PC/AT系统中8254芯片的IO端口地址范围是0x40—0x43。其中0x40~0x42分别对应计数器通道0~2,0x43对应控制字寄存器写端口。

3、编程方法

当系统刚上电时,8253的状态是未知的。通过向8253写入一个控制字和一个初始计数值,我们就可以对想要使用的一个计数器进行编程。对于不使用的计数器我们可以不必对其编程。

在CPU执行写操作时,若A1,A0线为11 (此时在PC微机上对应端口 0x43),那么控制字会被写入控制字寄存器中。而控制字的内容会指定正在编程的计数器通道。

通道0、1、2分别对应PC机端口 0x40、0x41和0x42,当控制字写完后,就可以向某个通道写入初始计数值。

注意:在写入操作时,必须首先写入控制字,然后再写入初始计数值。初始计数值必须根据控制字中设定的格式写入(二进制或BCD码格式)。在计数器开始工作时,我们仍然能随时向指定计数器重新写入新的初始值,这并不会影响已设置的计数器的工作方式。

1、控制字的格式

控制字的格式如下图所示。

    movb $0x36, %almovl $0x43, %edxoutb %al, %dx

以上代码用于向端口0x43写入控制字0x36,对照上图,得知选中通道0,先读写低字节再读写高字节,工作方式3,采用二进制计数。

2、工作方式三——方波发生器方式

工作方式一共有6种,这里仅说明方式3,因为Linux-0.11用的就是这种方式。

方式3:方波发生器方式(Square Wave Mode)
该方式输出的是方波。如果初始计数值是N, 那么方波的频率是输入时钟的N分之一。该方式的特点是方波占空比约为1比1 (当N为奇数时略有差异),并且在计数器递减过程中若重新设置新的初始值,这个初始值要到前一个计数完成后才起作用。

在工作方式3下,方波的频率是输入时钟频率的N分之一,又因为计数器的输入时钟频率是 1.193180MHz=1193180Hz,所以

         1193180/N = 方波的频率(Hz)

如果想让计数器每10ms(=100Hz)发出一个方波上升沿用以产生中断请求信号的话,那么N=1193180/100.

Linux 0.11操作系统只对8254的计数器通道0进行了重新设置,使得该计数器工作在方式3下,计数初始值采用二进制,并且初始计数值被设置为LATCH (1193180/100)。即让计数器0每间隔10毫秒发出一个方波上升沿以产生中断请求信号(IRQ0)。

    movl $11931, %eax        # timer frequency 100 HZ movl $0x40, %edxoutb %al, %dx            # 先写低字节movb %ah, %aloutb %al, %dx            # 再写高字节

继续上文的代码,在写入控制字后,要写入初始计数值。因为控制字选择了0通道,所以写初始计数值的端口是0x40. 如果要产生100Hz的方波,那么写入的初始值是1193180/100 ,约等于 11931。

关于 Intel 8253/8254相关推荐

  1. 微机 —— 可编程定时器/计数器 8253/8254

    可编程定时器/计数器 8253/8254介绍 一.8253芯片引脚 二.8253芯片的内部结构 三.8253的初始化编程(重点) 四.8253的工作方式(重点) 五.8253六种工作方式的比较: 六. ...

  2. 微机接口芯片(2)—— 可编程定时/计数接口芯片 8253/8254

    总结微机原理课学习的若干芯片 教材--<微机原理与接口技术> 文章目录 〇.思维导图 一.定时/计数 概述 二.8253/8254 内部结构及引脚信号 1. 主要功能 2. 内部结构和外部 ...

  3. 可编程定时/计数器 8253/8254

    在微机应用系统中,定时控制具有重要的作用.经常会有这样的应用要求:一种是要求有一些外部实时时钟,以实现延时控制或定时:另一种是要求能对外部事件计数的计数器.在微机系统中,常采用以下三种方法实现:软件定 ...

  4. 计数器/定时器8253/8254

    计数器/定时器8253/8254 计数器/定时器的原理图 8253/8254的编程结构 CLK时钟输入信号:在计数过程中,此引脚上每输入一个时钟信号(下降沿),计数器的计数值减1 GATE门控输入信号 ...

  5. 微机原理与接口技术之8255A和8253/8254 必考的编程题

    关注公众号,回复"微机编程题",免费获取文件版资源,方便打印,方便随时阅读. 可编程并行通信接口8255A 1.如下图所示:现将8255A的B口作为传送字符的通道,工作于方式0,输 ...

  6. 数字电路与微型计算机原理,电子科技大学1999年考研真题-微机原理与数字电路...

    电子科技大学1999年考研真题-微机原理与数字电路本站小编 FreeKaoyan/2018-01-22 电子科大1999微机原理与数字电路试题 考试科目:微机原理与数字电路 注:应届生作所有不加*的题 ...

  7. 现代x64的APIC中断控制器架构

    现代x64的APIC中断控制器架构分为以下几个部分: 指令集中断架构:指令集层面处理中断的逻辑 x64使用IDT对256个中断向量进行分发(IDT格式参考Intel手册),前32个是CPU异常,后22 ...

  8. 【读书笔记】Linux内核完全注释第二章:微型计算机组成结构

    非常主观的笔记,只是摘抄一下自己觉得比较重要的地方,并不会概述所有内容(概括能力太差是这样的) 2.微型计算机组成结构 2.1 微型计算机组成原理 除了 CPU 以外,现代 PC 机主板主要使用 2 ...

  9. Linux内核完全注释 阅读笔记:2.4、控制器和控制卡

    By: Ailson Jack Date: 2018.09.04 个人博客:  http://www.only2fire.com/ 本文在我博客的地址是:http://www.only2fire.co ...

最新文章

  1. 3月6日工作日志-88250
  2. Jmeter之完整的HTTP接口测试
  3. stl vector 函数_vector :: pop_back()函数以及C ++ STL中的示例
  4. oledbdataadapter 取不到数据 plsql能取到 date_Python3 CookBook | 数据结构和算法(二)...
  5. IOS基础学习日志(七)利用dispatch_once创建单例及使用
  6. R语言-运筹学线性规划实例
  7. 投票统计器用单片机c语言编写,基于51单片机的投票器毕业论文.doc
  8. 解决confuserEx混淆导致类名消失的问题
  9. 项目质量管理可能存在的问题及应对策略
  10. linux设置mysql开机启动
  11. SAP中不同质检类型对收货的影响的现实案例分析
  12. python docx 合并文档 图片_python玩转pdf全攻略
  13. 【java校招你不知道的那些事儿】校招分层级,找准定位很重要
  14. python在图片上添加文字 - cv2模块的安装与使用
  15. 汽车电子功能安全标准ISO26262解析(五)——FTA
  16. 正则表达式的常规用法 替换 查找
  17. element 表格+分页封装
  18. 程序员怎么跟领导提涨薪?
  19. NVIDIA vGPU License服务器安装过程
  20. C语言_有趣的逻辑推理问题

热门文章

  1. js中json法创建对象(json里面的:相当于js里面的=)
  2. windows下默认以管理员身份运行程序
  3. Oracle配置OneMap中的sql数据库问题及解决方案
  4. 使用JQUERY实现局部页面定时刷新
  5. 初读设计模式-----《design pattern explained》读后感
  6. Google 联合 Plaxo 对 OpenID 进行改进
  7. Asp.net系列计划
  8. SQL Server 2005 SP2发布了,开发人员怎么办?
  9. Linux下远程连接断开后如何让程序继续运行
  10. NVIDIA cuda7在centos6.5中的安装