FreeFlyOS【九】:timer部分详解

本文深入剖析FreeFlyOS中timer.c和timer.h文件,讲解8253定时器的驱动原理,并指出系统如何实现每秒中断一次以执行进程调度。
摘要由CSDN通过智能技术生成

timer.c

定时器初始化

#include "timer.h"
#include "../asm/asm.h"
#include "../pic/pic.h"
#include "../interrupt/trap.h"

unsigned int volatile jiffies; //记录自系统启动以来产生的节拍总数

unsigned int volatile second; //根据节拍总数换算成秒数

void timer_init(unsigned int frequency){
        //Intel 8253/8254 PIT芯片 I/O端口地址范围是40h-43h,输入频率为1193180,frequency为每秒中断次数
        unsigned int divisor=1193180/frequency;
        //将8253/8254芯片设置为模式3
        outb(0x43,0x36);
        unsigned char low=divisor&0xff;
        unsigned char high=(divisor>>8)&0xff;
        outb(0x40,low);
        outb(0x40,high);
        jiffies=0;   //初始化节拍总数,防止更换页表时初始化值更改
        second=0; //初始化秒数
        pic_enable(IRQ_TIMER);
}

timer.h

#ifndef  _TIMER_H_
#define _TIMER_H_

void timer_init(unsigned int frequency);

#endif

定时器8253驱动原理如下,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值