zhuhuis 发表于 2023-1-8 17:00

掉电模式不能进Timer3 中断

在掉电模式下,不能唤醒,经过仿真跟踪,发现主要是在掉电模式下,不能进Timer3 中断,系统中试用12M内部RC和 32K外部晶振

jiajs 发表于 2023-1-8 17:03

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

zhuhuis 发表于 2023-1-8 17:06

LPD程序如下:
void      POWER_down(void) interrupt 14                                                   //掉电中断
{
      //标志位清0
      _nop_();
      LPDCON &=      Bin(10111111);



//首先关掉所以需要耗电的元件,降低损耗
                P1|=Bin(11111100);
                P3|=Bin(00001111);      //先关灯
                P4=Bin(11111111);         //关灯关公共端

      
                if(LPDCON&0x20)               //如果是因为电压高于设定LPD值时进入中断的,即将进入正常状态
                {

                        //io_Beep      =      0;
                        _nop_();
                        Init_System();          //重新初始化
                }
                else
                {
                        sysLPD      =      1;                                        //出现了低电压中断,设置电池供电标志
                        LPDCON =      Bin(10101101);                //&= 0xFB;                //设置电压高于4.35产生中断
                        CLKCON =         Bin(10001000);                              //D7加速,D6D5无效,D4无效,D3=1打开,D2=0选择32K
                        //Old_Mode = Mode;
                        ////////////////调整LCD电压///////////////////////////
                         DISPCON= 0x7F;                //0X68;               //3V电源供电
                        //DISPCON=Bin(01101111);            //开LCD驱动,开对比度控制,选第15段对比度
                        
                         //BIT7            BIT6       BIT5   BIT4    BIT3   BIT2    BIT1   BIT0
                        //DISPSEL   LCDON      ELCC   DUTY          VOL3          VOL2    VOL1         VOL0
                        //0LCD;1LED   1                  1             0                   0                  0               1             1
                        //lcdFAMER f=12m/512/disclk =64         ;disclk=0x016e   



                        //设置晶振为32768HZ外振,以及中断时间,其他中断,重新定义IO口
                        P0SS=0x00;            //P0模式选择寄存器          0=IO         1=segment
                         //SEG1-SEG8   
                         P1SS =0Xff;
                         //SEG9-SEG16   
                         P2SS =0X03;   //P2.0,P2.1为SEG
                         //COM1-COM8   
                         P3SS =0XFF;

                        P0CR      =Bin(10000000);                                          //端口输入输出控制寄存器          0 输入 1 输出      
                        //0.0--小功率,0.1--蜂鸣器,0.2--同步,0.3--超温,0.4--触摸,0.5--power
                        P0PCR      =Bin(10000000);                                                //输入端口内部上拉电阻控制   0关闭, 1开启
                        P0                =Bin(10000000);                                                //端口数据寄存器

                        P1CR      =Bin(11111111);                                          
                        P1PCR      =0xff;                        
                        P1                =0x00;                                                                //P1用做LCD输出SEG

                        P2CR      =Bin(11111111);                                                               
                        P2PCR      =Bin(11111111);      
                        P2                =0xff;                                                                //P2.0,P2.1LCD的SEG

                        P3CR      =0xff;
                        P3PCR      =0xff;      
                        P3                =0x00;                                                                //P3用做COM口

                  P4CR      =Bin(11111111);
                        P4PCR      =0xff;      
                        P4                =Bin(00011111);      

                        BANK1SEL() ;
                        P5CR      =Bin(11111111);                                                //注意:P5和P0地址一样,P5在BANK1,一定要加上地址设置
                        P5PCR      =0xff;      
                        P5                =0x00;      
                        BANK0SEL() ;

                        DISPCON1 =0X00;                //LCD参数,固定
                         DISPCLK0 =0x00;         //LCD时钟控制寄存器
                         DISPCLK1 =0x00;               //0x000=使用系统时钟
      ///////////////重新定义时间中断////////////////////////
                        EA                =      0;
                        //定时器3代替定时器0
                        BANK1SEL() ;
                        TF3=0;
                        //T3CON =Bin(00000010);         ////0B0000    0110   1分频
                        T3CON =Bin(00000000);
                //BIT7         BIT6    BIT5       BIT4      BIT3      BIT2      BIT1      BIT0
                  // TF3   --   T3PS.1          T3PS.0                -      TR3               T3CLK.1                T3CLK.0                  
                        TL3=LOBYTE(2^16 -16384);
                        TH3=HIBYTE(2^16 -16384);
                        //IEN1 |=0x10 ;   
                        //ET3=1;   
                        TR3=1;                                                                        //开启TIMER 3定时器
                           BANK0SEL() ;
                        EA                =      1;



                }
//                LPDCON &= 0xEB;//清中断标志

}

huanghuac 发表于 2023-1-8 17:08

定时中断没有开启

zwll 发表于 2023-1-8 17:13

你进入了STOP模式,只有外部中断 IO口中断可以唤醒

supernan 发表于 2023-1-8 17:15

部分型号BT中断也可以唤醒

xxrs 发表于 2023-1-8 17:17

原因1和2都是往往我们容易忽视的地方啊

tpgf 发表于 2023-2-3 13:28

主要需要确定在掉电模式下定时器是否还能正常工作

nawu 发表于 2023-2-3 13:56

不同的模式会有一部分 时钟不能工作导致一些外设不能工作

aoyi 发表于 2023-2-3 14:34

在stop模式下只有极少数的外设还可以正常工作

zljiu 发表于 2023-2-3 14:49

掉电模式下 timer3是完全不工作的 所以不能产生中断

gwsan 发表于 2023-2-3 15:08

如果想要在低功耗模式下使用timer3来产生中断 就不能使用掉电这个模式

tfqi 发表于 2023-2-3 15:26

在此种模式下大部分模块包括定时器都已经完全停止工作了

可怜的小弗朗士 发表于 2023-7-26 14:51

进入掉电模式,定时器已经关了,唤醒不了了

OKAKAKO 发表于 2023-9-26 09:10

掉电模式唤醒的话应该得需要其他的唤醒机制

jf101 发表于 2023-9-26 12:44

这个其实跟唤醒机制有关系,建议楼主再详细参阅以下相关文件

小夏天的大西瓜 发表于 2023-9-27 13:07

不能唤醒是不是有其他的问题
页: [1]
查看完整版本: 掉电模式不能进Timer3 中断