打印

请问此次“中断中的”中断请求是否会被抛弃?

[复制链接]
6010|37
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xlsbz|  楼主 | 2009-12-8 17:38 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 xlsbz 于 2009-12-9 07:46 编辑

程序共有两个中断 都为低优先级别   编译器keil  优化级别0
程序首先进入定时器中断处理程序

void Timer0(void) interrupt 1
{
       //程序运行到这里,我向串口发送仅仅一个字符   (注:我原来写的是“一个一个”字符,我写错了,应该是“仅仅一个”字符)     
       i = 1;
       i = 1;
       i= 1;
       i = 1;
       i= 1;
       i  =1;
       i  = 1;
       i   = 1;

}


void UART(void) interrupt 4
{
      //这里是中断代码
}


书上说的意思是:UART发起的中断请求会被抛弃!

而我刚才用KEIL软件仿真试了一下,并不会被抛弃。keil仿真结果是:执行完了Timer0中断程序之后,又经过几个us的中断响应时间,然后进入了UART中断程序。

请问:大家认为UART发出的中断请求会被抛弃么?

相关帖子

沙发
不亦心| | 2009-12-8 18:26 | 只看该作者
书上说的意思是:UART发起的中断请求会被抛弃!xlsbz 发表于 2009-12-8 17:38



哪本书上说的呀?????

使用特权

评论回复
板凳
xlsbz|  楼主 | 2009-12-8 18:40 | 只看该作者
本帖最后由 xlsbz 于 2009-12-8 18:42 编辑
哪本书上说的呀?????
不亦心 发表于 2009-12-8 18:26


MCS-51 系列单片微型计算机及其应用(第三版) (孙育才)
大概8几年就出了第一版了  

这本书被我认为是最权威的最好的书!最最经典的书!

那你觉得什么情况中断会被抛弃?

使用特权

评论回复
地板
不亦心| | 2009-12-8 19:55 | 只看该作者
不好意思啊,我是个菜鸟,目前知道的这个程序应该和keil仿真的结果一致

中断请求被抛弃,除非在响应中断之前中断请求标志被清零,别的不知道。
愿意搬个凳子和LZ一块在这听课

使用特权

评论回复
5
xmufzw| | 2009-12-8 20:24 | 只看该作者
如果是串口连续收到多个字节的话,那应该前面的字节就会被覆盖掉,接收不到吧!
个人理解!同望高人指点!

使用特权

评论回复
6
xwj| | 2009-12-8 20:33 | 只看该作者
本帖最后由 xwj 于 2009-12-8 22:49 编辑

注意:UART的中断请求不会被抛弃!

MCS51 的不同中断 置位和复位的情形不同,有好几种:
1、INT0、INT1设为电平触发模式时,在每个周期的S5P2采样引脚,并把对应中断标志设为与对应引脚相反的电平,
——所以这时这个标志是和引脚电平直接相关的,如果这时优先级被别的同级或更高级中断占用而等那个中断退出时引脚电平已经变高,这这个中断会丢失;

2、同样是INT0、INT1,却设为边沿触发模式时,这时引脚电平的下降沿变化会置位中断标志,而上升沿变化不会有任何操作,而只有进入中断的跳转执行时才会由硬件清零中断标志
——所以这个中断不管等多久,最后都会获得机会执行,而不会丢失;而且在中断程序时如果引脚电平又有由高到低的变化,则中断标志又会被置位,但中断程序退出是又会再次进入中断(所以有时中断中改了端口电平又不应该再触发时则退出中断前还要清除EX0/1,你自己去想什么时候会碰到,不许开口就问!)

3、串口中断又是另一种情况:但接收完或发送完一个字节的最后一位时,对应中断标志位置位,置位后也是不会丢失的,当然RI或TI任意哪个为1时都会在别的中断退出后获得执行,这时应为是同一个入口,所以进入中断时硬件不会清零中断标志,中断程序中才可以通过判断RI、TI来知道到底是接收造成的中断还是发送造成的中断,而且中断程序应该在退出前人为清除对应中断标志(因为硬件不会自动清除标志)。
——所以,串口中断也是不管等多久都会有机会执行的,但如果你终端中呆的时间太久,下一个字节还没处理、再下一个又来了,那中间还是会丢了。不过串口通讯的波特率相对于CPU速度低太多了,如果写的程序这都处理过不来,那也是该打PP的。


其他中断事件(定时器TF0TF1、EXF2等)的行为大多端口边沿触发一样,有事件就会置位,然后一直保持,知道进入中断时由硬件清除标志,所以这些中断不管怎么样都会必然得到机会运行的

建议LZ你先去仔细看书,所有中断的行为,孙育才的书上都讲的很清楚的,可以说LZ根本没有认真看书,
实在该打PP哦~

MCS51中断行为.gif (114.74 KB )

MCS51中断行为.gif

使用特权

评论回复
7
xlsbz|  楼主 | 2009-12-8 22:26 | 只看该作者
请问此次“中断中的”中断请求是否会被抛弃? - 侃单片机 - 21IC...
书上说的意思是:UART发起的中断请求会被抛弃! 而我刚才用KEIL软件仿真试了... 注意:UART的中断请求不会被抛弃! MCS51 的不同中断 置位和复位的情形不同...
bbs.21ic.com/viewthread.php?tid=147750 40K 2009-12-8 - 百度快照


看样子我对百度搜索研究的还不够!

xwj大侠 2009-12-8 20:33的帖子在22点就被收录了!!!太牛了!!!
:lol

使用特权

评论回复
8
lxyppc| | 2009-12-8 22:35 | 只看该作者
这是对专门的一些网站做的优化,会把最新的最匹配的结果放在前面
google也是这样
过几天后会被排到后面去的

使用特权

评论回复
9
xlsbz|  楼主 | 2009-12-8 22:40 | 只看该作者
8# lxyppc
反对!

这要看时间!  这种情况不是哪天都有的!

我以前观察 一般在星期五!

使用特权

评论回复
10
xwj| | 2009-12-8 22:42 | 只看该作者
没什么,现在二姨的每个帖子都能很快搜索到了,不像以前。

这也算是采用通用的Discuz论坛核心的好处吧,毕竟对于网络蜘蛛来说更方便些

使用特权

评论回复
11
不亦心| | 2009-12-8 22:42 | 只看该作者
xwj前辈真是热心呀,讲的这么仔细,:P
学习了
多亏了xwj大侠,不然我都快被LZ的“这本书被我认为是最权威的最好的书!最最经典的书!”给动摇了,呵呵。

使用特权

评论回复
12
xlsbz|  楼主 | 2009-12-8 22:47 | 只看该作者
xwj前辈真是热心呀,讲的这么仔细,:P
学习了
多亏了xwj大侠,不然我都快被LZ的“这本书被我认为是最权威的最好的书!最最经典的书!”给动摇了,呵呵。 ...
不亦心 发表于 2009-12-8 22:42


xwj说
建议LZ你先去仔细看书,所有中断的行为,孙育才的书上都讲的很清楚的,可以说LZ根本没有认真看书,


难道楼上高人没看到么?

xwj说:书是好书。只是我看的不够仔细!

等我明天好好看看 再做定夺......:sleepy:

使用特权

评论回复
13
xwj| | 2009-12-8 22:53 | 只看该作者
我贴的那个图就是孙育才的书上的,明明书上写的那么明白,LZ都还是说的稀里糊涂,
所以我才说LZ 应该先去仔细看书:)

使用特权

评论回复
14
xlsbz|  楼主 | 2009-12-9 07:47 | 只看该作者
如果是串口连续收到多个字节的话,那应该前面的字节就会被覆盖掉,接收不到吧!
个人理解!同望高人指点!
xmufzw 发表于 2009-12-8 20:24


多谢提醒! 我帖子不小心写错了  应该是“发送仅仅一个”字符

使用特权

评论回复
15
xlsbz|  楼主 | 2009-12-9 08:33 | 只看该作者
本帖最后由 xlsbz 于 2009-12-9 08:39 编辑
我贴的那个图就是孙育才的书上的,明明书上写的那么明白,LZ都还是说的稀里糊涂,
所以我才说LZ 应该先去仔细看书:)
xwj 发表于 2009-12-8 22:53

xwj大侠,你引用的书上的话似乎和咱讨论的问题不太相关吧

请关注“响应中断的条件”那节我用的是第三版,你的大概是第四版吧)我没有PDF版,我的是纸版。

书中说:
********************************************************
      为保证正在执行的程序不因随机出现的中断响应而被破坏或出错,又能正确保护和恢复现场,必须对中断响应提出要求。

       主机响应中断首先是中断源有请求,而且是在允许中断响应(即IE寄存器的EA=1及对应的控制位置为1)的条件下,主机在每个机器周期的S5P2状态采样中断请求标志位,在下一个机器周期对采样到的中断请求按中断优先级或优先顺序进行处理,对确认的中断请求还必须满足下列条件:
(1)无同级或高优先级中断正在服务中;
(2)当前指令已执行到最后一个机器周期并已结束;
(3)当前指令已执行的不是返回(RETI)指令或访问IE、IP特殊功能寄存器指令。

        则中断系统由硬件生成一条长调用(LCALL)指令。控制程序转入对应的中断服务程序去执行。只要上述三条件中有任意一条不满足,都将丢弃本次中断请求封锁硬件生成LCALL指令而取消本次中断响应

        上述三条件中的第1条保证正在执行的同级或高一级的中断服务不被中断;第2条保证正在执行的当前指令不被破坏;第3条保证除当前正在服务的RETI或访问IE、IP指令的执行完外,还必须再执行完下一条指令,以保证中断服务程序的正确返回以及IE、IP寄存器功能的正确设置

**********************************************************

我认为我在“楼主位”的那个程序不符合“无同级或高优先级中断服务正在服务中”这一条。因为采样到串口中断请求后,同级的中断服务正在服务中(就是说定时器0的中断服务正在服务中),那么将丢弃本次中断请求




  


xwj大侠真的很热心啊 多谢:)  

xwj大侠请注意“楼主位”的程序有点变动:
   //程序运行到这里,我向串口发送仅仅一个字符   (注:我原来写的是“一个一个”字符,我写错了,应该是“仅仅一个”字符)

使用特权

评论回复
16
xwj| | 2009-12-9 08:45 | 只看该作者
本帖最后由 xwj 于 2009-12-9 08:48 编辑

怎么理解力这么差呀?
我贴那个是因为你说“书上说的意思是:。。。”
但是书上什么时候是那个意思???

而且就你LS的引用内容,你还是没理解书上的意思。
这里的丢弃是指当前指令放弃响应该中断,而取消本次中断请求,但可没有清除中断标志哦~;
而等到下一次条件满足时,下一指令又做同样的判断...
只要没有一直被高中断级占用,那个中断总有执行到的时候的。

唉,看不懂的话就去多看几遍吧

使用特权

评论回复
17
xwj| | 2009-12-9 08:47 | 只看该作者
好好去理解“丢弃”的到底是什么吧~

使用特权

评论回复
18
LYXQ| | 2009-12-9 08:56 | 只看该作者
串口中断丢失这情况我遇到过,确实存在,就是说明明看到RI=1;可就是再也进不去中断了。这种情况可能是关中断造成的吧?我也前那个系统里面用了个时钟芯片,仿I2C的总线的,深圳一家公司做的东西,那个东西对时序要求比较苛刻,刚开始时读时钟时就关中断了,结果就出现这个问题。通讯时会出现无法通讯的问题,而且无法恢复,除非系统复位。后来修改程序,不再关中断,就没再出现这种问题

使用特权

评论回复
19
xlsbz|  楼主 | 2009-12-9 09:13 | 只看该作者
本帖最后由 xlsbz 于 2009-12-9 09:23 编辑
好好去理解“丢弃”的到底是什么吧~
xwj 发表于 2009-12-9 08:47

大侠,我再看看书再讨论!:'(

使用特权

评论回复
20
一方沃土| | 2009-12-9 09:14 | 只看该作者
这贴子值得学习!

使用特权

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

本版积分规则

190

主题

1614

帖子

4

粉丝