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