打印
[STM32F1]

多个外部中断的问题

[复制链接]
1049|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
abtc1130|  楼主 | 2015-9-7 11:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教大家几个问题,现在我的程序中需要监测40个传感器信号。我用了40个外部中断来监测。我的问题是:

     1: 这么多中断,我该怎么配置其的NVIC?我的想法是配置NVIC_PriorityGroupConfig(NVIC_ProiorityGroup_0),没有抢占优先级,16个子优先级。
然后让四十个中断的子优先级都为相同,即都为0这样做行不行?

     2:书上说“同一时刻的EXTIx,只能响应一个端口的事件触发,不能同一时间响应所有的GPIO端口事件,但可以分时复用”。请问这里的“分时复用”是什么意思?
比如现在PA15,PC15  , PD15 ,PG15这四个在EXTI15上的中断。现在这4个中断事件同时到达,而且优先级相同。根据上面所说,此时只能响应一个中断,那么谁
会被优先处理?分时复用是否就是第一个中断响应后进入void EXTI15_10_IRQHandler(void),处理完后单片机还会自动进入void EXTI15_10_IRQHandler(void)三次?
     
    3:这4个中断触发会点亮 4个LED.那么我该怎样判断此时是哪个中断被触发了?,现在这4个IO平时为高,设置为下降沿中断触发。能不能像下面这样写

           void EXTI15_10_IRQHandler(void)
               {
                       if(EXTI_GetITStatus(EXTI_Line15)!= RESET)
                       {
                           if(PAIN(15) == 0 )   
                           {
                                       LED0(ON);            
                           }
                           if(PCIN(15) == 0 )   
                           {
                                       LED1(ON);   
                           }
                             if(PCIN(15) == 0 )   
                           {
                                       LED2(ON);   
                           }
                            if(PCIN(15) == 0 )   
                           {
                                       LED3(ON);   
                           }
                             EXTI_ClearITPendingBit(EXTI_Line15);
                       }
                }
沙发
mmuuss586| | 2015-9-7 12:46 | 只看该作者
这么多中断,还不如开个定时器扫描呢;

另外中断程序,最好加些消抖,以免误操作;

使用特权

评论回复
板凳
309030| | 2015-9-7 12:54 | 只看该作者
多中断需要考虑优先级问题

使用特权

评论回复
地板
Xflyan| | 2015-9-7 13:07 | 只看该作者
本帖最后由 Xflyan 于 2015-9-7 13:08 编辑

原则上不是只能响应16个中断吗,Px0 ~ Px15,即PA0用了,PB0就不能用的
AFIO->EXTICR 只能选择其中一个端口,所以楼主这种40路中断的方案是不可行的,与优先级无关

使用特权

评论回复
5
皈依| | 2015-9-7 15:29 | 只看该作者
楼主的传感器带MCU么,如果不带建议做循环扫描吧 不然有的传感器没数据是百分之百的
如果带MCU的,就做好地址,一旦接收到数据给传感器MCU一个信号,让该传感器一段时间之内不发送数据,用中断的话可以进去中断后进行电平判断,是哪个口就确定是这个口的中断,然后继续中断操作。

使用特权

评论回复
6
拉克丝| | 2015-9-7 19:22 | 只看该作者
现在这4个中断事件同时到达,而且优先级相同

好像有个抢中断,楼主试试

使用特权

评论回复
7
mark0668| | 2015-9-7 19:39 | 只看该作者
只能有16个中断,分时复用的话这样还要中断干什么……。

使用特权

评论回复
8
QuakeGod| | 2015-9-7 23:48 | 只看该作者
关键是,传感器信号的实时性要求多高,
如果是mS级或亚mS级,完全可以用扫描方式实现。
如果是uS级的,用扫描也勉强能实现。
只有nS级的,才必须要用中断,或者FPGA实现。

使用特权

评论回复
9
QuakeGod| | 2015-9-7 23:52 | 只看该作者
就好像偶们用的键盘,100多个按键,都是用扫描实现的,跟主机通讯只有一个中断。
当然,如果实时性要求高,可以结合FPGA实现,用FPGA做一个外部中断扩展。40个中断输入口,一个中断输出口,只要有一个输入电平发生变化,就产生一个中断通知主机,然后主机读取FPGA内部的状态,获知是那个中断产生的事件。

使用特权

评论回复
10
豆腐块| | 2015-9-8 21:27 | 只看该作者
中断优先级问题

使用特权

评论回复
11
diweo| | 2015-9-8 21:55 | 只看该作者
每隔10ms扫描一次足矣。
为什么呢?

因为可以和PLC对比一下.PLC如果点数多的话,也有几十个传感器输入,可是PLC的典型的扫描周期也就10ms,完全可以应付,再快也没什么意义了。

使用特权

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

本版积分规则

8

主题

36

帖子

0

粉丝