以上是8253的内部结构。
8253内部有三个计数器,分别成为计数器0、计数器1和计数器2,他们的机构完全相同。每个计数器的输入和输出都决定于设置在控制寄存器中的控制字,互 相之间工作完全独立。每个计数器通过三个引脚和外部联系,一个为时钟输入端CLK,一个为门控信号输入端GATE,另一个为输出端OUT。每个计数器内部 有一个8位的控制寄存器,还有一个16位的计数初值寄存器CR、一个计数执行部件CE和一个输出锁存器OL。
执行部件实际上是一个16位的减法计数器,它的起始值就是初值寄存器的值,而初始值寄存器的值 是通过程序设置的。输出锁存器的值是通过程序设置的。输出锁存器OL用来锁存计数执行部件CE的内容,从而使CPU可以对此进行读操作。顺便提一 下,CR、CE和OL都是16位寄存器,但是也可以作8位寄存器来用。
2. 8253的内部结构
8253内部结构框图如图8.2所示。它由数据总线缓冲器、读/写逻辑、控制字寄存器以及三个独立的16位计数器组成。
(1) 3个独立的16位计数器
每个计数器具有相同的内部结构,其逻辑框图如图8.3所示。 它包括一个8位的控制寄存器、一个16位的计数初值寄存器CR、一个16位的减1计数器CE和一个16位的输出锁存寄存器OL。16位的计数初值寄存器 CR和16位的输出锁存寄存器OL共同占用一个I/O端口地址,CPU用输出指令向CR预置计数初值,用输入指令读回OL中的数值,这两个寄存器都没有计 数功能,只起锁存作用。16位的减1计数器CE执行计数操作,其操作方式受控制寄存器控制,最基本的操作是:接受计数初值寄存器的初值,对CLK信号进行 减1计数,把计数结果送输出锁存寄存器中锁存。
(2) 控制寄存器
控制寄存器用来保存来自CPU的控制字。每个计数器都有一个控制命令寄存器,用来保存该计数器的控制信息。控制字将决定计数器的工作方式、计数形 式及输出方式,亦决定如何装入计数初值。8253的3个控制寄存器只占用一个地址号,而靠控制字的最高两位来确定将控制信息送入哪个计数器的控制寄存器中 保存。控制寄存器只能写入,不能读出。
(3) 数据缓冲器
数据缓冲器是三态、双向8位缓冲器。它用于8253和系统数据总线的连接。CPU通过数据缓冲器将控制命令字和计数值写入8253计数器,或者从8253计数器中读取当前的计数值。
(4) 读/写逻辑
读/写逻辑的任务是接收来自CPU的控制信号,完成对8253内部操作的控制。这些控制信号包括读信号RD、写信号WR、片选信号CS以及用于片 内寄存器寻址的地址信号A0和A1。当片选信号有效,即CS=0时,读写逻辑才能工作。该控制逻辑根据读/写命令及送来的地址信息,决定三个计数器和控制 寄存器中的哪一个工作,并控制内部总线上数据传送的方向。
8253共占用4个I/O地址。当A1A0=00时,为计数器0中的CR(计数器0的计数初值写入该寄存器)和OL(计数器0的当前计数值从该寄 存器读出)寄存器的共用地址,至于是将计数初值写入CR,还是从OL中读出当前计数值,则由控制信号WR和RD决定,这两个信号同时只能有一个有效。当 A1A0=01和10时,分别为计数器1和计数器2的CR和OL的共用地址。当A1A0=11时,是3个计数器内的3个控制寄存器的共用地址,至于CPU 是给哪个计数器送控制信号,则由控制字中的最高两位的编码来决定。8253的端口地址分配及内部操作.
8253计数器在工作之前。用户必须对其进行初始化编程:首先CPU用输出指令向控制寄存器送控制字,然后再用输出指令向计数初值寄存器CR预置计数/定 时的初值。启动工作后,CR中的初值就送入减1计数器CE对CLK输入的计数/定时脉冲信号进行减1计数。当CE中的内容减为0,则表示计数/定时到,则 OUT端输出信号。输出信号的波形形式由工作方式决定。
25 movb $0X36 %al 控制字
这是对控制子的设置,根据以上说明 每个计数器内部 有一个8位的控制寄存器,还有控制寄存器的作用,
8253控制字
D7 D6 D5 D4 D3 D2 D1 D0
SC1 SC0 RH1 RL0 M2 M1 M0 BCD
SC1 SC0 00计数通道0 01 选择通道1 10 选择通道2 11无效
SC1 SC0 ---计数通道选择位。由于8253内部3个计数通道各有一个8位的控制字寄存器,而这三个控制字寄存器共用同一个控制端口地址,
所以控制字中设置SC1,SC0这两位来确定CPU当前发出的控制字是写入那个计数通道
00 计数器锁存,供CPU读 01 只读/写计数器低字节 10 只读/写计数器高字节 11 先读/写计数器低字节,后读/写高字节
RL1 RL0 ---读/写操作方式位。这两位用来确定对选中的计数通道进行读/写操作的方式。当CPU对8253进行16位读/写操作时。可以只读/写
高8位或只读/写低8位。。。具体那种操作方式由RL1,RL0这两位的编码确定。由于8253的数据线只有(D7—D0)一次只能传送8位数据
故传送16位数据时要分两次进行。
M2 M1 M0
工作方式的选择位,8253每个计数通道有6种不同的工作方式,
BCD 计数方式选择位,8253的每个计数通道有两种计数方式按二进制或十进制BCD计数,
例如:若选择计数器1,工作在方式3 计数初值位588H采用二进制计数,则其控制字为 01110110=76H ,设控制口地址位043H,将该
控制写入控制字寄存器的指令如下:
MOV AL , 076H
OUT 043H , Al
1. 8253的控制字格式
8253的控制字格式如图8.4所示。
D7D6位是控制字的计数器编号。由于8253有3个独立的控制寄存器,但它们共用一个端口地址(A1A0=11时,见表8.1),因此,控制字中使用最高两位表明将控制字写入哪个计数器的控制寄存器中。
D5D4位用来设定计数器的数据读/写方式。在给计数器写入计数初值时,可以赋16位的初值,也可以只赋8位(另8位被自动置0),8位初值可以 是高字节,也可以是低字节。在读取计数器当前的计数值时,计数器并未停止计数,有可能在先后读高低字节时,计数器的值发生变化,因此有必要先锁存当前的计 数值,然后再分字节读出,先读出低8位数据,后读出高8位数据。当D5D4=00时,计数器的当前计数值被锁存在OL中,此时计数器照常计数,但OL中的 值不变,待CPU将OL中的两字节数据读走后,OL中的内容又随减1计数器CE变化。当D5D4=01,只读/写低8位,高8位自动置0; D5D4=10时,只读/写高8位,低8位自动置0; D5D4=11时,先读/写低8位,再读/写高8位。
D3D2D1位决定了计数器的工作方式。8253共有六种工作方式,后面将一一介绍。
D0决定计数器的数制。D0=0,选择二进制计数;D0=1,选择十进制计数。
2. 8253的读/写操作
(1) 写操作
所谓写操作是指CPU对8253写入控制字或写入计数初值。8253在开始工作之前,CPU要对其进行初始化编程(写入控制字和计数初值),具体应注意以下两点:
① 对每个计数器,必须先写控制字,后写计数初值。因为后者的格式是由前者决定的。
② 写入的计数初值必须符合控制字(D5D4两位)决定的格式。16位数据应先写低8位,再写高8位。
当给8253中的多个计数器进行初始化编程时,其顺序可以任意,但对每个计数器进行初始化时必须遵循上述原则。
(2) 读操作
所谓读操作是指读出某计数器的当前计数值到CPU中。有两种读取当前计数值的方法:
① 先使计数器停止计数(在GATE端加低电平或关闭CLK脉冲):根据送入的控制字中的D5D4位的状态,用一条或两条输入指令读CE的内容。实际 上,CPU是通过输出锁存器OL读出当前计数值的,因为在计数过程中,OL的内容是跟随CE内容变化的。此时由于CE不再计数,故可稳定地读出OL(即 CE)的内容。
② 在计数的过程中不影响CE的计数而读取计数值:为达此目的,应先对8253写入一个具有锁存功能的控制字,即D5D4位应为00,这样就可以将当前的CE 内容锁存入OL中,然后再用输入指令将OL的内容读到CPU中。当CPU读取了计数值后,或对计数器重新进行初始化编程后8253会自动解除锁存状 态,OL中的值又随减1计数器CE值变化。
I/O指令:
不同的CPU,其I/O指令的格式与功能差异较大,主要体现在寻址方式方面。INTER80X86CPU采用I/O端口单独寻址方式寻址外设,其中用到的专用指令有两个:IN和OUT。这两个指令的目标寄存器(对IN指令)和原寄存器(对OUT指令)必须是AL(8位d端口)AX(16)EAX(32)。对端口8位可直接寻址,对端口地址是16位的,要用DX进行间接寻址,
例如:
直接I/O端口寻址方式:
IN AL 61H 从8位端口61H读入一个8位数
OUT 62H AL 将AL中的8位数写到8位端口62H
间接端口寻址方式:
IN AL DX 从8位端口地址(端口地址在DX中)读入一个8位数
IN AX, DX 从16位端口(端口地址在DX中)读入一个十六位数
OUT DX AX 将AX中的16位数写到16位端口(端口地址在DX中)
IN EAX DX 从32位端口(端口地址在DX中)读入一个32位数
8.1.3 8253的工作方式
8253有六种不同的工作方式。不同的工作方式下,计数过程的启动方式不同,OUT端的输出波形不同,自动重复功能、GATE的控制作用以及更新计数初值对计数过程的影响也不完全相同。同一芯片中的三个计数器,可以分别编程选择不同的工作方式。
1.方式0——计数结束产生中断
这是一种软件启动,不能自动重复的计数方式。
如图8.5所示,写入方式0的控制字(CW)后,其输出端变低。再写入计数初值N(图中N=5),在写信号WR以后经过CLK的一个上升沿和一个下降沿,初值进入减1计数器CE。计数器减到零后,OUT成为高电平。此信号通常接至8259A的IR端作为中断请求信号。
在整个计数过程中,GATE始终应保持为高电平。若GATE=0则暂停计数,待GATE=1后,从暂停时的计数值继续往下递减,如图8.6所示。
在计数过程中,随时可以写入新的计数值初值,计数器使用新的初值重新开始计数(若新初值是16位,则在送完第一字节后中止现行计数,送完第二个字节后才重新开始计数)。
由上述可知,方式0主要用于单次计数,计数到时,利用OUT信号作为查询信号或用于中断请求信号。由于8253内部没有中断控制管理电路,故用OUT作为中断请求信号用时,需要通过中断优先级控制电路(如8259)向CPU申请中断。
2.方式1——可编程单次脉冲
这是一种硬件启动,不能自动重复但通过GATE的正跳变可使计数过程重新开始的计数方式。在写入方式1的控制字后OUT成为高电平,在写入计数初 值后,要等GATE信号出现正跳变时才能开始计数。在下一个CLK脉冲到来后,OUT变低,将计数初值送入CE并开始减1计数,直到计数器减到0后OUT 变为高电平。
计数过程一旦启动,GATE即使变成低电平也不会使计数中止。计数完成后若GATE再来一个正跳变,计数过程又重复一次。也就是说对应GATE的 每一个正跳变,计数器都输出一个宽度为N*TCLK(其中N为计数初值,TCLK为CLK信号的周期)的负脉冲,因此称这种方式为可编程单次脉冲方式。如图8.7所示。
在计数过程启动之后计数完成之前,若GATE又发生正跳变,则计数器又从初值开始重新计数,OUT端仍为低电平,两次的计数过程合在一起使OUT输出的负脉冲加宽了。
在方式1计数过程中若写入新的计数初值,也只是写入到计数初值寄存器中,并不马上影响当前计数过程,同样要等到下一个GATE正跳变启动信号,计数器才接收新初值重新计数。
3.方式2——分频工作方式
方式2既可以用软件启动(GATE=1时写入计数初值后启动),也可以用硬件启动(GATE=0时写入计数初值后并不立即开始计数,等GATE由低变高时启动计数)。方式2一旦启动,计数器就可以自动重复地工作。
如图8.8所示, 写入控制字后,比较
比较
OUT信号变为高电平,若计数初值N=3,启动计数后,以CLK信号的频率进行减1计数。当减到1时,OUT输出一个宽度为一个CLK时钟 周期的负脉冲,OUT恢复成高电平后,计数器又重新开始计数。可以看出,OUT输出信号的频率为CLK信号频率的1/N,即N次分频,故称这种工作方式为 分频工作方式。
方式2需要GATE信号保持高电平。当GATE变为低电平时,停止计数。GATE由低变高后,CR中的计数初值又重新装入减1计数器CE中开始计数。
方式2在计数过程中若写入新的计数初值,并不影响当前的计数过程。在本次计数结束后,才以新的计数初值开始新的分频工作方式。
4.方式3——方波发生器
工作于方式3时,在计数过程中其输出前一半时间为高电平,后一半时间为低电平。其输出是可以自动重复的周期性方波,输出的方波周期为N*TCLK,如图8.9所示。
在写入方式3控制字后,计数器OUT端立即变高。若GATE信号为高,在写完计数初值N后,开始对CLK信号进行计数。计数到N/2时,OUT端 变低,计完余下的N/2,OUT又变回高,如此自动重复,OUT端产生周期为N*TCLK的方波。实际上,电路中对半周期N/2的控制方法是每来一个 CLK信号,让计数器减2。因此来N/2个CLK信号后,计数器就已经减到零,OUT端发生一次高比较
低电位的变化,且又将初值置入计数器重新开始计数。若计 数初值为奇数,计数的前半周期为(N+1)/2,计数的后半周期为(N-1)/2。
在写入计数初值时,如果GATE信号为低电平,计数器并不开始计数。待GATE变为高电平时,才启动计数过程。在计数过程中,应始终使 GATE=1。若GATE=0,不仅中止计数,而且OUT端马上变高。待恢复GATE=1时,产生硬件启动,计数器又从头开始计数。 在计数过程中写入新的计数初值时不影响当前的半个周期的计数,在当前的半个周期结束(OUT电位发生变化)时,启用新的计数初值开始新的计数过程。
5.方式4——软件触发选通
方式4是一种软件启动、不自动重复的计数方式。 如图8.10所示, 在写入方式4的控制字后,OUT为高电平。当写入计数初值后立即开始计数(这就是软件启动)。当计数到0后,OUT输出变为低电平,持续一个CLK脉冲周 期后恢复为高电平,计数器停止计数。故这种方式是一次性的。只有CPU再次将计数初值写入CR才会启动另一次计数过程。
若在计数过程中改变计数初值,则可按新的计数初值重新开始计数。若计数初值是两个字节,则置入第一个字节时停止计数,置入第二个字节后才按新的计数初值开始计数。
6.方式5——硬件触发选通
方式5是硬件启动、不自动重复的计数方式。
如图8.11所示,在写入方式5控制字后,OUT变高,写入计数初值时即使GATE信号为高电平,计数过程仍不启动,而是要求GATE信号出现一个正跳变,然后在下一个CLK信号到来后才开始计数。计数器减到0时,OUT变低,经一个CLK信号后变高且一直保持。
由于方式5是由GATE的上升沿启动计数,同方式1一样,计数启动后,即使GATE变成低电平,也不影响计数过程的进行。但若GATE信号产生了正跳变,则不论计数是否完成,计数初值将被置入计数器,并从新开始新一轮计数。
若在计数过程中给计数器写入新的计数初值,此时只是将计数初值保存到CR中,并不影响当前的计数过程,在GATE产生正跳变时新的计数初值才被置入减1计数器CE开始计数。
表8.2给出8253定时器/计数器六种工作方式的特点,读者可结合上面的介绍进一步加深理解。
表8.2 8253工作方式比较
上图是为8253在IBM PC/XT机中的硬件连线图
可以看出,要使8253的片选信号CS有效,应使A9A8A7A6A5=00010,由于A4A3A2未参加译码,这三位为任意状态均可使8253选中, 因此8253的端口地址为40H?5FH,若取A4A3A2=000,则8253计数器0、计数器1、计数器2以及控制寄存器的端口地址分别为40H、 41H、42H和43H。
这段需要补充很多知识:
1A9A8A7A6,,,A1A0的含义是什么?
系统总线:用来连接CPU内的各个寄存器与I/O接口,他通常包括三组:数据总线,地址总线,控制总线。数据总线主要传送个大部件见的数据信息,地址总线传从主存单元地址码或I/O设备码。控制总线用于传送控制,
这里只看地址总线:地址线的连接——可以根据所选用的半导体存储器芯片地址线的多少,把CPU的地址线分为芯片外(指存储器芯片)地址和芯片内的地址,片外地址经地址译码器译码后输出,作为存储器芯片的片选信号,用来选中CPU所要访问的存储器芯片。片内地址线直接接到所要访问的存储器芯片的地址引脚,用来直接选中该芯片中的一个存储单元。
74LS138译码器在微机系统中,常采用中规模集成电路芯片74LS138作为地址译码器,
CPU为了访问I/O接口控制器或控制卡上的数据和状态信息,需要首先指定它们的地址。这种地址就称为I/O端口地址或者简称端口。通常,一个I /O控制器包含访问数据的数据端口、输出命令的命令端口和访问控制器执行状态的状态端口。端口地址的设置方法一般有两种:统一编址和独立编址。
端口统一编址的原理是把I/O控制器中的端口地址归入存储器寻址地址空间范围内。因此这种编址方式也称为存储器映像编址。CPU访问一个端口的操作 与访问内存的操作一样,也使用访问内存的指令。端口独立编址的方法是把I/O控制器和控制卡的寻址空间单独作为一个独立的地址空间对待,称为I/O地址空 间。每个端口有一个I/O地址与之对应,并且使用专门的I/O指令来访问端口。IBM PC及其兼容机主要使用独立编址方式,采用了一个独立的I/O地址空间对控制设备中的寄存器进行寻址和访问。使用ISA总线结构的传统PC,其I/O地址 空间范围是0x000~0x3FF,有1024个I/O端口地址可供使用。各个控制器和控制卡所默认分配使用的端口地址范围见表2-1
另外,IBM PC也部分地使用了统一编址方式。例如,CGA显示卡上显示内存的地址就直接占用了存储器地址空间0xB800~0xBC00范围。因此若要让一个字符显示在屏幕上,可以直接使用内存操作指令往这个内存区域执行写操作。
表2-1 I/O端口地址分配
端口地址范围
分配说明
端口地址范围
分配说明
0x000~0x
DMA控制器1
0x0~0x7
IDE硬盘控制器0
0x020~0x
可编程中断控制器1
0x278~0x
并行打印机端口2
0x040~0x
8253/ 定时计数器
0x8~0x2FF
串行控制器2
0x060~0x
8042 键盘控制器
0x378~0x
并行打印机端口1
0x070~0x
访问CMOS RAM/实时时钟RTC(Real Time Clock)端口
0x3B0~0x3BF
单色MDA显示控制器
0x080~0x
DMA页面寄存器访问端口
0x0~0x3CF
彩色CGA显示控制器
0x0~0x0BF
可编程中断控制器2
0x3D0~0x3DF
彩色EGA/VGA显示控制器
0x0~0x0DF
DMA控制器2
0x0~0x7
软盘控制器
0x0~0x0FF
协处理器访问端口
0x8~0x3FF
串行控制器1
0x170~0x177
IDE硬盘控制器1
PC只用了10位地址线(A0-A9)进行译码,其寻址的范围为0H-3FFH,共有1024个I/O地址。
这1024个地址中前半段(A9=0,范围为0H-1FFH)是属于主机板I/O译码,
后半段(A9=1,范围为200H-3FFH)则是用来扩展插槽上的I/O译码用。
片选及地址线!CS,A1 A0---用于芯片及内部寄存器,计数器的寻址
在IBM-PC中A9A8A7A6A5=00010选中!CS=0 A4A3A2未用,A1A0接8253A1A0
A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 功能 基本地址
0 0 0 1 0 * * * 0 0 选中计数器0 40H
0 0 0 1 0 * * * 0 1 选中计数器1 41H
0 0 0 1 0 * * * 1 0 选中计数器2 42H
0 0 0 1 0 * * * 1 1 选中控制寄存器 43H
好啦
这样理解啦8253的工作及赋值。
I/O端口地址表
PC只用了10位地址线(A0-A9)进行译码,其寻址的范围为0H-3FFH,共有1024个I/O地址。
这1024个地址中前半段(A9=0,范围为0H-1FFH)是属于主机板I/O译码,
后半段(A9=1,范围为200H-3FFH)则是用来扩展插槽上的I/O译码用。
I/O端口功能表
———————————————————————————
I/O地址 功能、用途
———————————————————————————
0 DMA通道0,内存地址寄存器(DMA控制器1(8237))
1 DMA通道0, 传输计数寄存器
2 DMA通道1,内存地址寄存器
3 DMA通道1, 传输计数寄存器
4 DMA通道2,内存地址寄存器
5 DMA通道2, 传输计数寄存器
6 DMA通道3,内存地址寄存器
7 DMA通道3, 传输计数寄存器
8 DMA通道0-3的状态寄存器
0AH DMA通道0-3的屏蔽寄存器
0BH DMA通道0-3的方式寄存器
0CH DMA清除字节指针
0DH DMA主清除字节
0EH DMA通道0-3的清屏蔽寄存器
0FH DMA通道0-3的写屏蔽寄存器
19H DMA起始寄存器
20H-3FH 可编程中断控制器1(8259)使用
40H 可编程中断计时器(8253)使用,读/写计数器0
41H 可编程中断计时器寄存器
42H 可编程中断计时器杂项寄存器
43H 可编程中断计时器,控制字寄存器
44H 可编程中断计时器,杂项寄存器(AT)
47H 可编程中断计时器,计数器0的控制字寄存器
48H-5FH 可编程中断计时器使用
60H-61H 键盘输入数据缓冲区
61H AT:8042键盘控制寄存器/XT:8255输出寄存器
62H 8255输入寄存器
63H 8255命令方式寄存器
64H 8042键盘输入缓冲区/8042状态
65H-6FH 8255/8042专用
70H CMOS RAM地址寄存器
71H CMOS RAM数据寄存器
80H 生产测试端口
81H DMA通道2,页表地址寄存器
82H DMA通道3,页表地址寄存器
83H DMA通道1,页表地址寄存器
87H DMA通道0,页表地址寄存器
89H DMA通道6,页表地址寄存器
8AH DMA通道7,页表地址寄存器
8BH DMA通道5,页表地址寄存器
8FH DMA通道4,页表地址寄存器
93H-9FH DMA控制器专用
0A0H NM1屏蔽寄存器/可编程中断控制器2
0A1H 可编程中断控制器2屏蔽
0C0H DMA通道0,内存地址寄存器(DMA控制器2(8237))
0C2H DMA通道0, 传输计数寄存器
0C4H DMA通道1,内存地址寄存器
0C6H DMA通道1, 传输计数寄存器
0C8H DMA通道2,内存地址寄存器
0CAH DMA通道2, 传输计数寄存器
0CCH DMA通道3,内存地址寄存器
0CEH DMA通道3, 传输计数寄存器
0D0H DMA状态寄存器
0D2H DMA写请求寄存器
0D4H DMA屏蔽寄存器
0D6H DMA方式寄存器
0D8H DMA清除字节指针
0DAH DMA主清
0DCH DMA清屏蔽寄存器
0DEH DMA写屏蔽寄存器
0DFH-0EFH 保留
0F0H-0FFH 协处理器使用
100H-16FH保留
170H 1号硬盘数据寄存器
171H 1号硬盘错误寄存器
172H 1号硬盘数据扇区计数
173H 1号硬盘扇区数
174H 1号硬盘柱面(低字节)
175H 1号硬盘柱面(高字节)
176H 1号硬盘驱动器/磁头寄存器
177H 1号硬盘状态寄存器
1F0H 0号硬盘数据寄存器
1F1H 0号硬盘错误寄存器
1F2H 0号硬盘数据扇区计数
1F3H 0号硬盘扇区数
1F4H 0号硬盘柱面(低字节)
1F5H 0号硬盘柱面(高字节)
1F6H 0号硬盘驱动器/磁头寄存器
1F7H 0号硬盘状态寄存器
1F9H-1FFH保留
200H-20FH游戏控制端口
210H-21FH扩展单元
278H 3号并行口,数据端口
279H 3号并行口,状态端口
27AH 3号并行口,控制端口
2B0H-2DFH保留
2E0H EGA/VGA使用
2E1H GPIP(0号适配器)
2E2H 数据获取(0号适配器)
2E3H 数据获取(1号适配器)
2E4H-2F7H保留
2F8H 2号串行口,发送/保持寄存器(RS232接口卡2)
2F9H 2号串行口,中断有效寄存器
2FAH 2号串行口,中断ID寄存器
2FBH 2号串行口,线控制寄存器
2FCH 2号串行口,调制解调控制寄存器
2FDH 2号串行口,线状态寄存器
2FEH 2号串行口,调制解调状态寄存器
2FFH 保留
300H-31FH原形卡
320H 硬盘适配器寄存器
322H 硬盘适配器控制/状态寄存器
324H 硬盘适配器提示/中断状态寄存器
325H-347H保留
348H-357H DCA3278
366H-36FH PC网络
372H 软盘适配器数据输出/状态寄存器
375H-376H 软盘适配器数据寄存器
377H 软盘适配器数据输入寄存器
378H 2号并行口,数据端口
379H 2号并行口,状态端口
37AH 2号并行口,控制端口
380H-38FH SDLC及BSC通讯
390H-393H Cluster适配器0
3A0H-3AFH BSC通讯
3B0H-3B H MDA视频寄存器
3BCH 1号并行口,数据端口
3BDH 1号并行口,状态端口
3BEH 1号并行口,控制端口
3C0H-3CFH EGA/VGA视频寄存器
3D0H-3D7H CGA视频寄存器
3F0H-3F7H 软盘控制器寄存器
3F8H 1号串行口,发送/保持寄存器(RS232接口卡1)
3F9H 1号串行口,中断有效寄存器
3FAH 1号串行口,中断ID寄存器
3FBH 1号串行口,线控制寄存器
3FCH 1号串行口,调制解调控制寄存器
3FDH 1号串行口,线状态寄存器
3FEH 1号串行口,调制解调状态寄存器
3FFH 保留
英文
Port addresses are not always constant across PC, AT and PS2
Unless marked, port addresses are relative to PC and XT only
000-00F 8237 DMA controller:
000 Channel 0 address register
001 Channel 0 word count
002 Channel 1 address register
003 Channel 1 word count
004 Channel 2 address register
005 Channel 2 word count
006 Channel 3 address register
007 Channel 3 word count
008 Status/command register
009 Request register
00A Mask register
00B Mode register
00C Clear MSB/LSB flip flop
00D Master clear temp register
00E Clear mask register
00F Multiple mask register
010-01F 8237 DMA Controller (PS2 model 60 & 80), reserved (AT)
020-02F 8259A Master Programmable Interrupt Controller:
020 8259 Command port (see 8259)
021 8259 Interrupt mask register (see 8259)
030-03F 8259A Slave Programmable Interrupt Controller (AT,PS2)
040-05F 8253 or 8254 Programmable Interval Timer:
040 8253 channel 0, counter divisor
041 8253 channel 1, RAM refresh counter
042 8253 channel 2, Cassette and speaker functions
043 8253 mode control (see 8253)
044 8254 PS/2 extended timer
047 8254 Channel 3 control byte
060-067 8255 Programmalbe Peripheral Interface (PC,XT,PCjr):
060 8255 Port A keyboard input/output buffer (output PCjr)
061 8255 Port B output
062 8255 Port C input
063 8255 Command/Mode control register
060-06f 8042 Keyboard Controller (AT,PS2):
060 8042 Keyboard input/output buffer register
061 8042 system control port (for compatability with 8255)
064 8042 Keyboard command/status register
070 CMOS RAM/RTC, also NMI enable/disable (AT,PS2, see RTC)
071 CMOS RAM data (AT,PS2)
080 Manufacturer checkpoint port
080-090 DMA Page Registers:
081 High order 4 bits of DMA channel 2 address
082 High order 4 bits of DMA channel 3 address
083 High order 4 bits of DMA channel 1 address
090-097 POS/Programmable Option Select (PS2):
090 Central arbitration control Port
091 Card selection feedback
092 System control and status register
094 System board enable/setup register
095 Reserved
096 Adapter enable/setup register
097 Reserved
0A0 NMI Mask Register (PC,XT) (write 80h to enable NMI, 00h disable)
0A0-0BF Second 8259 Programmalbe Interrupt Controller (AT,PS2):
0A0 Second 8259 Command port (see 8259)
0A1 Second 8259 Interrupt mask register (see 8259)
0C0 TI SN76496 Programmable Tone/Noise Generator (PCjr)
0C0-0DF 8237 DMA Controller 2 (AT):
0C2 DMA channel 3 selector (see ports 6 & 82)
0E0-0EF Reserved
0F0-0FF Math Coprocessor (AT,PS2)
0F0-0F5 PCjr Disk Controller:
0F0 Disk Controller
0F2 Disk Controller control port
0F4 Disk Controller status register
0F5 Disk Controller data port
0F8-0FF Reserved for future microprocessor extensions
100-10F POS Programmable Option Select (PS2):
100 POS Register 0, Adapter ID byte (LSB)
101 POS Register 1, Adapter ID byte (MSB)
102 POS Register 2, Option select data byte 1
Bit 0 is card enable (CDEN)
103 POS Register 3, Option select data byte 2
104 POS Register 4, Option select data byte 3
105 POS Register 5, Option select data byte 4
Bit 7 is (-CHCK)
Bit 6 is reserved
106 POS Register 6, subaddress extension (LSB)
107 POS Register 7, subaddress extension (MSB)
110-1EF System I/O channel
170-17F Fixed disk 1 (AT):
170 disk 1 data
171 disk 1 error
172 disk 1 sector count
173 disk 1 sector number
174 disk 1 cylinder low
175 disk 1 cylinder high
176 disk 1 drive/head
177 disk 1 status
1F0-1FF Fixed disk 0 (AT):
1F0 disk 0 data
1F1 disk 0 error
1F2 disk 0 sector count
1F3 disk 0 sector number
1F4 disk 0 cylinder low
1F5 disk 0 cylinder high
1F6 disk 0 drive/head
1F7 disk 0 status
200-20F Game Adapter
210-217 Expansion Card Ports (XT):
210 Write: latch expansion bus data
read: verify expansion bus data
211 Write: clear wait,test latch
Read: MSB of data address
212 Read: LSB of data address
213 Write: 0=enable, 1=/disable expansion unit
214-215 Receiver Card Ports
214 write: latch data, read: data
215 read: MSB of address, next read: LSB of address
21F Reserved
220-26F Reserved for I/O channel
270-27F Third parallel port (see PARALLEL PORT):
278 data port
279 status port
27A control port
280-2AF Reserved for I/O channel
2A2-2A3 MSM58321RS clock
2B0-2DF Alternate EGA, or 3270 PC video (XT, AT)
2E0 Alternate EGA/VGA
E1 GPIB Adapter (AT)
2E2-2E3 Data acquisition adapter (AT)
2E8-2EF COM4 non PS2 UART (Reserved by IBM) (see UART)
2F0-2F7 Reserved
2F8-2FF COM2 Second Asynchronous Adapter
Primary Asynchronous Adapter for PCjr
300-31F Prototype Experimentation Card
Periscope hardware debugger
320-32F Hard Disk Controller (XT):
320 Read from/Write to controller
321 Read: Controller Status, Write: controller reset
322 Write: generate controller select pulse
323 Write: Pattern to DMA and interrupt mask register
324 disk attention/status
330-33F Reserved for XT/370
340-35F Reserved for I/O channel
360-36F PC Network
370-377 Floppy disk controller (except PCjr):
372 Diskette digital output
374 Diskette controller status
375 Diskette controller data
376 Diskette controller data
377 Diskette digital input
378-37F Second Parallel Printer (see PARALLEL PORT):
378 data port
379 status port
37A control port
380-38F Secondary Binary Synchronous Data Link Control (SDLC) adapter:
380 On board 8255 port A, internal/external sense
381 On board 8255 port B, external modem interface
382 On board 8255 port C, internal control and gating
383 On board 8255 mode register
384 On board 8253 channel square wave generator
385 On board 8253 channel 1 inactivity time-out
386 On board 8253 channel 2 inactivity time-out
387 On board 8253 mode register
388 On board 8273 read: status; Write: Command
389 On board 8273 write: parameter; read: response
38A On board 8273 transmit interrupt status
38B On board 8273 receiver interrupt status
38C On board 8273 data
390-39F Cluster Adapter
3A0-3AF Primary Binary Synchronous Data Link Control (SDLC) adapter:
3A0 On board 8255 port A, internal/external sense
3A1 On board 8255 port B, external modem interface
3A2 On board 8255 port C, internal control and gating
3A3 On board 8255 mode register
3A4 On board 8253 counter 0 unused
3A5 On board 8253 counter 1 inactivity time-outs
3A6 On board 8253 counter 2 inactivity time-outs
3A7 On board 8253 mode register
3A8 On board 8251 data
3A9 On board 8251 command/mode/status register
3B0-3BF Monochrome Display Adapter (write only, see 6845):
3B0 port address decodes to 3B4
3B1 port address decodes to 3B5
3B2 port address decodes to 3B4
3B3 port address decodes to 3B5
3B4 6845 index register, selects which register [0-11h]
is to be accessed through port 3B5
3B5 6845 data register [0-11h] selected by port 3B4,
registers 0C-0F may be read. If a read occurs without
the adapter installed, FFh is returned. (see 6845)
3B6 port address decodes to 3B4
3B7 port address decodes to 3B5
3B8 6845 Mode control register
3B9 reserved for color select register on color adapter
3BA status register (read only)
3BB reserved for light pen strobe reset
3BC-3BF Primary Parallel Printer Adapter (see PARALLEL PORT):
3BC parallel 1, data port
3BD parallel 1, status port
3BE parallel 1, control port
3C0-3CF EGA/VGA:
3C0 VGA attribute and sequencer register
3C1 Other video attributes
3C2 EGA, VGA, CGA input status 0
3C3 Video subsystem enable
3C4 CGA, EGA, VGA sequencer index
3C5 CGA, EGA, VGA sequencer
3C6 VGA video DAC PEL mask
3C7 VGA video DAC state
3C8 VGA video DAC PEL address
3C9 VGA video DAC
3CA VGA graphics 2 position
3CC VGA graphics 1 position
3CD VGA feature control
3CE VGA graphics index
3CF Other VGA graphics
3D0-3DF Color Graphics Monitor Adapter (ports 3D0-3DB are write only, see 6845):
3D0 port address decodes to 3D4
3D1 port address decodes to 3D5
3D2 port address decodes to 3D4
3D3 port address decodes to 3D5
3D4 6845 index register, selects which register [0-11h]
is to be accessed through port 3D5
3D5 6845 data register [0-11h] selected by port 3D4,
registers 0C-0F may be read. If a read occurs without
the adapter installed, FFh is returned. (see 6845)
3D6 port address decodes to 3D4
3D7 port address decodes to 3D5
3D8 6845 Mode control register (CGA, EGA, VGA, except PCjr)
3D9 color select palette register (CGA, EGA, VGA, see 6845)
3DA status register (read only, see 6845, PCjr VGA access)
3DB Clear light pen latch (any write)
3DC Preset Light pen latch
3DF CRT/CPU page register (PCjr only)
3E8-3EF COM3 non PS2 UART (Reserved by IBM) (see UART)
3F0-3F7 Floppy disk controller (except PCjr):
3F0 Diskette controller status A
3F1 Diskette controller status B
3F2 controller control port
3F4 controller status register
3F5 data register (write 1-9 byte command, see INT 13)
3F6 Diskette controller data
3F7 Diskette digital input
3F8-3FF COM1 Primary Asynchronous Adapter (see UART)3F0 Diskette controller
status A:
3220-3227 PS2 COM3
3228-322F PS2 COM4
4220-4227 PS2 COM5
4228-422F PS2 COM6
5220-5227 PS2 COM7
5228-522F PS2 COM8