OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5382|回复: 10

使用外部中断时一个蛋疼的问题···

[复制链接]

17

主题

175

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1016
金钱
1016
注册时间
2014-4-7
在线时间
99 小时
发表于 2015-3-6 09:37:56 | 显示全部楼层 |阅读模式
5金钱
  现在的程序中有SPI操作,因为在中断服务程序中也有SPI操作,所以在主函数使用SPI的时候必须要关闭外部中断(如果不关闭,SPI会乱,已经测试过。)。
 现在的问题是我在主函数中操作SPI时,发生了中断事件,这时就会发生中断丢失的现象。
PS:中断信号特征是低电平,如果不处理信号一直为低。而STM32的外部中断又只能配置成边沿触发。。。。。。。。。


有没有遇到类似情况的朋友?

最佳答案

查看完整内容[请看2#楼]

想到了一个方法,在每次主函数操作完SPI后就判断一次中断信号线的状态,如果为有效电平则使用软件置位中断标志位,触发一次中断来运行中断服务程序。 这个方法测试后程序正常。      同时也感谢大家给我的建议。。
在你没有做出成绩之前,这个世界不会在乎你的自尊。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

17

主题

175

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1016
金钱
1016
注册时间
2014-4-7
在线时间
99 小时
 楼主| 发表于 2015-3-6 09:37:57 | 显示全部楼层
想到了一个方法,在每次主函数操作完SPI后就判断一次中断信号线的状态,如果为有效电平则使用软件置位中断标志位,触发一次中断来运行中断服务程序。

这个方法测试后程序正常。     

同时也感谢大家给我的建议。。
在你没有做出成绩之前,这个世界不会在乎你的自尊。
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2015-3-6 09:53:47 | 显示全部楼层
设计逻辑有问题,会产生接口抢占。
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

17

主题

175

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1016
金钱
1016
注册时间
2014-4-7
在线时间
99 小时
 楼主| 发表于 2015-3-6 10:16:08 | 显示全部楼层
回复【2楼】styleno1:
---------------------------------
我操作的是一个SPI驱动的外设,它就是这个特性,给STM32的中断信号是电平型的。。。只有响应中断后给其相应的寄存器配置相应的数据后,中断信号才能消失。

而我现在就是因为丢失了中断,所以才会出现信号一直为低。影响下一个中断的发生。
在你没有做出成绩之前,这个世界不会在乎你的自尊。
回复

使用道具 举报

4

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2015-2-9
在线时间
2 小时
发表于 2015-3-6 16:54:11 | 显示全部楼层
这个简单呀,用flag标志呀。思路:可以在中断程序里面设置flag,然后在主函数里面判断flag在操作SPI呀
回复

使用道具 举报

17

主题

175

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1016
金钱
1016
注册时间
2014-4-7
在线时间
99 小时
 楼主| 发表于 2015-3-6 16:58:03 | 显示全部楼层
回复【4楼】小大琦:
---------------------------------
但是我必须要保证实时性啊,在中断程序外面执行的话,实时性就保证不了了呀···· (这个实时性是很严格的~)
在你没有做出成绩之前,这个世界不会在乎你的自尊。
回复

使用道具 举报

4

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2015-2-9
在线时间
2 小时
发表于 2015-3-6 17:32:30 | 显示全部楼层
难道你的主函数执行一遍时间很长吗?在中断里面做动作,时间过长,如果还有其他中断,实时性会更差。许多好的系统都不会再中断程序里面有长时间的动作,都是采用置位FLAG,在主函数里面做的。这也是为什么书上说中断函数要竟可能的短。本人也吃过这个亏(一度导致系统出问题),后来看了许多大公司的代码,无一例外都在主函数里执行代码的。你可以去测量计算主函数的时间,看采用这种方式能不能满足。
回复

使用道具 举报

4

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2015-2-9
在线时间
2 小时
发表于 2015-3-6 17:36:47 | 显示全部楼层
补充一句,如果实在要采用你的这种方式,本人感觉只好采用“互斥信号量”了。
回复

使用道具 举报

17

主题

175

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1016
金钱
1016
注册时间
2014-4-7
在线时间
99 小时
 楼主| 发表于 2015-3-6 17:40:28 | 显示全部楼层
回复【6楼】小大琦:
---------------------------------
  我控制的这个是有自己的协议库的,里面有两种方式,一种就是在主程序中查询标志位进行操作的;另一种模式就是同步运行模式,也就是我所说的中断里执行的。前一种我已经调通了,但是现在就是想多学点,试着看看能不能将第二种方式调通。而且一般在应用的时候都是第二种方式。
  这个芯片是驱动EtherCAT工业现场总线的,所以对实时性的要求很严格。。。
在你没有做出成绩之前,这个世界不会在乎你的自尊。
回复

使用道具 举报

4

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2015-2-9
在线时间
2 小时
发表于 2015-3-6 17:53:16 | 显示全部楼层
回复【8楼】亲亻尔嘴:
---------------------------------
那就用互斥量吧,类似于一把钥匙开锁。中断程序通过SPI发送数据前,先获取这把钥匙,如果获得则继续spi操作;无法获取,就表明主函数在使用SPI。后面怎么处理看你的应用了,有点跑系统的感觉。
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2015-3-7 12:55:58 | 显示全部楼层
那么楼主,你实时性阈值是多少us?
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-25 08:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表