找回密码
 立即注册
查看: 1021|回复: 5

定时唤醒和中断唤醒不能共用?

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2024-02-26 10:54:48

6

主题

18

回帖

172

积分

注册会员

积分
172
发表于 2023-8-21 14:15:31 | 显示全部楼层 |阅读模式
本帖最后由 sun65886566 于 2023-8-22 11:04 编辑

请教各位大佬:我在开启定时唤醒后无法触发外部中断是什么原因?以下是配置和代码。
ISP配置:STC8G1K08A-6PIN,6MHz,上电短复位,禁止低压复位,无看门狗


sbit LED = P3^4;
sbit IN0 = P3^2;
sbit IN1 = P3^3;

void INT0_Isr() interrupt 0
{
    LED = 1;
}
void INT1_Isr() interrupt 2
{
    LED = 1;
}
void main()
{
        //初始化GPIO
        P0M0 = 0xff;        P0M1 = 0x0;                P0 = 0x0;                //推挽拉低
        P1M0 = 0xff;        P1M1 = 0x0;                P1 = 0x0;
        P2M0 = 0xff;        P2M1 = 0x0;                P2 = 0x0;
        P3M0 = 0xff;        P3M1 = 0x0;                P3 = 0x0;
        P4M0 = 0xff;        P4M1 = 0x0;                P4 = 0x0;
        P5M0 = 0xff;        P5M1 = 0x0;                P5 = 0x0;
        P3M0 &= 0xef;        P3M1 &= 0xef;                                                        //P3.4 LED 双向IO
        P3M0 &= 0xfb;        P3M1 |= 0x04;                                                        //P3.2 INT0 双向IO
        P3M0 &= 0xf7;        P3M1 &= 0xf7;                                                        //P3.3 INT1 双向IO
        LED = 0;
        //中断设置
        IT0 = 0;              //INT0上升沿中断
        EX0 = 1;
        IT1 = 1;              //使能INT1下降沿中断
        EX1 = 1;
        //关闭比较器\ADC\LVD
        CMPCR1 = 0x0;
        ADC_CONTR = 0x0;
        RSTCFG = 0x0;
        //时钟、电源设置
        P_SW2 = 0x80;
        IRC32KCR = 0x80;            //启动内部32K IRC
        while(!(IRC32KCR&1));        //等待时钟稳定
        CLKDIV = 0x00;        //时钟不分频
        CLKSEL = 0x03;                                //内部IRC 32KHz
        HIRCCR = 0;
        XOSCCR = 0;
        P_SW2 = 0x0;
        //定时唤醒约10s,内部32KHz
        WKTCH = 0x58;
        WKTCH |= 0x80;        //使能唤醒定时器,※※该语句执行后外部中断无效,注释后外部中断正常??
        WKTCL = 0xed;
        EA = 1;
        for(;;)
        {
                PCON |= 0x02;
                _nop_();        _nop_();        _nop_();        _nop_();
                _nop_();        _nop_();        _nop_();        _nop_();
        }
}





回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:172
  • 最近打卡:2025-04-28 08:49:07
已绑定手机

90

主题

961

回帖

2318

积分

超级版主

积分
2318
QQ
发表于 2023-8-21 16:03:02 | 显示全部楼层

深圳国芯人工智能有限公司-实验箱  https://www.stcai.com/syx

1.png
2.png


热线19952583534
www.STCAI.com
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6843

积分

论坛元老

积分
6843
发表于 2023-8-21 16:31:05 | 显示全部楼层
两者是可以共存的,休眠指令后面加7,8个:_nop_();
这是不能省的。
外部中断如果设置为下降沿中断的话,在休眠前要确保外部中断脚是高电平。这种情况下进休眠后拉低外部中断脚才能唤醒MCU。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2024-02-26 10:54:48

6

主题

18

回帖

172

积分

注册会员

积分
172
发表于 2023-8-22 10:16:33 | 显示全部楼层
国学*** 发表于 2023-8-21 16:03
深圳国芯人工智能有限公司-实验箱  https://www.stcai.com/syx

谢谢,例程7和8我都试过可以单独运行,但两个同时使用就不行了。我不知道是我漏掉了什么
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2024-02-26 10:54:48

6

主题

18

回帖

172

积分

注册会员

积分
172
发表于 2023-8-22 10:21:23 | 显示全部楼层
本帖最后由 sun65886566 于 2023-8-22 11:31 编辑
乘风*** 发表于 2023-8-21 16:31
两者是可以共存的,休眠指令后面加7,8个:_nop_();
这是不能省的。
外部中断如果设置为下降沿中断的话,在 ...

我发现问题出在时钟上,我为了降低功耗使用了32K时钟,导致了两种唤醒方式的冲突,但是我还是不太理解为什么会这样
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6843

积分

论坛元老

积分
6843
发表于 2023-8-22 11:57:46 | 显示全部楼层
sun658*** 发表于 2023-8-22 10:21
我发现问题出在时钟上,我为了降低功耗使用了32K时钟,导致了两种唤醒方式的冲突,但是我还是不太理解为什 ...

烧录附件例子到你的板子上试试。
例程是低电平亮灯,亮灯表示MCU处于唤醒状态,灭灯表示MCU处于休眠状态。

睡眠-唤醒定时器唤醒-外部中断唤醒.zip

7.6 KB, 下载次数: 120

回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 12:54 , Processed in 0.193336 second(s), 87 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表