实验七可编程定时计数器与中断控制 实验目的 1.掌握微机中断处理系统的基本原理、学习中断服务程序的编写方法。 2.掌握8253/8254定时/计数器的基本原理和编程方法。 二、实验原理 本实验采用 Intel8253作为计数器芯片,8254芯片是8253的兼容替代产品,计数速率 等性能优于8253 .可编程定时/计数器8253功能简介 8253含有三个独立的16位计数器,每个计数器连接外设的信号分别是 CLK——输入的脉冲信号或外部事件,计数器对此脉冲进行减1计数 GATE一—启动禁止计数的控制信号; OUT 输出信号。 每个计数器可有六种工作方式,均可由程序设置和改变,8253的几种工作方式及特 点如表71所示。若一个计数器被设定为方式0,计数初值n,在控制信号GATE为高时 即可对输入的脉冲作减1计数,OUT维持低电平;计数到0时,则由OUT端输出一个 高电平信号。若一个计数器被设定为方式2,输入为周期性脉冲信号,且计数初值可自 动重新装入并连续计数,输出信号就成为周期信号,周期为Tour=n×TN(或频率∫our= fw/n),即可作为分频器应用 表7.18253的6种工作方式 工作方式功能描述 GATE=0启动方式初值设置|说明 方式0计数到0输出高电平停止计数软件次有效(n+1)Tcuk负脉冲 方式 硬件可重触发单稳态 硬件 自动装入nTck负脉冲 方式2分频器 停止计数软硬件自动装入Tour= nX TcLK 方式3方波发生器 停止计数软硬件自动装入分频,占空比≈50% 方式4软件触发选通 停止计数软件 次有效计数到0负TcaK 方式5硬件触发选通 硬件 自动装入波形同方式4 注:软件启动是指当GATE=1时写入方式字和初值即启动:硬件启动是指写入方式字和初值后要由GATE上升沿启动 2.8253编程简要说明 8253的每个计数器必须在写入控制字和计数初值后才启动工作,一般的初始化编程 分为两步:先写入控制字、再写入计数初值。若要用到2个以上的计数器,则要对每个 计数器分别进行初始化。所有计数器的方式字都写入同一控制口地址,而各计数器的初 值则写入各自口地址(假设8253片选引脚CS连接的IO端子为280H,则IO基地址+0 对应计数器0地址、IO基地址+1对应计数器1地址、IO基地址+2对应计数器2地址
50 实验七 可编程定时/计数器与中断控制 一、 实验目的 1. 掌握微机中断处理系统的基本原理、学习中断服务程序的编写方法。 2. 掌握8253/8254定时/计数器的基本原理和编程方法。 二、 实验原理 本实验采用Intel8253作为计数器芯片,8254芯片是8253的兼容替代产品,计数速率 等性能优于8253。 1. 可编程定时/计数器8253功能简介 8253 含有三个独立的 16 位计数器,每个计数器连接外设的信号分别是: CLK ——输入的脉冲信号或外部事件,计数器对此脉冲进行减 1 计数; GATE ——启动/禁止计数的控制信号; OUT ——输出信号。 每个计数器可有六种工作方式,均可由程序设置和改变,8253 的几种工作方式及特 点如表 7.1 所示。若一个计数器被设定为方式 0,计数初值 n,在控制信号 GATE 为高时 即可对输入的脉冲作减 1 计数,OUT 维持低电平;计数到 0 时,则由 OUT 端输出一个 高电平信号。若一个计数器被设定为方式 2,输入为周期性脉冲信号,且计数初值可自 动重新装入并连续计数,输出信号就成为周期信号,周期为 TOUT = n×TIN(或频率 ƒOUT = ƒIN / n),即可作为分频器应用。 表 7.1 8253 的 6 种工作方式 工作方式 功能描述 GATE=0 启动方式 初值设置 说明 方式 0 计数到 0 输出高电平 停止计数 软件 一次有效 (n+1)TCLK负脉冲 方式 1 硬件可重触发单稳态 --- 硬件 自动装入 nTCLK负脉冲 方式 2 分频器 停止计数 软/硬件 自动装入 TOUT=n×TCLK 方式 3 方波发生器 停止计数 软/硬件 自动装入 分频,占空比≈50﹪ 方式 4 软件触发选通 停止计数 软件 一次有效 计数到 0 负 TCLK 方式 5 硬件触发选通 --- 硬件 自动装入 波形同方式 4 注:软件启动是指当 GATE=1 时写入方式字和初值即启动; 硬件启动是指写入方式字和初值后要由 GATE 上升沿启动。 2. 8253编程简要说明 8253 的每个计数器必须在写入控制字和计数初值后才启动工作,一般的初始化编程 分为两步:先写入控制字、再写入计数初值。若要用到 2 个以上的计数器,则要对每个 计数器分别进行初始化。所有计数器的方式字都写入同一控制口地址,而各计数器的初 值则写入各自口地址(假设 8253 片选引脚 CS 连接的 I/O 端子为 280H,则 IO 基地址+0 对应计数器 0 地址、IO 基地址+1 对应计数器 1 地址、IO 基地址+2 对应计数器 2 地址
IO基地址+3对应控制寄存器地址 8253控制字的格式 表7.28253控制字格式 SC1 SCORW1RWO M2 MI MO BCD 00:计数器000:计数器锁存000:方式00:2进制计数 01:计数器101:读写低字节001:方式11:BCD计数 10:计数器210:读写高字节x10:方式2 11:无效 11:先读写低8位x11:方式3 后读写高8位100:方式4 101:方式5 设置时应注意如下要点: ①设置8253的计数初值,1是计数初值的最小值,0是最大值。 ②采用二进制计数,8253的初值可以表示为十进制数、二进制数或十六进制数。当 初值小于256,只写低字节;当初值大于等于256,必须先写低字节后写高字节。 例1:n=50=32H=00110010B 可写入语句为: MOVAI,50或: MOVAI,32H或: MOVAI,00110010B OUT Port,AL OUT Port,AI OUT Port, AL 例2:n=10000=2710H必须先写低字节后写高字节。 可写入语句为: 或 MOVAX, 10000 OUT Port, AL oUr Port,AL;写低字节 MOV AL, AH IOV AL, 27H oUT Port, AI OUT Port,AL;写高字节 ③采用十进制BCD码计数,8253的初值应以十进制数0~9表示并在后面加上H。 (十进制数0~9的BCD码与十六进制数0~9在机器内的编码同为0000~1001。若不 加H,则计算机将把输入的十进制数转换为二进制数处理,而8253芯片按BCD码计数, 会造成错误。) 例3:设采用十进制BCD码初值n=50 可写入语句为: MoAL,50H;AL=(01010000)BCD=50 out Port, AL 3.微机系统的中断结构简要说明 微机系统的中断结构示意如图7.1:
51 IO 基地址+3 对应控制寄存器地址) 8253 控制字的格式: 表 7.2 8253 控制字格式 设置时应注意如下要点: ①设置 8253 的计数初值,1 是计数初值的最小值,0 是最大值。 ②采用二进制计数,8253 的初值可以表示为十进制数、二进制数或十六进制数。当 初值小于 256,只写低字节;当初值大于等于 256,必须先写低字节后写高字节。 例 1:n = 50 = 32H = 00110010B 例 2:n = 10000 = 2710H 必须先写低字节后写高字节。 ③采用十进制 BCD 码计数,8253 的初值应以十进制数 0~9 表示并在后面加上 H。 (十进制数 0~9 的 BCD 码与十六进制数 0~9 在机器内的编码同为 0000~1001。若不 加 H,则计算机将把输入的十进制数转换为二进制数处理,而 8253 芯片按 BCD 码计数, 会造成错误。) 例 3:设采用十进制 BCD 码初值 n = 50 3. 微机系统的中断结构简要说明 微机系统的中断结构示意如图 7.1:
D7.DO 80X86A0 AO D7DO RD R /NTA INT NT NTA RD WR AO D.DO cs8259(主片)cAsI CASI8259(从片)cs IGRT IR6 IRS IR4 IR3 IR2 IRI IRO CAS2 IRTIR6卫R5IR4IR3卫R2IRlR0 +Sy 图71微机系统的中断结构 在微机系统中,中断向量分配及8259初始化由操作系统统一进行,因此建议同学 们在实验中不再重新对微机系统中的8259A进行初始化(不再写入初始化命令字 ICw~lCW4),在中断服务程序的编程过程中对8259A的操作仅限于写入操作命令字 以及对IMR、ISR、IRR等寄存器的访问。 4.8259A的操作命令字及编程说明 8259A的操作命令字共有3个,OCW1~OCW3。 OCWl为写入中断屏蔽寄存器IMR(O地址为21H)的中断屏蔽字,当OCW1某 位(Mi)为1时相应的中断申请(IRi)被屏蔽、为0时所对应的中断申请被允许。OCW1 的格式如表73所示。 表7.30CW1格式 M7 M6 M5 M4 M3 M2 MI MO 操作命令字OCW2用于设置中断优先级方式和中断结束方式(写OCW2所采用的 IO地址为20H),OCW2的格式及功能含义如表74所示。 表7.40CW2格式 R SL EOI00L2LI LO 001:普通EOI方式OCW2标志 000:IR0 011:特殊EOI方式 001:IR1 101:自动循环普通EOI 010:IR2 111:自动循环特殊EOI 011: IR3 100:设置优先级自动循环命令 100:IR4 000:清除优先级自动循环命令 101: IR5 110:置位优先权命令 110:IR6 010:无操作 111: IR7 操作命令字OCW3用于设置或清除特殊屏蔽方式和读取寄存器的状态(写OCW3 所采用的IO地址为20H),OCW3的格式及功能含义如表75所示
52 图 7.1 微机系统的中断结构 在微机系统中,中断向量分配及 8259 初始化由操作系统统一进行,因此建议同学 们在实验中不再重新对微机系统中的 8259A 进行初始化(不再写入初始化命令字 ICW1~ICW4),在中断服务程序的编程过程中对 8259A 的操作仅限于写入操作命令字 以及对 IMR、ISR、IRR 等寄存器的访问。 4. 8259A的操作命令字及编程说明: 8259A 的操作命令字共有 3 个,OCW1~OCW3。 OCW1 为写入中断屏蔽寄存器 IMR(I/O 地址为 21H)的中断屏蔽字,当 OCW1 某 位(Mi)为 1 时相应的中断申请(IRi)被屏蔽、为 0 时所对应的中断申请被允许。OCW1 的格式如表 7.3 所示。 表 7.3 OCW1 格式 操作命令字 OCW2 用于设置中断优先级方式和中断结束方式(写 OCW2 所采用的 I/O 地址为 20H),OCW2 的格式及功能含义如表 7.4 所示。 表 7.4 OCW2 格式 操作命令字 OCW3 用于设置或清除特殊屏蔽方式和读取寄存器的状态(写 OCW3 所采用的 I/O 地址为 20H),OCW3 的格式及功能含义如表 7.5 所示
表7.50cW3格式 ESMM SMM0 1 P RR RIS 未定义0X:无效 OCW3标志 0X:无效 10:复位特殊屏蔽 10:读RR 11:读SR l:设置特殊屏蔽 查询状态寄存器 实验环境 TPC-H微机接口实验箱上配备有一片定时/计数器芯片8253,其通道0和通道1的 信号引脚CLKx、 GATEX、OUTx与芯片的片选信号引脚CS均已引出,实验箱上与此项 实验内容相关的信号或控制端子还包括:IMHz脉冲源、2MHz脉冲源、+5V(高电平) 接线端、中断申请输入端、微机上经地址译码后输出的ⅣO片选信号端以及逻辑笔端子 等,同学们可根据具体的实验内容确定其间的连接关系。 由于微机内部已将中断控制器(8259A)集成在控制芯片组中,微机接口实验箱上 不含有另外的中断控制器,因而实验中不允许对微机上的控制芯片组进行初始化操作, 若仅对与中断属性相关的内容进行设置(写入操作命令字OCW以及读IMR、IRR、ISR 状态等),对于主片8259A可访问的O端口地址分别为20H和21H(例如中断屏蔽字 的地址是21H、设置优先级循环方式和中断结束方式操作命令字的地址是20H)。从片 8259A的对应端口地址是AOH和AlH 表76IRQ与中断向量对应关系 RQ值 中断 功能 Master Slave 向量 系统时钟 键盘 级连到从8259 实时时钟 9 从定向到IRQ 系统可用 73 系统可用 鼠标或系统可用 数字协处理器 14 76 硬盘控制器 15 77 系统可用 OB 串行通讯 行通讯 并行口
53 表 7.5 OCW3 格式 三、 实验环境 TPC-H 微机接口实验箱上配备有一片定时/计数器芯片 8253,其通道 0 和通道 1 的 信号引脚 CLKx、GATEx、OUTx 与芯片的片选信号引脚 CS 均已引出,实验箱上与此项 实验内容相关的信号或控制端子还包括:1MHz 脉冲源、2 MHz 脉冲源、+5V(高电平) 接线端、中断申请输入端、微机上经地址译码后输出的 I/O 片选信号端以及逻辑笔端子 等,同学们可根据具体的实验内容确定其间的连接关系。 由于微机内部已将中断控制器(8259A)集成在控制芯片组中,微机接口实验箱上 不含有另外的中断控制器,因而实验中不允许对微机上的控制芯片组进行初始化操作, 若仅对与中断属性相关的内容进行设置(写入操作命令字 OCW 以及读 IMR、IRR、ISR 状态等),对于主片 8259A 可访问的 I/O 端口地址分别为 20H 和 21H(例如中断屏蔽字 的地址是 21H、设置优先级循环方式和中断结束方式操作命令字的地址是 20H)。从片 8259A 的对应端口地址是 A0H 和 A1H。 表 7.6 IRQ 与中断向量对应关系 IRQ 值 Master Slave 中断 向量 功能 0 08 系统时钟 1 09 键盘 2 0A 级连到从 8259 8 70 实时时钟 9 71 从定向到 IRQ2 10 72 系统可用 11 73 系统可用 12 74 鼠标或系统可用 13 75 数字协处理器 14 76 硬盘控制器 15 77 系统可用 3 0B 串行通讯 4 0C 串行通讯 5 0D 并行口
6 磁盘控制器 并行口 我们实验所使用的IRQ资源在系统启动时被BOS设置,通过读取配置空间可以得 到IRQ的值,系统中IRQ值与中断向量的对应关系参考表76在实验中还要对PC9o52 芯片的中断逻辑进行设置,相关的寄存器是PC9052的中断状态寄存器,偏移地址为4CH 和4DH(低8位与高8位),参考表7.7 表77PCI9052中断状态与控制寄存器 进制位含义 缺省值 LINT1有效(1为有效,0为禁止) LINTI极性(1为高电平有效,0为低电平有效 LINT1状态(1表示有中断,0表示没有中断) 23456 LINT2有效(1为有效,0为禁止) LINT2极性(1为高电平有效,0为低电平有效) LⅠNT2状态(1表示有中断,0表示没有中断) PCI中断控制(1允许中断,0禁止中断) 01000010 「软中断控制(1触发一次PC中断) LINT1边沿触发/电平触发(1为边沿触发,极性必须为1)1 LN2边沿触发电平触发(1为边沿触发,极性必须为1)0 10 LINT1边沿触发中断状态清除(写入1为清除) LINI2边沿触发中断状态清除(写入1为清除) PCI9052是否工作在ISA状态(必须为1) 13~15 保留 我们的硬件只使用了 LINTI。当要使用中断功能的时候,先要设置第0位为1,每 次发生中断后,要设置第10位为1以清除中断。另外,编写中断服务程序还要先设置 中断向量、开放IRQ中断;每次中断处理结束后应发出EO1中断结束命令将中断服务寄 存器ISR相应位清0,不再响应该中断源时应置中断屏蔽寄存器而关闭IRQ中断。 以下给出部分编程示例 读取ISR内容的程序段为 MOV AL,00001011B;写入OCW3 OUT 20H. AL IN AL. 20H 读取IRR内容的程序段为 MOV AL,00001010B;写入OCW OUT 20H. AL IN AL. 20H 读取中断状态的程序段为 MoAL,00001100B;写入OCW OUT 20H. AL N AL, 20H 读中断状态
54 6 0E 磁盘控制器 7 0F 并行口 我们实验所使用的 IRQ 资源在系统启动时被 BIOS 设置,通过读取配置空间可以得 到 IRQ 的值,系统中 IRQ 值与中断向量的对应关系参考表 7.6。在实验中还要对 PCI9052 芯片的中断逻辑进行设置,相关的寄存器是PCI9052的中断状态寄存器,偏移地址为4CH 和 4DH(低 8 位与高 8 位),参考表 7.7。 表 7.7 PCI9052 中断状态与控制寄存器 二进制位 含义 缺省值 0 LINT1 有效(1 为有效,0 为禁止) 0 1 LINT1 极性(1 为高电平有效,0 为低电平有效) 1 2 LINT1 状态(1 表示有中断,0 表示没有中断) 0 3 LINT2 有效(1 为有效,0 为禁止) 0 4 LINT2 极性(1 为高电平有效,0 为低电平有效) 0 5 LINT2 状态(1 表示有中断,0 表示没有中断) 0 6 PCI 中断控制(1 允许中断,0 禁止中断) 1 7 软中断控制(1 触发一次 PCI 中断) 0 8 LINT1 边沿触发/电平触发(1 为边沿触发,极性必须为 1) 1 9 LINT2 边沿触发/电平触发(1 为边沿触发,极性必须为 1) 0 10 LINT1 边沿触发中断状态清除(写入 1 为清除) 0 11 LINT2 边沿触发中断状态清除(写入 1 为清除) 0 12 PCI9052 是否工作在 ISA 状态(必须为 1) 1 13~15 保留 我们的硬件只使用了 LINT1。当要使用中断功能的时候,先要设置第 0 位为 1,每 次发生中断后,要设置第 10 位为 1 以清除中断。另外,编写中断服务程序还要先设置 中断向量、开放 IRQ 中断; 每次中断处理结束后应发出 EOI 中断结束命令将中断服务寄 存器 ISR 相应位清 0,不再响应该中断源时应置中断屏蔽寄存器而关闭 IRQ 中断。 以下给出部分编程示例。 读取 ISR 内容的程序段为: MOV AL,00001011B ;写入 OCW3 OUT 20H,AL IN AL,20H ;读 ISR 读取 IRR 内容的程序段为: MOV AL,00001010B ;写入 OCW3 OUT 20H,AL IN AL,20H ;读 IRR 读取中断状态的程序段为: MOV AL,00001100B ;写入 OCW3 OUT 20H,AL IN AL,20H ;读中断状态