第10章 时钟中断(PIT编程)
来源:互联网 发布:jenkins java home 编辑:程序博客网 时间:2024/05/16 08:58
设置时钟中断就是给操作系统加上心跳。设置时钟中断就是是设置PIT(8253/54芯片),可参考 《IBM-PC汇编语言程序设计 第2版》p384。
PIT有一个控制寄存器(0x43)和三个计数寄存器(0x40~0x42)。三个计数寄存器是16位的,有两种表示形式(BCD和二进制),有6种模式。控制寄存器中bit7~bit6用来选择计数寄存器,bit5~bit4用来选择写入方式,bit3~bit1用来选择计数模式,bit0用来选择表示形式。
设置计数器的方法:
1、先将控制字写入控制寄存器(选择哪个计数寄存器,选择写入方式,选择计数模式,选择表示方式)。
2、向选定的计数寄存器写入计数初值
当计数值是8位时,只用1条输出指令写入初值
当计数值是16位时,用2条输出指令写入初值(因为8253/54的数据总线是8位的)
CLK0、CLK1、CLK2的输入频率都是 1.1931817Mhz。计数器0作为定时器为系统时钟提供计时基准。计数器0的输出端OUT0与中断控制器8259A的中断请求IRQ0相连。假如需要计数器0的中断频率为M每秒,则divisor = 1193180/M。设定计数器0为模式3,输出频率为M。
设置计数器0的程序如下所示
timer.h文件的源代码如下所示
timer.c文件的源代码如下所示
outportb(0x43, 0x36); //选择计数器0,输出模式3outportb(0x40, divisor&0xff); //把初始值的低字节写入LSB中outportb(0x40, (divisor>>8)&0xff); //把初始值的高字节写入MSB中 outportb(M_IMR, inportb(M_IMR)&0xfe); //打开PIC1中的IRQ0中断(时钟中断)
timer.h文件的源代码如下所示
#ifndef _TIMER_H_#define _TIMER_H_#define CLOCK_RATE 1193180void init_timer(unsigned int hz);void do_timer(void);#endif
timer.c文件的源代码如下所示
#include "asm.h"#include "io.h"#include "idt.h"#include "video.h"#include "kernel.h"#include "8259.h"#include "timer.h"void init_timer(unsigned int hz){ unsigned int divisor = CLOCK_RATE/hz; outportb(0x43, 0x36); //选择计数器0,输出模式3 outportb(0x40, divisor&0xff); //把初始值的低字节写入LSB中 outportb(0x40, (divisor>>8)&0xff); //把初始值的高字节写入MSB中}volatile unsigned int timer_ticks = 0;void do_timer(void){ outportb(M_PIC, EOI); //告诉PIC1,中断处理函数已经结束,可以处理新来的中断。 //因为定时器是连接到PIC1的IRQ0上,所以不许要通知PIC2 scheduler();}
- 第10章 时钟中断(PIT编程)
- 第10章 中断与时钟
- MCF52259 PIT中断
- Mini2440 裸机编程-时钟中断
- 第9章 中断和动态时钟显示
- linux时钟RTC,TSC,PIT,jiffies
- PIT
- 时钟中断
- 第7章 初始化中断(8259A编程 PIC编程)
- 【中断异常】时钟中断
- PIT设置_中断优先级设置__MK20DX128VLH5_K20系列
- 中断线程(java并发编程第7章)
- 第8章 中断
- 第6章 中断与中断处理
- AXD 与 时钟中断!!!
- 单片机中断计数器时钟
- 时钟中断处理程序
- 时钟中断技术
- ES PS TS 流的区别
- MySQL入门很简单-学习笔记 - 第 4 章 MySQL数据类型
- 由Mifare 1卡破解带来的危险以及应对方法
- MySQL入门很简单-学习笔记 - 第 5 章 操作数据库
- 菜鸟学习OGRE和天龙八部之十八: 获得档案(Archive)文件列表
- 第10章 时钟中断(PIT编程)
- 关于用getchar()代替scanf处理大量输入
- MySQL入门很简单-学习笔记 - 第11章 插入、更新与删除数据
- Oralce、DB2、SQL Server、MySQL 数据类型总结
- MySQL入门很简单-学习笔记 - 第15章 MySQL用户管理
- MySQL入门很简单-学习笔记 - 第16章 数据备份与还原
- STL中迭代器失效——用erase()方法遍历删除元素
- AIX常用命令
- 如何在 Windows XP 中将 FAT16 或 FAT32 卷转换为 NTFS 文件系统 - 易宝典