最近在做一个应用需要用到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
|