8253的工作方式
方式0:中断方式
计数结束时,OUT信号由低变高,可以用作中断请求。
【写入控制字】
OUT立刻变为低电平
【写入初值】
延迟一个时钟周期开始计数
【计数过程】
1.计数过程OUT一直保持低电平,直到计数器为0,OUT端立即变成高电平。
2.门电路信号GATE为高电平时,计数器工作;低电平时,计数器停止工作,但是计数值不变,如果GATE再次变高,计数器继续工作,GATE在方式0中相当于暂停开关。
3. 计数期间,如果从新写入计数值,计数器按照新写入的初值从新工作,相当覆盖原初值。
4. 方式0的计数初值为一次有效,当完成一次计数后,若要再次计数需要从新写入初值。
【OUT端输出】
直到计数器为0,OUT端立即变成高电平。(可用于计数结束时,利用产生的高电平向CPU发起中断请求)
方式1:可编程单脉冲发生器
【写入控制字】
OUT端立刻变为高电平。
【写入初值】
计数器不立即开始工作,需要等待GATE信号出现一个上升沿才开始计数。
【计数过程】
1. 开始计数时,OUT由高变低,并在计数时始终保持低电平。从而形成一个负单脉冲的前沿。
2. 计数为0时,OUT由低变高,形成负单脉冲的后沿。
3. 计数过程中,GATE信号的变化(高变低)不影响计数过程,但是如果出现GETA上升沿(低变高),则会从初值从新计数,使得OUT输出的负单脉冲变宽。
4. 方式1的计数值一次有效,完成计数需要从新写入初值。
【OUT输出端】
输出单脉冲宽度为CLK周期的n倍(n为计数初值),并仅产生一个负脉冲。
方式2:频率发生器(分频器)
【写入控制字】
OUT变为高电平。
【写入初值后】
GATE高电平为高电平,立刻开始计数。
【计数过程中】
1.OUT保持高电平不变,计数到1时,OUT产生一个CLK周期的负脉冲。计数到0时,自动从初值再次计数,实现循环计数。
2.若计数过程中,GATE变为低电平,则暂停计数,待到GATE恢复高电平后,从初值从新开始计数。
3.若计数过程需要改变OUT输出频率,可以在计数的任何时候写入新的初值,并不会影响当前计数周期,且会在下一个计数周期会根据新的初值开始计数。
【OUT输出端】
OUT端输出一定频率的负脉冲序列,负脉冲宽度为固定的一个CLK周期,重复周期为CKL的n倍(n为初值)。
方式3:方波发生器
【写入控制字】
OUT端变为低电平。
【写入初值】
OUT端立刻变为高电平,GATE为高电平时,立刻开始计数。
【计数过程】
1.GATE信号为高电平,计数器工作。
2.若初值n为偶数,计数值减到n/2时,OUT端变为低电平,直到计数为0,计数会从初值从新开始计数。
3.若n为奇数,OUT端的高电平宽度为(n+1)/2,低电平为(n-1/)2。
4.计数过程GATE变为低电平,则暂定计数,待到GATE再次有效时,会从初值从新计数。
5.允许计数过程任何时候改变计数初值,不影响当前计数周期,且会在下一个计数周期开始新的初值计数。
【OUT输出】
n为偶数时,输出正脉冲负脉冲1:1的方波。
n为奇数时,输出输出的正脉冲比负脉冲多一个CLK周期。
方式4:软件触发方式
方式4和方式0相似,不同点在于方式0结束时,输出高电平,方式4输出低电平。
因为计数过程中是由软件把计数初值装入计数器来触发的。
【写入控制字】
OUT端变为高电平。
【写入初值】
若GATE为高电平,则立即开始计数。
【计数过程】
若GATE变为低电平,则停止计数,待到GATE变为高电平,则从初值从新计数。
【OUT输出】
计数值减到0时,输出一个宽度为CLK周期的负脉冲。
方式5:硬件触发方式
方式5和方式2相似,不同点在于方式2结束时,自动循环;方式5需要GATE信号才开始进入下一个循环。
由GATE上升沿触发计数开始工作。
【写入控制字】
OUT变为高电平。
【写入初值】
需要等待一个GATE上升沿,计数器才开始工作。
【计数过程】
允许计数过程中任何时候改变初值,不影响当前计数周期,且会在下个周期,从新的初值开始计数。
计数结束时,会自动装入初值,但并不会自动开始,需要等待GATE信号上升沿才开始计数。
【OUT输出】
输出宽度固定为一个CLK周期的负脉冲,表示计数结束。