[STM32F1] 多个外部中断的问题

[复制链接]
1239|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路中断的方案是不可行的,与优先级无关
皈依 发表于 2015-9-7 15:29 | 显示全部楼层
楼主的传感器带MCU么,如果不带建议做循环扫描吧 不然有的传感器没数据是百分之百的
如果带MCU的,就做好地址,一旦接收到数据给传感器MCU一个信号,让该传感器一段时间之内不发送数据,用中断的话可以进去中断后进行电平判断,是哪个口就确定是这个口的中断,然后继续中断操作。
拉克丝 发表于 2015-9-7 19:22 | 显示全部楼层
现在这4个中断事件同时到达,而且优先级相同

好像有个抢中断,楼主试试
mark0668 发表于 2015-9-7 19:39 | 显示全部楼层
只能有16个中断,分时复用的话这样还要中断干什么……。
QuakeGod 发表于 2015-9-7 23:48 | 显示全部楼层
关键是,传感器信号的实时性要求多高,
如果是mS级或亚mS级,完全可以用扫描方式实现。
如果是uS级的,用扫描也勉强能实现。
只有nS级的,才必须要用中断,或者FPGA实现。
QuakeGod 发表于 2015-9-7 23:52 | 显示全部楼层
就好像偶们用的键盘,100多个按键,都是用扫描实现的,跟主机通讯只有一个中断。
当然,如果实时性要求高,可以结合FPGA实现,用FPGA做一个外部中断扩展。40个中断输入口,一个中断输出口,只要有一个输入电平发生变化,就产生一个中断通知主机,然后主机读取FPGA内部的状态,获知是那个中断产生的事件。
豆腐块 发表于 2015-9-8 21:27 | 显示全部楼层
中断优先级问题
diweo 发表于 2015-9-8 21:55 | 显示全部楼层
每隔10ms扫描一次足矣。
为什么呢?

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

本版积分规则

8

主题

36

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部