30天自制操作系统——第十二天添加定时器(一)

定时器

定时器对操作系统而言十分重要,它会每隔一段时间发送一个中断信号给CPU。想要在电脑里管理定时器,需要对PIT进行设定。

PIT(Programmable Interval Timer),可编程的间隔定时器,可以通过设定PIT,让定时器每隔多少秒就产生一次中断。PIT连接着IRQ(interrupt request)0 ,所以设定了PIT就可以设定IRQ0的中断间隔。

将中断周期设置为11932,中断频率即为100Hz,也就是1秒钟发生100次中断,而11932换算成十六进制数就是0x2e9c。

设置PIT函数,init_pit:

void init_pit(void)
{
	io_out8(PIT_CTRL, 0x34);
	io_out8(PIT_CNT0, 0x9c);
	io_out8(PIT_CNT0, 0x2e);
	return;
}

计量时间

我们让这个定时器做点什么吧。定义一个结构体struct TIMERCTL,在这个结构体内定义一个计数变量count。初始化PIT时,将这个计数变量设为0。

每次发生定时器中断时,计数器变量就会增加1,即每秒钟它会增加100。

bootback.h和timer.c节选:

struct TIMERCTL {
	unsigned int count;
};

struct TIMERCTL timerctl;

void init_pit(void)
{
	io_out8(PIT_CTRL, 0x34);
	io_out8(PIT_CNT0, 0x9c);
	io_out8(PIT_
  • 50
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值