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

[复制链接]
 楼主| 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。为了显示问题我专门写了一个简单的程序,排除其他东西的影响:
  1. #include "ch554.h"

  2. sbit qaq = P1^6;

  3. void main() {
  4.         EA = 0;
  5.        
  6.         GPIO_IE = bIE_IO_EDGE | bIE_P1_5_LO;        // Enable GPIO interrupt on P1.5, falling edge
  7.         IE_GPIO = 1;        // Enable GPIO interrupt
  8.        
  9.         EA = 1;
  10. }

  11. void GPIOInterruptEntry(void) interrupt INT_NO_GPIO {
  12.         qaq = ~qaq;
  13. }

程序期待效果是每一次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
McuPlayer 发表于 2018-7-10 00:28 | 显示全部楼层
IC设计工程师要被老板打PP的,楼主的方法复合常规思维
边沿触发的清除,每次都要切换回电平触发,再切回去,万一电平触发正好满足条件呢,这时候清了触发标志硬件也会自动再设置上的
按说,边沿触发是比较可靠的,它只在电平跳变的时候,并且极性符合设定,才会设置触发标志,保持电平的时候,它不会动作
ayb_ice 发表于 2018-7-25 17:19 | 显示全部楼层
要用另一个GPIO去驱动测试,用中线的方式肯定会有很多脉冲的
eldiy 发表于 2018-11-16 23:48 | 显示全部楼层
沁恒单片机BUG还真不少,客户发现了就立马修复,也不承认是自己问题,下次被整死的会是谁,反正我已经中了一招。一直想发一篇帖子把过程写出来忙忙碌碌一天有一天过去了。。
Lbsonggz 发表于 2018-12-24 09:20 | 显示全部楼层
单片机用过不少,也写过很多外部中断例程,但这么蛋疼的操作好像是第一次看到。不过,国产的还是要支持一把的
q364626220 发表于 2020-2-22 19:35 | 显示全部楼层
想骂你.却不知道从何骂起.

1

主题

2

帖子

0

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

1

主题

2

帖子

0

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