8253 芯片结构

使用 8253 作为计数器是因为使用 CPU 进行计数的话,可能会因为中断等问题而不可控。比如

1
2
    MOV CX, N
AGAIN:LOOP AGAIN

可以进行计时,但是软件方法并不稳定。因此引入了 8253 这一硬件。

  • 左侧的 A1A0A_1A_0 选择 Counter 或者控制寄存器。当 A1A0=00,01,10,11A_1A_0=00,01,10,11 时,分别选择 Counter0, Counter1, Counter2, Control Register。
  • 右侧是三个 Counter。工作流程为:门控信号有效时,给 Counter 一个计数初值 N,然后在外部时钟的驱动下 Counter 开始倒数,倒数到 0 的时候 OUT 进行输出。同时输出的形式不仅仅可以是方波,也可以有不同的 duty cycle。
    • CLK 是驱动用的时钟
    • GATE 是门控,有效时 Counter 才工作
    • OUT 是输出信号。
  • 这里的 Counter 最大可以将频率降低 6553665536(Binary) 或者 1000010000(BCD) 倍。

Counter 内部结构

  • CRCR 寄存器中储存的是计数初值。计数初值最大是 00,之后会减到 6553565535 或者 99999999
  • CECE 中储存的是计数值。最开始初始化为计数初值,然后会在时钟的驱动下自减
  • OLOL 可以锁存当前的计数值

控制字格式

SCSC 用于选择当前 Counter

RWRW 与读写有关

其中 00 指的是把计数值写到上述 OLOL 中。
其他几种情况在考虑写高字节还是低字节。这是因为寄存器有 1616 位,而数据线只有 88 位。

MM 用于选择模式

BCDBCD 表示是否采用 BCD 编码