首页
社区
课程
招聘
[旧帖] [求助]cpu是怎么样检测到中断的? 0.00雪花
发表于: 2013-3-5 17:20 1822

[旧帖] [求助]cpu是怎么样检测到中断的? 0.00雪花

2013-3-5 17:20
1822
cpu是怎么样检测到中断的?
比如说键盘 按下键盘a键cpu他是怎么样知道我按下了a键呢
比如cpu一直不停的百分之100的去执行指令,
他怎么样知道我按下a键呢?

或者说我按下a键的时候键盘自己把a键送到某个位置,
而cpu会定时访问指定位置是否有字符?
大概是不是这样呢?
还是怎么样呢?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 110
活跃值: (34)
能力值: (RANK:50 )
在线值:
发帖
回帖
粉丝
2
外部中断有些是通过对CPU管脚加信号引起的,这是电子电路方面的知识。
至于键盘工作原理,请网上搜索一下,资料大把大把。典型的可以看8042pt键盘,USB的要复杂一些
比如:http://blog.csdn.net/shifters/article/details/6979232
2013-3-5 18:39
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我也是一个新手,我觉得,你一按键盘,就会产生一个电信号给CPU控制器,cpu控制器控制输入输出寄存器存取外部设备(比如键盘)的信号便待处理。我觉得你问的问题有点钻牛角尖,关于这方面的原理,真想搞清楚,明白,建义去看操作系统原理与电子电路原理等相关书,一起加油,一起进步。。
2013-3-6 09:20
0
雪    币: 293
活跃值: (287)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
可以看看微机接口的,CPU中断脚接了8259A芯片,然后这芯片就外接键盘等设备,键盘按键的时候会产生一个中断,请求CPU资源,CPU做相应的处理然后去读取键盘的扫描码,中间又涉及到中断处理函数。读取出来后存入一个buf让上层的应用来读取数据,系统会开一个线程不断的循环查询这个buf,在win下是csrss.exe开的RawInputThread线程,下面驱动又会涉及到Kbdclass.sys、i8042prt.sys等
2013-3-6 10:28
0
雪    币: 110
活跃值: (34)
能力值: (RANK:50 )
在线值:
发帖
回帖
粉丝
5
基本正确,不过真的写商业化代码还得考虑到USB键盘的情况
USB键盘可能在BIOS层被模拟成8042PT的,也可能就是作为USB设备工作的
2013-3-6 18:00
0
雪    币: 293
活跃值: (287)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
记不太清楚了,好像是 i8042prt.sys 驱动被换成了一个usb驱动,而数据是主动发入而非cpu去读取的(在我记忆中是这样的),具体过程也就只能自己研究了
2013-3-6 22:30
0
雪    币: 291
活跃值: (213)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
7
USB是主从模型,除了极少数例外(例如唤醒),所有的数据传输都是由主机主动发起,设备被动应答(USB 1.0,1.1和2.0。3.0暂时没有资料不清楚,但应当没有根本性的改动)。鼠标键盘这类HID设备,通常采用中断传输(USB协议的中断传输是指主机保证以不大于某个时间间隔的频率定期去查询设备以确定是否有数据,并不是指硬件中断那种模型),主机会轮询(Host控制器完成,不需主机的CPU亲自完成)它们的中断端点,以确定是否有数据,设备会作出应答(令牌-数据-握手三阶段)。Host控制器会以某种方式将设备发过来的数据通知主机CPU(例如中断,具体不清楚),然后相关的驱动程序会根据设备在初始化阶段传送给主机的HID描述符解析数据的含义,并最终将数据发送给上层驱动程序。

USB协议是个相当复杂的协议,一般来说没有需要就不要深究了。
2013-3-7 02:41
0
雪    币: 291
活跃值: (213)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
8
lz如果还在上学,建议去找找电子系的同学了解一下基本电子电路,单片机或者嵌入式的相关知识,就不会对这些问题感到迷惑了。
2013-3-7 02:53
0
雪    币: 293
活跃值: (287)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
USB在当中断的时候就知道这个是键盘呢还是只觉得这是一个USB中断读取数据,然后读取完数据以后交给系统让系统识别这是键盘呢还是其他设备?我知道所有的设备非DMA设备需要把数据传入内存必须请求CPU去读取并请求总线资源,不过具体的系统处理过程呢?如果首先把数据取进来,那U盘、键盘等设备都可以统一的将数据先发送给系统,然后让系统处理,否者的话,不同的USB设备需要不同的中断号,让不同的中断处理函数去处理这些请求,求教过程?
2013-3-7 09:49
0
雪    币: 291
活跃值: (213)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
10
1. USB设备在连接到USB进行初始化的时候,需要向主机报告它的基本信息,包括设备类型,主机会给它分配一个唯一的地址,以后主机会通过这个地址,根据设备报告的类型和设备通信。所以在键盘初始化的时候,Windows的USB驱动或者BIOS就已经知道它是键盘了。

2. USB也是一种总线,在PC上往往是挂在PCI总线上的。另外,主机不直接和USB设备打交道,主机是通过USB Host Controller去和设备通信的,Host控制器负责处理底层的通信和信号编码等工作,在主机和设备之间传递数据。也就是说,Host控制器实际上相当于一个间接层,所以只要给USB Host Controller分配一个中断号(每个控制器一个,一般系统中最多也就几个控制器),就可以通过控制它和各种USB设备通信了。
2013-3-7 14:14
0
雪    币: 542
活跃值: (122)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
8086CPU每执行一条指令就检测中断标志位,若有,根据中断类型号IRQ0到IRQ7和跳入中断服务程序。PC机应该也类似,有些BIOS里可以看到对IRQ的设置。
2013-3-7 14:51
0
雪    币: 44
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
谢谢 各位~~ 看着你们对话·~能大概了解 是怎么样个原理~~
2013-3-7 17:09
0
游客
登录 | 注册 方可回帖
返回
//