它们不一定像你在ISR上说的第一点一样:中断是异步的,因此必须以某种方式'中断'主处理器的工作。
例如,让我们看看这个MIPS代码装饰有地址,不使任何有用的东西:
4000. add $1, $2, $3
4004. sw $ra, 0($sp)
4008. jal subr # function call, sets $ra to 4012 and jumps to 4024
4012. lw $ra, 0($sp)
4016. jr $ra
4020.
4024. subr: sub $2, $1, $3
4028. jr $ra
此代码可以从主处理器handeled:算术操作(线1,7)由算术单元完成,存储器控制器的存储器访问(第2,4行)以及跳转(第3,5,8行)也由主cpu完成。 (jal
的实际地址在绑定目标文件时设置。)
这是用于函数调用。在任何时候确定代码现在在哪里以及哪个代码在下一个时间点被执行(即当程序计数器递增时:PC + = 4)。
现在有来了一点,当你的函数做一些复杂的,但你仍然希望软件上击键反应。然后一个所谓的协处理器开始发挥作用。该协处理器等待,直到发生某个事件(如键盘上的按键),然后调用中断处理程序。这是位于内存中某个地址上的一段代码。
认为,该处理器在计算上面,但在此期间要存储在地址keys
击键次数。然后你写一个PROGRAMM起始地址为0x80000180
(这被定义为MIPS的exeption处理程序地址):
lw $at, keys
addi $at, $at, 1
sw $at, keys
eret
现在是什么在按键发生什么呢?
- 协处理器得到了解的击键
- 为主。处理器的当前PC保存
- 主处理器的PC设置为0x80000180,中断代码被执行
- 在
eret
的PC设置到主处理器的PC中断发生
- 前主progamm的执行继续存在。
在这里有正常执行一个开关中断步骤2和3之间,处理再次从4至5
注:我已经简化了这个有很多,但它应该是清楚的,怎么中断与函数调用不同,以及硬件如何具有中断处理的附加功能。
可惜我不能提供在线资源,因为这依赖于计算机系统的书面脚本利用;) – contradictioned
所以做这意味着像8051那样的微处理器或不具有协处理器的微控制器8091将具有相同的中断和功能调用?请帮助我,我真的很困惑 –
我不是微控制器的专家,但在这个网站是8051的框图:http://aninditadhikary.wordpress.com/tag/intel-8051/你可以看到'Interrupt Control',放在cpu旁边,类似于mips协处理器。 – contradictioned