自己动手写操作系统系列第3篇,实现时钟和键盘中断

news2024/12/26 11:27:22

对应labOS版本1.3
程序源码可以私聊我

picirq.h

  • int 0x20~0x2f接收中断信号IRQ0~15,因为int 0x00~0x1f不能用于IRQ。

picirq.c

  • pic0_mask=0xfb1111 1011;PIC1以外全部禁止。pic1_mask=0xff1111 1111;禁止所有中断

  • pic_enable函数就是将irq_num即IRQ号屏蔽取消

  • 当一个外部中断请求通过中断请求线IRQ传输到IMR(中断屏蔽寄存器),IMR根据设定的中断屏蔽字决定丢弃还是接受。

  • 主从PIC如下如所示,PIC是一个8259A芯片,上面有一些引脚,其中包括了ICW、OCW等引脚。

  • 每一个8259A芯片都有两个I/O ports,程序员可以通过它们对8259A进行编程。
    Master 8259A的端口地址是0x20,0x21;Slave 8259A的端口地址是0xA0,0xA1。

  • EOI:end of interrupt

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jl624Ogv-1666788382369)(images/image-20221013184815828.png)]

kbd.h

  • 键盘按键参考https://wiki.osdev.org/PS/2_Keyboard#Scan_Code_Set_1

int_handlers.c

  • 键盘控制器是8042(PS/2)芯片,它的作用是接收和解码来自键盘的数据并放到缓冲区,然后通知8259A产生IRQ1。
  • 读缓冲区,读0x60端口
  • 写缓冲区,写0x60端口
  • 读状态寄存器,读0x64端口
  • 控制寄存器,写0x64端口
  • 其中读出的缓存数据0xe0和0xe1是特殊键值需要单独处理
  • 键盘抬起产生的数值=按下产生的数值+0x80

init.c

  • CR3寄存器存储的是页目录表页面起始物理地址,因为页目录表都是4KB对齐,因此只有高20位是有效的。低12位有其他用处。
  • CR0寄存器最低位是PE保护模式标志位,最高位是PG分页模式标志位。
  • 启动分页机制需要三步:1、准备好页目录表和页表;2、将页表地址写入CR3;3、将CR0的PG位制1。
  • 另外启动分段或者启动分页,也就是修改CR0的相关位置后,以后都是由硬件自动进行地址的转换。
  • 再记录一下中断的开发。先定义好函数声明和函数实现,然后再GDT表初始化完成的基础上用中断函数指针去初始化IDT表,然后再做好IDTR,这样就可以根据中断号去找中断函数了。然后需要注意的是什么中断对应什么编号是由硬件本身决定的,比如https://logix.cz/michal/doc/i386/chp09-08.htm#09-08,然后重点是要设置IMR取消对此中断的屏蔽,这样当下次产生中断时,硬件根据自身情况产生中断号,经过IDTR找IDT,然后找到相应的中断处理函数执行。这样就完成了一次中断处理。

最后的运行效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1004.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux下安装jdk】Linux下安装jdk

Linux下安装jdk 1、-RPM安装 1.1、检查系统是否安装过jdk java -version 检查是否有安装包 rpm -qa | grep java 1.2、安装jdk 查看服务器版本: uname -a 下载jdk对应rpm包: https://www.oracle.com/java/technologies/downloads/#java8 上传安装包至任意目录下&…

用户登录权限校验 JWT【详解】

JWT (json web token)是当前最流行的用户登录权限校验(用户认证鉴权)方案。 官网 https://jwt.io/ JWT 的工作流程 客户端填写账号密码访问登录接口 login,将账号密码传给服务端服务端验证账号密码是否正确&#xff0c…

职言 | 校招面试有感,一个面试官的几点建议

职言: 最近一直在校招,我(作者)和同事说等这段时间结束,我不想再参与面试了,快面吐了。从校招开始,我团队前前后后陆续进了500多封学生简历,我经常一整天排满了面试,聊到…

【电子通识】芯片资料(数据手册/规格书)查询常用网站和方法

目录 1.AlldataSheet 网站(建议使用) 2.ICpdf 网站 3.CIC中国IC网 网站 4.datasheet(不建议使用) 5.半导小芯 (建议使用) 6.立创商城 (建议使用) 在做硬件的芯片选型、产品维修…

生物信息学笔记02 -- 研究的一般方法

生物信息学概述 以基因组DNA序列信息为源头,识别基因组序列中代表蛋白质和RNA基因的编码区,阐明非编码区的信息特征,破译隐藏在DNA序列中的遗传语言规律 生物信息学研究的内容与方法 研究主要内容 ⚫ 生物学数据的收集、存储、管理与提供 …

C++:继承

文章目录前言一、继承的概念及定义1.继承的概念2.继承的定义二、基类和派生类对象赋值转换三、继承中的作用域四、派生类的默认成员函数五、继承与友元六、继承与静态成员总结前言 本文介绍C中的继承。 一、继承的概念及定义 1.继承的概念 继承机制是面向对象程序设计使代码可…

厨电智能化趋势下,究竟什么才是真正的“用户思维”?

文|智能相对论 作者|佘凯文 近期2022年前三季度的各项经济数据在陆续发布,大环境依然承压,各个行业都在负重前行。 厨电行业在房地产下滑、疫情反复等因素影响下,前三季度同样一直承受着不小的压力,AVC数据显示,202…

【面试官说实现一个顺序表,但听到要求后我沉默了】

在很多人心里,顺序表是数据结构最基础最简单的东西了,如果面试让我们手撕一道顺序表,相信大家心里早就乐开了花,但是面试官真的会出这么简单的题吗? 答案是:当然会,哈哈。 我们来看看面试官的要…

【精选】ARMv8/ARMv9架构入门到精通-[前言]

快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】: 【精选】ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈 想不想一夜暴富&#xf…

python基于PHP+MySQL的高校公选课管理信息系统

随着我国教育质量提高,在校大学生的数量也在不断的增长。相对应的如何让学生根据自己的兴趣爱好进行在线选课,从而有目的的对学生进行培养,也是当前很多高校教务人员所关心的问题。能够让更多的大学生进行在线自主选课,选择自己所喜欢的课程和教师,我们开发了高校公选课管理系统…

强化学习论文分析3---蜂窝网络联合频谱和功率分配的深度强化学习--《Deep Reinforcement Learning for ......》

目录一、研究内容概述二、系统目标与约束1.系统描述2.系统目标三、DQN、DDPG网络设计四、性能表征本文是对论文《Deep Reinforcement Learning for Joint Spectrum and Power Allocation in Cellular Networks》的分析,若需下载原文请依据前方标题搜索,第…

深入理解java线程池+源码解读

文章目录一.线程池简介1. 什么是线程池2. 线程池的优点3. 线程池中核心关系继承4.对线程池的理解①框架的两极调度模型②核心线程和非核心线程的本质区别二. 线程池核心概念1. 线程池核心参数2.两种常见的线程池①newCachedThreadPool②newFixedThreadPool③newSingleThreadExc…

基于STM32F469 discovery kit 开发板的开发3

目录基于STM32F469 discovery kit 开发板的开发3软件项目架构1. 应用层:2. Drivers层3. Middlewares层软件工作流程main函数入口LED等初始化配置外部中断基于STM32F469 discovery kit 开发板的开发3 前文我们已经实现了第一个例程在discovery 开发板上的运行&#…

virtio机制简介

What is VirtIO VirtIO是virtual input & output的缩写,是在host device之上的一层抽象层,提供给虚拟机使用。VM虚机一般是通过virtio device来使用host devices设备的,所以一个VirtIO device的主要作用其实就是充当VM与host device har…

Arduino UNO 可视化GT-24工业级无线透传

Arduino UNO 可视化GT-24工业级无线透传一、前言二、硬件要求三、参数基础四、原理剖析五、透传思路六、程序概要七、arduino使用接线八、成果展示一、前言 无线透传市面上较为常见的是基于蓝牙、esp的多种透传模块,今天介绍的则是用NRF24L01芯片构成的电路。&…

RocketMQ5.0 Broker主备自动切换模式消息不丢失部署方案

RocketMQ5.0主备自动切换模式下消息的不丢失方案如何进行部署?下面就来看一下 1. 下载RocketMQ5.0 首先我们去官网将RocketMQ5.0的版本下载下来。 $ wget https://dlcdn.apache.org/rocketmq/5.0.0/rocketmq-all-5.0.0-bin-release.zip 复制代码 下载完成后解压到…

Spring常用注解——@Autowired自动装配的作用和原理

一. 认识Autowired 当我们在Spring框架中配置Bean时&#xff0c;常见的有三种办法&#xff1a;①使用xml ②使用注解 ③使用javeconfig。由于第一种方法需要在application.xml配置文件中使用大量<bean>标签来进行注入&#xff0c;就衍生了注解&#xff0c;我们只要使用A…

Paper写作开头部分怎么具体分析?

Paper的组成部分包括了正文以及结尾&#xff0c;不过Paper整体印象很大程度上是由Paper开头段决定的。然而&#xff0c;写好Paper开头并不是一件不费吹灰之力的事。那么&#xff0c;Paper开头怎么写&#xff1f;接下来就让小编来给大家讲解几个写Paper开头的方法&#xff0c;希…

【python】之字典及其操作

个人主页&#xff1a;天寒雨落的博客_CSDN博客-C,CSDN竞赛,python领域博主 特别标注&#xff1a;仅为自己的学习记录笔记&#xff0c;方便复习和加深记忆&#xff0c;仅供借鉴参考&#xff01; 目录 前言 字典的创建 格式 字典名{key1:value1,key2:value2......} 字典名di…

大前端进阶:vue

目录 1.vue概述与前端知识体系 1.vue概述 2.前端三要素 2.前端发展史 1.三端统一 2.后端技术 3.了解前后分离的演变史 1.后端为主的MVC时代 2.基于AJAX带来的SPA时代 3.前端为主的MV*时代 4.Node JS带来的全栈时代 5.总结 4.第一个Vue程序 1.什么是MVVM 2.为什么…