打印

发现CH554单片机在GPIO下降沿中断下的一个严重问题

[复制链接]
1507|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Rikka0w0|  楼主 | 2018-4-12 22:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在做一个应用需要用到CH554E的GPIO中断,我把GPIO中断配置成了P1.5的下降沿触发,然后进入中断做一些事,结果发现进了中断出不来了!根据CH554的PDF的第20页底部对GPIO中断使能寄存器(GPIO_IE)的描述和第23页底部对PIN_FUN的bIO_INT_ACT的描述,bIO_INT_ACT本应该在进入GPIO中断服务程序时会自动清零。然而实际情况是bIO_INT_ACT保持1。为了显示问题我专门写了一个简单的程序,排除其他东西的影响:
#include "ch554.h"

sbit qaq = P1^6;

void main() {
        EA = 0;
       
        GPIO_IE = bIE_IO_EDGE | bIE_P1_5_LO;        // Enable GPIO interrupt on P1.5, falling edge
        IE_GPIO = 1;        // Enable GPIO interrupt
       
        EA = 1;
}

void GPIOInterruptEntry(void) interrupt INT_NO_GPIO {
        qaq = ~qaq;
}

程序期待效果是每一次P1.5下降沿进入中断之后把P1.6给取反,P1.5低电平时啥都不做。
烧入程序效果是,上电之后P1.5 P1.6持续高输出,这个是正确的。然后导线短路P1.5到地然后松开,P1.5恢复高电平。此时测量P1.6会发现P1.6上有个高频振荡,几百KHz。

大伙儿有木有遇到过这个问题呢2333333还是我的使用姿势不对x

使用特权

评论回复

相关帖子

沙发
WCHCN| | 2018-4-17 13:31 | 只看该作者
GPIO中断,触发中断以后,如果要清除中断,不是直接清除中断标志就能清除的,需要先把边沿触发改为电平触发,然后清除中断标志,再改为边沿触发,这样就能清除边沿触发的中断了。

使用特权

评论回复
板凳
WCHCN| | 2018-4-17 13:38 | 只看该作者
这不是芯片问题呢,请帮忙把标题改一下,防止给别人造成误导哦。

使用特权

评论回复
地板
jony5| | 2018-7-2 23:55 | 只看该作者
处理方法看明显是ic bug

使用特权

评论回复
5
McuPlayer| | 2018-7-10 00:28 | 只看该作者
IC设计工程师要被老板打PP的,楼主的方法复合常规思维
边沿触发的清除,每次都要切换回电平触发,再切回去,万一电平触发正好满足条件呢,这时候清了触发标志硬件也会自动再设置上的
按说,边沿触发是比较可靠的,它只在电平跳变的时候,并且极性符合设定,才会设置触发标志,保持电平的时候,它不会动作

使用特权

评论回复
6
ayb_ice| | 2018-7-25 17:19 | 只看该作者
要用另一个GPIO去驱动测试,用中线的方式肯定会有很多脉冲的

使用特权

评论回复
7
eldiy| | 2018-11-16 23:48 | 只看该作者
沁恒单片机BUG还真不少,客户发现了就立马修复,也不承认是自己问题,下次被整死的会是谁,反正我已经中了一招。一直想发一篇帖子把过程写出来忙忙碌碌一天有一天过去了。。

使用特权

评论回复
8
Lbsonggz| | 2018-12-24 09:20 | 只看该作者
单片机用过不少,也写过很多外部中断例程,但这么蛋疼的操作好像是第一次看到。不过,国产的还是要支持一把的

使用特权

评论回复
9
q364626220| | 2020-2-22 19:35 | 只看该作者
想骂你.却不知道从何骂起.

使用特权

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

本版积分规则

1

主题

2

帖子

0

粉丝