C8051F410 低功耗模式之--- 挂起模式(匹配唤醒)

由于项目需要,临时将STM32更换成C8051F410,本属于拿来主义者,快速入门,但唤醒部分资料甚少,很是花了点时间,以下是最终调试成功的休眠代码,可供有需要的朋友拿去借鉴

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

void CPU_GotoSleep (void)
{                  
    XBR1    &= ~0x40;                   //交叉开关禁止,端口输出驱动器禁止
    
    /* 关闭外设 降低功耗 */
    SCON0   &= ~0x10;                   // disable UART0
    TCON    &= ~0x10;                   // disable T0
    TCON    &= ~0x40;                   // disable T1
    TCON    |= 0x05;
    TMR2CN  &= ~0x04;                   // disable T2
    CPT0CN  &= ~0x80;                   // 关闭比较器0
    CPT1CN  &= ~0x80;                   // 关闭比较器1
    RSTSRC  &= ~0x8F;                   // smartRTClock 不是复位源 挂不比时钟丢失检测 禁止VDD监视器
    VDM0CN  &= ~0x80;                   // disable voltage monitor
    AD0EN = 0;                          // 禁止ADC0 将ADC0处于低功耗断点状态
    
    /* 解锁smaRTClock接口 */
    RTC0KEY = 0xA5;
    RTC0KEY = 0xF1;
    /*使能smaRTClock */
    RTC0ADR = 0x06; 
    RTC0DAT = 0x80;                       // 使能smaRTClock,禁止 smaRTClock时钟丢失检测,禁止smaRTClock报警
    while ((RTC0ADR & 0x80) == 0x80);  
    /* 将非唤醒IO口 全部配置为输入口 降低功耗 */    
    P0MDIN  = 0x01;                     // P0^0 普通输入 用于匹配唤醒
    P1MDIN  = 0x00;
    P2MDIN  = 0;
    P1 = 0;
    P2 = 0;
    
    /* 用于端口匹配唤醒  */
    P0MASK = 0x01;                      // P0^0 用于匹配唤醒
    P1MASK = 0x00;
    P0MAT = 0x01;                       // 平时置高,拉低唤醒
    P1MAT = 0x00;
    
    OSCICN |= 0x20;                     // 进入挂起模式    
//	PCON = 0x02;                        // 进入【停机模式】
    
}

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

备注:之前发现小部分板子进入休眠失败,很快就唤醒了,最后发现就是因为没有关闭smaRTClock时钟丢失检测以及smaRTClock报警,导致被唤醒,加深部分代码是后续增加,切记切记!!



以下为唤醒相关资料:









  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值