版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、关于STM8S外部中断问题!怎么识别是具体哪个引脚引起的中断! 复制链接Junsea电梯直达1楼 发表于 2010-12-11 10:41:48 | 只看该作者 举个例子,在PC口有的PC0和PC1两个信号都要求能够中断。而STM8S 对应PC口只有一个中断向量,我要怎么才能够知道具体是有PC0引起的中断呢?还是PC1引起的中断呢?我也看了坛子里面的一些相关的帖子,大致有这么一种方法,进入中断后读取IO口的电平状态以判断是哪个IO口引起的中断。但是我有个疑问,假定设置为下降沿触发中断。 PC0先出现下降沿,系统进入中断,如果在这个时间段,PC1也出现下降沿,在中断里面再读PC0和PC1电平状态
2、,仍然不能够判别是由PC0引起的中断,还是由PC1触发的中断啊!收藏5回复举报论坛公益广告:使用360产品将会被封锁ID。周流氓枪毙1万次也无法弥补3721犯下的罪行。Junsea2楼 楼主| 发表于 2010-12-11 11:39:22 | 只看该作者顶一下。回复举报公益广告:发表新主题时,务必起一个能说明帖子内容的清晰标题,否则将会被封锁ID(点击查看详细说明)bigZ3楼 发表于 2010-12-11 13:09:03 | 只看该作者不建议这样用最好一个PC,一个PD,每个口只开放一个中断回复举报公益广告:本论坛不得使用、宣传Q群。 有讨论请在论坛里进行。 违者将封锁ID.Junsea
3、4楼 楼主| 发表于 2010-12-11 13:28:46 | 只看该作者当然能够这样最好,只是现在的项目的硬件已经做好了,之前没有用中断,用的查询,发现有时候可能会出现跟不上的情况!所以想采用中断来做!回复举报公益广告:发表招聘帖子需要缴费,有需要可以联系网站工作人员王小姐snoopyzz5楼 发表于 2010-12-11 13:34:21 | 只看该作者不要用else或switch不就行了if(PC0=0)if(PC1=0).回复举报公益广告:广告只能发在本论坛的广告区,否则将封锁ID。Junsea6楼 楼主| 发表于 2010-12-11 13:45:51 |
4、 只看该作者楼上,程序当然可以这么写,只是我说的那种情况:PC0先出现下降沿,系统进入中断,在执行if(PC1=0)之前,PC1也出现下降沿,那么if(PC0=0)能够运行 if(PC1=0)也能够运行并没有达到只执行i f(PC0=0)的目的啊?回复举报本论坛禁止与网站产品有冲突的广告,如雕刻机、PCB、空气净化器等bigZ7楼 发表于 2010-12-11 17:52:54 | 只看该作者这种情况下为什么非要只执行一个呢既然同是发现都为0,同时执行不就行了回复举报snoopyzz8楼 发表于 2010-12-11 19:28:19 | 只看该作者 char status = PC_IDR;
5、 if( status&BIT(0) ) /PC0 if( status&BIT(1) ) /PC1 如果两个都能进入.说明基本同时(中断响应+中断跳转+局部变量赋值时间),理所当然全部应该执行回复举报Junsea9楼 楼主| 发表于 2010-12-11 23:14:24 | 只看该作者如楼上所说,是可以两个都响应。如果碰到5楼的情况,有PC0的下降沿触发了中断,那么下面代码的PC0和PC1位置的语句都将得以执行,可是系统设置了PC0和PC1都将产生中断请求,PC0的下降沿中断函数执行一次,当PC1产生下降沿的时候,中断函数再执行一次,这样下面PC1部分的语句不是被执行了两次,而PC1的下降
6、沿只产生一次? char status = PC_IDR; if( status&BIT(0) ) /能够执行 /PC0 if( status&BIT(1) ) /能够执行 /PC1 回复举报millwood010楼 发表于 2010-12-12 00:24:56 | 只看该作者只是现在的项目的硬件已经做好了maybe the next time you will learn not to put the cart in front of the horse.回复举报bigZ11楼 发表于 2010-12-12 13:45:13 | 只看该作者当PC0中断发生并进入ISR进行服务时,PC1也发
7、生了中断,当PC0中断返回时,可能会立刻再进入该中断服务这时就发生了 8L 说的情况,由于8S的IO中断无中断标志位,所以这种情况是无法避免的建议LZ使用查询方式,不知道时间来得及不,可以在主循环程序中多查询几次,或者在其他子程序中随时查询电平变化对一般的应用应该都是合适的回复举报Junsea12楼 楼主| 发表于 2010-12-12 20:42:27 | 只看该作者看来stm8s 每个IO口都可以中断的功能有些不完善哈!谢谢大家参与讨论。回复举报snoopyzz13楼 发表于 2010-12-13 13:40:11 | 只看该作者外部中断由于没有中断标志,所以如果中断发生时同源另一外部中断
8、发生,在退出中断后,并不会再一次进去中断.回复举报bigZ14楼 发表于 2010-12-13 15:54:18 | 只看该作者回复【12楼】snoopyzz 外部中断由于没有中断标志,所以如果中断发生时同源另一外部中断发生, 在退出中断后,并不会再一次进去中断.-你说的是有道理的,我的上述结论也只是猜测,但我发现8S的中断系统和一般单片机是不同的大家可以测试下:开放PC0的中断(边沿中断和电平中断都测试下),并在PC0的中断服务第一句就开启全局中断,然后手动触发该中断(也就是连续触发N次中断),这时,堆栈可能溢出。溢出的唯一解释,就是中断重入,而且是在没有返回的情况下重入的。堆栈溢出的情况是
9、我在TIM1的BK功能上发现的,但我不知道IO口是否会有相同情况。另外,如果你的说法正确,那么LZ说的中断函数被执行2次的可能并不存在,反而是会漏执行。回复举报bigZ15楼 发表于 2010-12-13 16:09:35 | 只看该作者以下情况可以使用4L的办法处理,不会有任何问题:PC0中断PC0中断响应PC1中断读PC口中断处理中断返回漏执行的情况:PC0中断PC0中断响应读PC口PC1中断中断处理中断返回至于8L提到的执行2次的情况,可以记录PC0的电平状态而避免,但漏执行时无法避免的。所以结论是:LZ遇到的问题,无法纯粹依赖中断,必须辅以另外记录的办法才行。最好的解决办法就是查询IO
10、。回复举报snoopyzz16楼 发表于 2010-12-13 16:34:47 | 只看该作者应该只有低电平中断会造成重入.低电平中断这种东东.显然不能在其中开全局中断的,是常识.否则必然重入.回复举报bigZ17楼 发表于 2010-12-13 16:46:08 | 只看该作者但问题是,在8S中,通一个中断向量的优先级是相同的,而中断是不应该被相同优先级打断的正常的处理应该是,中断返回后立刻再触发中断,而不应该是重入,否则堆栈溢出,后果严重。8S的这点和其他MCU不同,是个缺点回复举报Junsea18楼 楼主| 发表于 2010-12-14 00:01:27 | 只看该作者讨论出深度来了哈
11、!至于大家说的中断重入的事情,但是我认为应该不会有吧!在手册上面讲是有两种情况一种是同时发生,一种是嵌套。按照手册上面讲:同时发生中断的响应顺序是按照中断号的优先级按次序响应。嵌套按照ITC_SPRX里面的设置的优先级进行嵌套响应。但是现在PC0和PC1这种情况,不属于这两种情况。至于是不是要重入不得而知,看看有空好好试试stm8s的外部中断系统了。回复举报snoopyzz19楼 发表于 2010-12-14 08:59:32 | 只看该作者回复【16楼】bigZ -你明显没能明白stm8的优先级指的是什么.不光是stm8,包括,PIC,AVR,51等大多数8bit mcu其中断优先级指的是同
12、时有中断发生需要响应时,内核执行顺序的优先级.不发生中断嵌套重入的前提是你别在中断函数中 使能全局中断.当进入一个中断函数时,全局中断会被禁止,当执行到reti(stm8的中断返回指令)时,会重新使能全局中断.而你呢,手动在中断函数中使能全局中断,还是低电平中断这种持续有效的,必然是个杯具.对于stm8,只有几个少数的不可屏蔽中断(reset,trap,TLI)会产生嵌套回复举报bigZ20楼 发表于 2010-12-14 18:48:52 | 只看该作者由于应用的需要我已经在至少3款MCU上 在进入中断后第一句就打开全局中断。如你所说,大多数MCU进入中断后会自动关闭全局中断,但如果不在中断
13、服务中打开全局中断,中断嵌套就不存在。只有在低优先级的中断中打开全局,更高优先级的中断才能打断当前中断服务。否则中断嵌套就失去意义了。回复举报bigZ21楼 发表于 2010-12-14 18:58:34 | 只看该作者按照一般理解,电平中断至多引起狗叫,而不是堆栈溢出这种严重错误。回复举报bigZ22楼 发表于 2010-12-14 19:03:49 | 只看该作者重点理解此图,和那2句话(原文件名:INT.jpg) (原文件名:int2.jpg)回复举报snoopyzz23楼 发表于 2010-12-14 20:17:49 | 只看该作者低电平中断你开,再开使能全局中断,必然会重入而且并不
14、会中断返回.不断重得进入相同中断,堆栈不断重复压栈.最后就后堆栈溢出,关狗什么事.我保证你换AVR也一样的结果.自己不会用就怪芯片有问题的人,见得多了.不差多一个.回复举报bigZ24楼 发表于 2010-12-14 20:50:49 | 只看该作者请问LS对中断嵌套怎么理解?难道你在所有中断里都不开全局中断?另外,我从来没说芯片有问题,只是指出了8s的一个缺点,8s我用的很好啊我用瑞萨,NEC,CYPRESS中断优先级的控制都很好,用过PIC,51,没用过AVR再另外,讨论问题归讨论问题,言语上不要过分。回复举报bigZ25楼 发表于 2010-12-14 21:03:54 | 只看该作者或
15、者我们可以这样理解有些MCU在电平中断中开全局会堆栈溢出而有些不会,但会导致中断返回后立刻再进入中断,导致无法刷新看门狗,狗叫你觉得这2种做法哪个更好呢,哪个风险小?回复举报bigZ26楼 发表于 2010-12-14 22:06:22 | 只看该作者看了下M48的中断系统,M48的优先级固定的,由向量地址决定,地址越低,优先级越高这个特性和PIC,51很相似,和CYPRESS的PSOC1也相似但和瑞萨,NEC,8S不同这些MCU的中断优先级是可以自定义的,称为软件优先级,拿瑞萨的为例,他的中断优先级分为8级如果软件优先级相同,这时,中断竞争的依据在2个中断同时请求时和M48是基本相同,如果不
16、同时请求,就先到先得,那么另外一个必须等待,即使他的向量地址更低且全局中断开启。如果软件优先级不同,中断竞争依据的是软件优先级高者胜出。好像有点绕? 上面的第一个图可以帮助理解。M48的中断嵌套概念和这些MCU事不同的在M48的中断里如果开启全局,那么任何中断都可以打断当前中断但具有软件优先级的MCU不同,如果在一个中断中开启全局,只有软件优先级更高的才可以打断当前中断,也即是说如果2个中断软件优先级相同,即使开启全局,也只有当前中断返回后才会响应第二个中断请求。这类MCU的电平中断不会被自身打断,因为软件优先级相同,自然就不会堆栈溢出,只会狗叫!回复举报snoopyzz27楼 发表于 201
17、0-12-15 09:22:59 | 只看该作者回复【25楼】bigZ -我表示stm8的中断优先级概念与AVR,PIC等8BIT MCU相同.所以我在中断函数中,从来不开全局中断.因为可能会造成重入等问题.中断函数写的越短越好就对了.我写的中断函数通常也就几T几十T, 不被更高优先级中断也没事.有些支持中断嵌套的CPU,中断的确是可以被更高优先级中断打断,但像AVR,PIC的8BIT MCU,的中断都是默认不支持中断嵌套的.使能全局中断后,任意中断都可以打断当前中断stm8相比之下也只是多了点灵活性.可以设几个不同级别,不设的情况下,和上述MCU相同的处理方式.但终归也只有设成级别1,级别2
18、时,可以被更高优先级中断,(加上TLI,TRAP,RESET,也只是支持4级嵌套)但如果是使能全局中断的方式,等于在中断中恢复I1,I0为级别0,而任一中断级别都是级别1以上的,那么自己也能重入自己是很正常的事,难道不是吗?这并不是BUG.是datasheet中有提到的,而不是errata中说明的.觉得不能接受,就换CPU好了,你找个低电平中断(注意是低电平不是下降沿)里使能全局中断还不会重入的芯片来瞧瞧吧你如果想不重入也很简单.将低电平中断设为级别1,其它中断设为级别2以上就可以了,这样根本不需要使能全局中断.最后再说明一下,使能全局中断,故名意义,任一中断都可以发生.将当前级别降到0了嘛.
19、回复举报bigZ28楼 发表于 2010-12-15 09:50:02 | 只看该作者8S是通过对I1,I0载入0来实现开启全局的,但我提到的其他MCU不是这样,这些MCU的CPU中既包含全局中断标志IE,也包含当前中断优先级,如果在中断里不开启全局,那么在返回前就不响应任何中断,也就没了中断嵌套。但8s不同,他不开启全局,中断一样嵌套,所以我说8s的中断系统有所不同,他提供了软件优先级,但却属于堆栈溢出型,而不是狗叫型。讨论的分歧在于,你我使用的MCU不同。回复举报bigZ29楼 发表于 2010-12-15 11:00:51 | 只看该作者总结下各个MCU的中断系统:M48型:中断优先级由
20、硬件决定,中断竞争时硬件优先级高者胜出;如果中断里不开全局,就没嵌套,先到先得,得到后直到返回才释放CPU;如果在中断里开全局,任意中断都可以打断当前中断,而且同一个中断会打断自身,这点特别要注意,如果一个中断耗时过长导致中断返回前,该中断又触发,就出现中断重入,可能导致堆栈溢出!在这类MCU上慎用电平中断,并且尽量不要在中断里使能全局,中断服务尽最大可能做到耗时最短。8S型:优先级由软件和硬件决定,竞争时软件优先级高者胜出,如果软件优先级相同,竞争时硬件优先级高者胜出;中断内不开全局也可以中断嵌套;开启全局,任意中断都可以打断当前中断;注意事项同上。瑞萨型(如R8C):竞争时和8s相同;中断
21、内不开全局就无嵌套,先到先得;开全局,只有更高软件优先级的中断才可以打断当前中断,不会打断自身;如果返回前又触发同一中断,不会发生重入,但返回后立刻又进入该中断,因此不会堆栈溢出,但会因为频繁响应中断导致看门狗无法刷新。如果需要中断嵌套,就必须在中断内开启全局;中断服务也要尽量耗时最短。电平中断虽然不会导致堆栈溢出,但会导致狗叫,所以慎用。相对而言,堆栈溢出的风险要大于看门狗溢出,而且对于8S这种MCU,他的RAM区数据不在可靠,因为堆栈可能覆盖RAM区(有些MCU事不会覆盖的,关键看压栈方向)回复举报snoopyzz30楼 发表于 2010-12-15 17:04:26 | 只看该作者总结的
22、不错,但stm8s 的堆栈并不会覆盖全部ram.硬件压栈有个顶部位置,到此位置后会返回底部.各型号不大相同,2K ram的似乎是有1K是堆栈区,1K ram的有512字节准确的说,RAM区变量数据会被覆盖,应该是你使用的RAM太多,占到了堆栈区.不过话说只要不上OS,或者各种泄漏重入,对于stm8s而言,堆栈能超过512bytes是比较夸张的事.我很多写满8KB flash的程序,ram变量只用200字节以内,堆栈在30以内.剩下浪费了.回复举报bigZ31楼 发表于 2010-12-15 19:21:44 | 只看该作者测试了下8s确实到512后就返回底部了,但是什么机制返回的,硬件?手册中
23、从未提到过啊回复举报Junsea32楼 楼主| 发表于 2010-12-15 19:57:21 | 只看该作者不错,有深度。两位高人总结的挺好!至少这短时间忙着手上的项目,也没有仔细的去测试!看来这个贴应该是关于STM8S外部中断最强贴了哈!回复举报snoopyzz33楼 发表于 2010-12-16 10:25:24 | 只看该作者回复【30楼】bigZ -记得手册中有提过的.本坛中我曾经和上官讨论过这个问题,是硬件堆栈大小限制,不同ram大小这个堆栈限制大小也不相同如果自己强制设置了SP低于这个限制,就可以绕过,也就是说这个限制只是一个点回复举报ajiantc34楼 发表于 2011-2-
24、16 11:53:45 | 只看该作者回复【楼主位】Junsea -我用来采集2路码盘输入,也出现了这样的问题!回复举报ylyfxzsx35楼 发表于 2012-7-25 19:28:49 | 只看该作者要是M8能每个端口的引脚都可以独立进入中断,并引入类似51的中断优先级设置,这事儿就完美解决了,丫腿的,整个端口就一个入口中断,表似,很不爽回复举报skyxjh36楼 发表于 2012-8-4 22:27:15 | 只看该作者总结下各个MCU的中断系统:M48型:中断优先级由硬件决定,中断竞争时硬件优先级高者胜出;如果中断里不开全局,就没嵌套,先到先得,得到后直到返回才释放CPU;如果在中断里
25、开全局,任意中断都可以打断当前中断,而且同一个中断会打断自身,这点特别要注意,如果一个中断耗时过长导致中断返回前,该中断又触发,就出现中断重入,可能导致堆栈溢出!在这类MCU上慎用电平中断,并且尽量不要在中断里使能全局,中断服务尽最大可能做到耗时最短。8S型:优先级由软件和硬件决定,竞争时软件优先级高者胜出,如果软件优先级相同,竞争时硬件优先级高者胜出;中断内不开全局也可以中断嵌套;开启全局,任意中断都可以打断当前中断;注意事项同上。瑞萨型(如R8C):竞争时和8s相同;中断内不开全局就无嵌套,先到先得;开全局,只有更高软件优先级的中断才可以打断当前中断,不会打断自身;如果返回前又触发同一中断,不会发生重入,但返回后立刻又进入该中断
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农业保险科技行业营销策略方案
- 药用碘化物商业机会挖掘与战略布局策略研究报告
- 广告材料制作行业营销策略方案
- 农业废弃物能源化行业营销策略方案
- 磁性编码身份鉴别手环产品供应链分析
- 药用木炭项目营销计划书
- 医用身体康复仪产品供应链分析
- 射频识别RFID阅读器产品供应链分析
- 绢纺机械市场分析及投资价值研究报告
- 电热翻转烤肉器项目运营指导方案
- 牙周病科普讲座课件
- 经皮椎体成形术护理-查房
- 人教版六年级上册数学数学期末应用题训练(含简单答案)
- 动物园服务方案
- nutric评分方法及意义
- 供水巡查管理制度
- 品牌策划推广部组织架构方案
- 中小学教师职称评定英语全英答辩题
- 大屏幕显示器安装及调试方案
- 水稳料开盘鉴定模板道客巴巴
- 湖南特色美食文化介绍推介PPT图文课件
评论
0/150
提交评论