第12天:定时器(1)
1、内容1:使用定时器
定时器的意思是每隔一段时间就发送一个中断信号给CPU,这样CPU就不需要自己去计量时间。如果不采用定时器会导致程序对时间的管理难度增大,并且不能再使用HLT指令了。因此很有必要采用定时器中断,当使用定时器后,程序只需要以自己的步调处理问题即可,当需要知道时间时,只需要在中断程序中记录定时器中断发生的次数即可。即使CPU处于HLT状态时,也可以通过中断来唤醒。
那么如何才能管理定时器呢?
对PIT进行设定即可,PIT=可编程的间隔型定时器,通过设定,让定时器每隔多少秒产生一次中断。电脑中的PIT连接IRQ的0号,所以只要设定了PIT就可以设定IRQ0的中断间隔。
IRQ0的中断周期变更:
D0-D7就是我们的选择模式端
书本上介绍的往0x43中写入0x34对应的控制字格式:
写入的是0x34对应二进制为00110100,那么选择的模式就是计数器0,选择先低后高两个字节读或写,以方式2进行二进制计数。方式2在上面的文库中找到的模式是频率发生器。往0x40写入的是中断周期,书上的意思是写入的值代表了多少个时钟周期,芯片时钟频率为1193.18KHZ,那么中断频率=(单位时间时钟周期数(主频))/(设定的数值)。如果指定中断周期为0,看作指定为65536,如果设定值是1000,那么中断产生频率就是1.19318KHz,根据比例可以设定不同的值。
在这里,只需要执行3次OUT指令设定即可完成定时器的设定,如果将中断周期设为11932的话,中断频率即为100HZ,即1s发生100次中断。将11932换算为十六进制0x2e9c来进行设定。a的timer文件与bootpack.c中:
选择模式定义一个init_pit函数:
主函数中加入:
这样设定的话ÿ