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

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

[复制链接]
  • TA的每日心情

    2024-2-26 10:54
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    4

    主题

    14

    回帖

    134

    积分

    注册会员

    积分
    134
    发表于 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_();
            }
    }





    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    1 小时前
  • 签到天数: 94 天

    [LV.6]常住居民II

    68

    主题

    604

    回帖

    1890

    积分

    超级版主

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

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

    1.png
    2.png


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

    使用道具 举报

  • TA的每日心情
    奋斗
    7 小时前
  • 签到天数: 141 天

    [LV.7]常住居民III

    27

    主题

    1338

    回帖

    4168

    积分

    论坛元老

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

    使用道具 举报

  • TA的每日心情

    2024-2-26 10:54
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    4

    主题

    14

    回帖

    134

    积分

    注册会员

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

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

    使用道具 举报

  • TA的每日心情

    2024-2-26 10:54
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    4

    主题

    14

    回帖

    134

    积分

    注册会员

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

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

    使用道具 举报

  • TA的每日心情
    奋斗
    7 小时前
  • 签到天数: 141 天

    [LV.7]常住居民III

    27

    主题

    1338

    回帖

    4168

    积分

    论坛元老

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

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

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

    7.6 KB, 下载次数: 26

    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-15 16:40 , Processed in 0.065377 second(s), 52 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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