关于 Intel 8253/8254

news/2024/12/29 2:18:23/

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。


http://www.ppmy.cn/news/115738.html

相关文章

高通8155/8295 boot分析

目录 前言 通用boot流程 8155/8295 boot流程概述 前言 本文将基于高通8155/8295 QA hypervisor平台分析整个boot的启动流程。高通其他SOC芯片的启动流程大致相同,所以本文也具备一定的参考性。 阅读本文需要你有一定的嵌入式开发经验或者具备一定的操作系统原理…

​​​​Linux Shell 实现一键部署Ruby3

ruby Ruby,一种简单快捷的面向对象(面向对象程序设计)脚本语言,在20世纪90年代由日本人松本行弘(Yukihiro Matsumoto)开发,遵守GPL协议和Ruby License。它的灵感与特性来自于 Perl、Smalltalk、Eiffel、Ada以及 Lisp …

Python版本区别,Python 3和Python 2区别详解

目录 Python 3.x print()函数代替了print语句 Python 3.x 默认使用 UTF-8 编码 Python 3.x 除法运算 / 运算符 运算符 // Python 3.x 异常 Python 3.x 八进制字面量表示 Python 3.x 不等于运算符 Python 3.x 输入差异 Python 3.x 数据类型 Python 版本分为两大流派&am…

idea常用快捷键

ctrl快捷键 ctrln 查找类 ctrlshiftn 查找文件 ctrlshiftaltn 查找类中的方法或变量 ctrlp 方法参数提示 ctrlaltl 格式化代码 ctrlspace 代码提示 ctrlshiftu 大小写转换 ctrld 复制行 ctrlx 删除行 ctrlg 定位行 ctrlaltt 把选中的代码放到{}中 ctrl/ 或 ctrlshift/ 注释&am…

关于matlab好文推荐

“Matlab”是“Matrix Laboratory” 的缩写,中文“矩阵实验室”,是强大的数学工具。本文侧重于Matlab的编程语言侧面,讲述Matlab的基本语法,以及用Matlab语言进行程序设计。值得一提的是,Matlab从R2014a版本开始支持中…

都匀一中2021高考成绩查询,都匀一中2021年排名

现在是属于招生季,所有的学校都在开始招生,这也就表明家长的选择性有很多,但是家长们都想找好学校,但是又分不出那些学校好,那些又不好,而小编就准备了都匀一中排名,供与参考。 都匀一中排名 排…

热水器哪个牌子好十大排名2022

热水器牌子比较好的有:海尔、万和、万家乐、火王、樱花、阿里斯顿、华帝、A。O。史密斯、能率、美的等 家里的热水器就是活动时8折抢购的机会不容错过 http://www.adiannao.cn/dn 1、海尔热水器 海尔集团热水器公司,从1986年生产中国第一代电热水器开始…

湖南计算机专业好单招,中方计算机单招学校排名

中方计算机单招学校排名 湖南硅谷高科软件学院是一所专业针对性较强的全日制IT职业学院,以打造硅谷,培养顶的尖软件人才为目的。目前在校学生近2000人,累计为全国培养了30000余名专业高的端的IT实用人才,得到社会各界一致好评&…