打印

用STM8的注意了! GPIO外部中断坑爹的设计!

[复制链接]
楼主: bester
手机看帖
扫描二维码
随时随地手机跟帖
21
wujwul| | 2013-9-16 23:12 | 只看该作者 回帖奖励 |倒序浏览
怎么查询呢INTERRUPT_HANDLER(EXTI_PORTE_IRQHandler, 7)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
  EXTI_Sensitivity_TypeDef  Keyexti_Sensitivity_Type;
       
        /*
         * 我们需要知道的信息是:
         * 哪个引脚,发生哪个中断
         */
        Keyexti_Sensitivity_Type = EXTI_GetExtIntSensitivity(EXTI_PORT_GPIOE);
       
        switch (Keyexti_Sensitivity_Type)        /* 得到当前发生的是哪种中断类型 */
        {
                case EXTI_SENSITIVITY_FALL_LOW :        /* 低电平触发 */
        //if (!GPIO_ReadInputPin(KEY_PORTE, KEY_2)) {       
                //                LED_Reverse(LED_2);
                //        }
                break;
                case EXTI_SENSITIVITY_RISE_ONLY :        /* 上升沿触发 */
          /* 判断是哪个引脚发生外部中断 */
                        if (!GPIO_ReadInputPin(KEY_PORTE, KEY_2)) {       
                                LED_Reverse(LED_2);
                        }
                break;
                case EXTI_SENSITIVITY_FALL_ONLY :        /* 下降沿触发 */
                          /* 判断是哪个引脚发生外部中断 */
                        //if (!GPIO_ReadInputPin(KEY_PORTE, KEY_2)) {       
                        //        LED_Reverse(LED_2);
                        //}

                break;
                case EXTI_SENSITIVITY_RISE_FALL :        /* 高电平触发 */
        //if (!GPIO_ReadInputPin(KEY_PORTE, KEY_2)) {       
        //                        LED_Reverse(LED_2);
        //                }
                break;
                default:
                         break;
        }
}

使用特权

评论回复
22
wujwul| | 2013-9-16 23:13 | 只看该作者
今晚居然调试了半天只能实现下降沿触发中断,不能实现上升沿触发中断,不知道怎么搞了,怪事啊

使用特权

评论回复
23
yswtxiao| | 2013-9-17 13:56 | 只看该作者
A,B,C,D,E,这些端口同时只能一个用来作为中断输入,比如PA0,PB0,PC0,PE0等等同时只能有一个作为中断输入,楼主是典型的参考手册没有仔细看的结果!

使用特权

评论回复
24
jgphu| | 2013-9-17 17:02 | 只看该作者
这种方式应该是主流的。

使用特权

评论回复
25
拿起书本| | 2013-9-26 17:32 | 只看该作者
呵呵,用了不少厂家的MCU,除了51的寄存器简单外,其他的都比较复杂。

使用特权

评论回复
26
trumpxp| | 2013-9-26 20:53 | 只看该作者
进中断   然后分布调试   应该没有难度的  楼主

使用特权

评论回复
27
bester|  楼主 | 2013-10-3 11:44 | 只看该作者
yswtxiao 发表于 2013-9-17 13:56
A,B,C,D,E,这些端口同时只能一个用来作为中断输入,比如PA0,PB0,PC0,PE0等等同时只能有一个作为中断输 ...

没错,是这样的,但是我需要有多个中断口。所以才有这样的疑问。

使用特权

评论回复
28
outstanding| | 2013-10-3 12:49 | 只看该作者
进中断,查询,N多单片机都这样啊

使用特权

评论回复
29
gaobq| | 2013-10-5 22:13 | 只看该作者
我以前遇见过这个问题,如果使用操作系统就解决问题了,全部改为查询模式,每个中断触发一个单独的任务,反正端口状态判断延时也不怕,操作系统会利用这些时间,比中断还简单,需要处理的中断越多,操作系统的解决方式越灵活方便。

使用特权

评论回复
30
yswtxiao| | 2013-10-8 09:37 | 只看该作者
bester 发表于 2013-10-3 11:44
没错,是这样的,但是我需要有多个中断口。所以才有这样的疑问。

楼主可以把中断同时分配到不同的中断线上!

使用特权

评论回复
31
bester|  楼主 | 2013-10-9 22:28 | 只看该作者
yswtxiao 发表于 2013-10-8 09:37
楼主可以把中断同时分配到不同的中断线上!

实际上,我每个IO都需要中断。。。。是计算每个IO的频率,在STM32下实现的很好,现在想节省成本,用STM8S发现悲剧了。。。

使用特权

评论回复
32
AlexMgx| | 2013-11-28 15:53 | 只看该作者
时能的 IO 中断口不是很多,扫一下就完了

使用特权

评论回复
33
zeluo| | 2013-11-28 19:24 | 只看该作者
应该是读引脚的问题吧   楼主

使用特权

评论回复
34
lwm1368| | 2013-11-28 21:04 | 只看该作者
读IO口啊!兄弟!

使用特权

评论回复
35
戈卫东| | 2013-11-28 21:58 | 只看该作者
那就别用.....

使用特权

评论回复
36
mingjiezhong| | 2013-11-28 22:40 | 只看该作者
要搞清楚人家为什么那么设计,人家是为了你分时处理方便,但是资源只有一个。类似的问题在串口也有,只要你分时使用就可以实现多个串口连接。你要一起进来一个中断肯定是没法处理的,这个都搞不明白啊,看来楼主单片机水平还有待提高。

使用特权

评论回复
37
happy82828| | 2014-10-8 22:47 | 只看该作者
学习中正要测试这项功能

使用特权

评论回复
38
songchenping| | 2014-10-9 08:23 | 只看该作者
有点要求太高了。不可能将每个PORT都作为中断吧

使用特权

评论回复
39
iamfreed| | 2014-12-15 00:03 | 只看该作者
wujwul 发表于 2013-9-16 23:12
怎么查询呢INTERRUPT_HANDLER(EXTI_PORTE_IRQHandler, 7)
{
  /* In order to detect unexpected events du ...

编译通不过,在INTERRUPT_HANDLER好像不能EXTI_Sensitivity_TypeDef Keyexti_Sensitivity_Type

使用特权

评论回复
40
kseeker| | 2014-12-15 10:24 | 只看该作者
这种设计不能说是缺陷,但确实要特别注意。前面很多说进去读IO状态的,这种处理是有问题的。
当第一个IO触发中断,进去读取完IO口状态做完判断后,如果中断返回之前第二个IO口恰好也触发中断,则第二个本来应该触发的中断会被漏掉。
因此要尽可能把中断分散到不同的port上。

使用特权

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

本版积分规则