打印

请教关于中断的问题!

[复制链接]
1682|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
梦境缠绕|  楼主 | 2011-3-24 17:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 梦境缠绕 于 2011-3-24 17:08 编辑

请教……请问中断到底是个什么东西?处理中断的流程~关键是中断的作用?

请尽量简洁易懂一些,学习时应该注意的是什么……手里面资料有不少,但是……看不懂啊!

相关帖子

沙发
cwfboy| | 2011-3-24 20:49 | 只看该作者
LZ学过51么???

使用特权

评论回复
板凳
梦境缠绕|  楼主 | 2011-3-24 21:03 | 只看该作者
没有学过;但是现在必须直接用DSP……所以现在很头大!

使用特权

评论回复
地板
cwfboy| | 2011-3-24 21:11 | 只看该作者
那痛苦了,实话,DSP比51麻烦的多了

使用特权

评论回复
5
aresc| | 2011-3-24 22:25 | 只看该作者
本帖最后由 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之类的关键字,编译器估计自己搞定.

使用特权

评论回复
6
aresc| | 2011-3-24 22:26 | 只看该作者
本帖最后由 aresc 于 2011-3-25 23:49 编辑

可屏蔽中断: CPU可以把某些中断屏蔽掉而不去响应它,一般都有个中断屏蔽寄存器IMR, 里面的每个位对应一个可屏蔽中断,比如CPU给某个位写0,就不会响应改位对应的中断处理;反之写1就可以响应该位对应的中断.
不可屏蔽中断: 一般就是复位中断,CPU必须响应的.

从汇编语言角度看中断的软件处理(C语言最终还是被编译器转成汇编了). 假如如下的一段程序:

   地址         指令
                 ............
  0x4000    move d1,d2;
  0x4001    add   d2,d3;
  0x4002    mul    d1,d2,d0;
  0x4003    jmp    0x4000;
  0x4004    nop;
  0x4005    nop;
  0x4006    move  d2,d4;
                 ............

假如当CPU的运行到地址0x4001(PC=0x4001),有一个中断来了,那么硬件会自动将下一条指令的地址0x4002压栈, 然后PC跳到中断向量表的该中断对应的地址,然后通过执行中断向量表的那个JMP跳转到对应的中断服务程序里. 中断服务程序运行完退出时会有弹栈的动作将PC重新恢复为0x4002,CPU就恢复从中断的地方接着运行了.

压栈的地方有个特殊的就是有些指令不是单周期的,比如TI-DSP C5x的跳转指令B都是3个周期的且不会被中断的,比如:
         .....
1:      B       #Lable;
2:      NOP;
3:      NOP;
         .....
假如在1:处有中断产生,CPU也必须先执行完这3条指令才能在#Lable处去响应中断.

使用特权

评论回复
7
乔巴aiai| | 2011-4-1 16:54 | 只看该作者
上面说的是51的,那dsp的也一样吗

使用特权

评论回复
8
乔巴aiai| | 2011-4-1 16:55 | 只看该作者
我学过51,可是dsp完全不懂啊,好难

使用特权

评论回复
9
aresc| | 2011-4-4 22:14 | 只看该作者
我没用过51,所有的处理器的中断都和这个大同小异.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

75

帖子

1

粉丝