本帖最后由 aresc 于 2011-3-25 23:15 编辑
中断是什么? 一种让CPU快速响应特定任务的机制,包括相应的硬件和软件.
首先产生中断信号(比如通过某个CPU引脚的电平由低(0)到高(1)的变化, 从而触发对应的中断)
然后中断控制器负责接收这些中断信号,再按照已经预设好的中断优先级通知CPU中断当前程序的运行(一般是主程序),转而去执行对应的中断服务程序,当中断服务程序执行完后,CPU会回到主程序被中断的那个地方继续运行(复位中断例外,CPU不会返回到进入中断前的状态)
中断优先级: 比如两个中断信号A,B同时产生时,中断控制器会先执行优先级高的那一个,中断优先级低的会暂时挂起,等高优先级的执行完再执行低优先级的.
中断嵌套: 比如在一个低优先级的中断程序运行还没结束时,有一个高优先级的中断产生了,如果CPU支持中断嵌套的话,那低优先级的中断就会被挂起,CPU会去执行高优先级的中断程序,高优先级执行完后再恢复低优先级中断的运行.
中断向量表: 用于CPU跳转到不同中断程序入口的指令集. 一般每个入口占用4个指令字,假设一个CPU只有三个中断,其中断程序起始地址分别为A, B, C. 则中断向量表的指令类似(可能不同CPU有些差别,但肯定都是让PC指针跳转到对应中断程序的起始地址):
JMP A; // 一般第一个都是复位中断程序入口.
nop;
nop;
nop;
JMP B;
nop;
nop;
nop;
JMP C;
nop;
nop;
nop;
中断向量表一般放在一个固定的内存地址处比如0(也可能是其他值), CPU复位中断后就会从0地址开始运行,用上表的例子,那么0地址就是一个JMP A指令, CPU直接跳到复位程序入口A开始执行.
中断服务程序: 如果用汇编写,那么所有中断里使用的寄存器都应该先保护,退出中断前要恢复这些寄存器的值;可能还包括使用的公共变量. 用C的话,好像有interrupt之类的关键字,编译器估计自己搞定. |