Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1031145
  • 博文数量: 123
  • 博客积分: 5051
  • 博客等级: 大校
  • 技术积分: 1356
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-14 10:56
文章分类
文章存档

2012年(1)

2011年(21)

2010年(13)

2009年(55)

2008年(33)

分类: LINUX

2009-03-11 16:39:30

8253的结构与功能
(8253是为方便计算机系统的设计和应用而研制的,定时值和范围可以很容易地由软件来控制和改变,能够满足各种不同的定时和计数要求。)

8253是24脚双列直插式芯片,使用的是+5V电源供电。芯片内有三个相互独立的16位定时/计数器。
8253由数据总线缓冲器、读/写逻辑、控制字寄存器以及3个独立的16位计数器组成。
每个计数器包括一个8位的控制寄存器、一个16位的计数初值寄存器CR、一个16位的减1计数器CE和一个16位的输出锁寄存器OL。其中CR和OL同用一个I/O端口地址,CPU使用输出指令向CR预置计数初值,使用输入指令读回OL中的数值,这两个寄存器起到的是锁存作用。16位的减1计数器CE执行计数操作,其操作方式受控制寄存器控制。

1、控制寄存器
此寄存器保存来自CPU的控制字。每个计数器都有一个控制命令寄存器,用来保存该计数器的控制信息。控制字将决定计数器的工作方式,计数形式以及输出方式,也决定如何装人计数初值。8253三个计数器只占用了一个地址号,而靠控制字的最高两位来确定将控制信息送入哪个计数器的控制寄存器中保存。控制寄存器只能写入,而不能读出。

2、数据缓冲器
用于和系统数据总线的连接,CPU通过数据缓冲器将控制命令字和计数值写入8253计数器,或者从8253计数器中读取当前的计数值。

3、读/写逻辑
接受来自CPU的控制信号,完成对8253内部操作的控制。控制信号包括读信号(/RD),写信号(/WD),片选信号(/CS)以及用于片内寄存器寻址的地址信号A1和A0。只有片选信号有效,读写逻辑才能工作。这些信号的使用决定了3个计数器和控制寄存器中的哪一个工作,并控制内部总线上数据传送的方向。

下面通过一段代码程序来对8253进行了解
(此处假设8253芯片的端口地址为388H~38BH,要求计数器0工作在方式3,计数初始值为2354,十进制计数;计数器1工作在方式2,计数初始值为18H,二进制计数;)
MOV    DX,38BH        ;这里将38BH作为8253的控制字端口地址,下面的两端代码也一样
MOV    AL,00110111B
OUT    DX,AL
MOV    DX,388H        ;这里应该注意的一点是端口号的使用,计数器0为四个端口号中最低的号,计 ;数器1次之,计数器2则为第二个端口号,最高的就是控制字了
MOV     AL,54H        ;送计数初值的低8位
OUT    DX,AL
MOV    AL,23H        ;送计数初值的高8位
OUT    DX,AL
;计数器1的初始化程序
MOV     DX,38bH        ;给计数器1送控制字
MOV    AL,01010100B
OUT    DX,AL
MOV    DX,389H        ;计数初值送低8位置
MOV    AL,18H
OUT    DX,AL
;计数器0当前计数值读出程序
MOV     DX,38BH        ;送计数器0当前计数值锁存命令
MOV    AL,00H
OUT    DX,AL
MOV    DX,388H        ;读出当前计数值的低8位
IN    AL,DX
MOV     CL,AL
IN    AL,DX        ;读出当前计数值的高8位
MOV    CH,AL

首先,需要了解的是:对于8253占用4个I/O地址。A1A0=00时,作为计数器中的CR和OL寄存器的公用地址,通过控制信号WR和RD来决定选择两者其中之一。如果为WR信号,那么就为计数初值CR的地址,如果为RD信号,就为OL寄存器地址。当A1A0=01和10时,分别为计数器1和计数器2 的CR和OL的公用地址。当A1A0=11时,是3个计数器内的3个控制寄存器的共用地址。

8253的控制字格式
(下面是8位字节的使用功能分布)
计数器选择(D7~D6) 读写格式(D5~D4) 工作方式(D3~D1) 数制(D0)
1、读写取值相对应的格式:
00-将减1计数器CE中的数据所存到OL中
01-对计数器的低8位读或写
10-对计数器的高8位读或写
11-计数器16位操作(先低8位,后高8位)

2、8253的读/写操作
1、写操作
所谓的写操作就是指CPU对8253写入控制字或者是写入计数初值。8253在开始工作之前,CPU要对其进行初始化编程。
1、对每个计数器,必须首先写控制字,后写计数初值。
2、写入的计数初值必须符合控制字决定的格式。

读操作
所谓的读操作是指读出某计数器的当前计数值到CPU中,有两种读取当前计数值的方法:
1、先使计数器停止技术,根据控制字的状态,用一条或者两条输入指令读CE的内容。
2、在计数的过程中不影响CE的计数而读取计数值。我们可以先向8253写入一个具有所存功能的控制字,这样就可以将当前的CE内存所存人OL中,然后再用输入指令将OL的内容读到CPU中。当CPU读取了计数值后,或者是对计数器重新进行初始化编程后,8253会自动解除所存状态,OL中的值又随减1计数器CE值变化。

在8253计数器在工作之前,用户必须对其进行初始化编程:
首先CPU用输出指令向控制寄存器送控制字,然后再用输出指令向计数初值寄存器CR预置计数/定时的初值。启动工作后,CR中的初值就送人减1计数器CE对CLK输入的计数/定时脉冲信号进行减1计数。当CE中的内容减为0,表示计数/定时到,则OUT端输出信号。这就是时钟中断计时操作。

参考:《微型计算机原理》 王忠民 主编
阅读(2888) | 评论(0) | 转发(0) |
0

上一篇:任务管理(80x86结构)1

下一篇:seg cs 的使用

给主人留下些什么吧!~~