我们一直在讲时钟中断,但好像到目前为止,我们还没考虑过它为什么发生,以及由谁来产生。 中断当然不是凭空产生的。实际上它是由一个被称做PIT (Programmable Interval Timer)的芯片来触发的。在IBM XT中,这个芯片用的是Intel 8253,在AT以及以后换成了Intel 8254。8254功能更强一些,但对于增强的功能,我们并不一定涉及,在下面的陈述中,我们只称呼它8253。
/* 8253/8254 PIT (Programmable Interval Timer) */
#define TIMER0 0x40 /* I/O port for timer channel 0 */
#define TIMER_MODE 0x43 /* I/O port for timer mode control */
#define RATE_GENERATOR 0x34 /* 00-11-010-0 :
* Counter0 - LSB then MSB - rate generator - binary
*/
#define TIMER_FREQ 1193182L /* clock frequency for timer in PC and AT */
#define HZ 100 /* clock freq (software settable on IBM-PC) */
/* 初始化 8253 PIT */
out_byte(TIMER_MODE, RATE_GENERATOR);
out_byte(TIMER0, (u8) (TIMER_FREQ/HZ) );
out_byte(TIMER0, (u8) ((TIMER_FREQ/HZ) >> 8));
/*=======================================================*
milli_delay
*=======================================================*/
PUBLIC void milli_delay(int milli_sec)
{
int t = get_ticks();
while(((get_ticks() - t) * 1000 / HZ) < milli_sec) {}
}