嵌入式(八)电源低功耗管理 | 五种运行模式 模式转换 睡眠定时器唤醒

news2024/11/23 15:19:11

文章目录

  • 1 低功耗基本介绍
    • 1.1 五种运行模式
  • 2 低功耗控制相关寄存器
  • 3 睡眠唤醒实现方式
    • 3.1 系统睡眠+定时器唤醒

1 低功耗基本介绍

对于嵌入式系统而言,一个非常重要的内容就是低功耗,尽可能减少电量损耗,然后获得更多的续航时间

当然功耗越低,被关闭的功能也就越多

1.1 五种运行模式

CC2530有5种不同的运行模式(供电模式):

分别为主动模式、空闲模式、PM1、PM2 和PM3。

越靠后,被关闭的功能越多,功耗也越低,PM3具有最低的功耗。

在这里插入图片描述

运行的影响如表8.1所示,其中还给出了稳压器和振荡器选择。

主动模式是一般模式。主动模式:完全功能模式。稳压器的数字内核开启,16MHz RC振荡

器或32MHz晶体振荡器运行,或者两者都运行。32kHz RCOSC振荡器或32kHz XOSC运行。

空闲模式:除CPU 内核停止运行(即空闲外),其他功能和主动模式一样。

PM1:高频晶振(16MHz或32MHz)关闭,低频晶振(32.768kHzRCOSC/XOSC)工作,数字核心模块正常工作。

PM2:低频晶振(32.768KHz RCOSC/XOSC )工作, 数字核心模块关闭,系统通过 RESET,外部中断或睡眠计数器溢出唤醒。

PM3:晶振全部关闭,数字核心模块关闭,系统只能通过 RESET 或外部中断唤醒。

2 低功耗控制相关寄存器

睡眠模式控制寄存器SLEEPCMD

​ 可以设置我们刚刚讲到的那五种睡眠模式

供电模式控制寄存器PCON

​ 设置睡眠模式之后,还要设置供电模式

睡眠计数器STx,

​ 通过设置STx可以设置睡眠的时间长短

读睡眠定时器读的流程为:读ST0→读ST1→读ST2。

3 睡眠唤醒实现方式

从PM1和PM2唤醒可以通过三种方式:复位、外部中断和睡眠定时器,

从PM3唤醒可以通过两种方式:复位和外部中断。

对于复位方式,进行系统的复位,即RESET来唤醒即可,不涉及到编程。

所以编程主要涉及到外部中断和睡眠定时器唤醒

对于睡眠定时器方式,涉及到ST2、ST1和ST0寄存器。首先从这三个寄存器中读取到当前定时器的计数值,接着对该计数值进行修改(表示睡眠的时长),最后将该修改后的计数值写入到三个寄存器中,使定时器能够进行比较。对于该种方式,首先要明白,寄存器和定时器是两个独立的东西,当不读ST2、ST1和ST0寄存器时,其中始终保存一个比较值,当定时器值与寄存器值相等时发生中断,而定时器的值会在正边沿时进行一次更新。当读ST2、ST1和ST0寄存器时,会自动获取24位定时器的值

对于外部中断模式,需要根据选择的外部中断方式编写中断函数,在中断函数中,对标志位进行清零,最后将模式设置为主动模式即可。

3.1 系统睡眠+定时器唤醒

//初始化休眠定时器,设定后经过指定时间自行唤醒程序如下:
void InitSleepTimer(void)
{
	ST2 = 0X00;
	ST1 = 0X0F;
	ST0 = 0X0F;
	EA = 1; //开中断
	STIE = 1; //睡眠定时器中断使能0:中断禁止 1:中断使能
	STIF = 0; //睡眠定时器中断标志 0:无中断未决 1: 中断未决
}

//设置系统工作模式程序如下。
void SysPowerMode(uchar mode)
{
if(mode < 4)
{
	SLEEPCMD |= mode; //设置系统睡眠模式
	PCON = 0x01; //进入睡眠模式 ,通过中断唤醒
}
else
	PCON = 0x00; //通过中断唤醒系统
}

//设置睡眠时间
void Set_ST_Period(uint sec)
{
	ulong sleepTimer = 0;
	sleepTimer |= (ulong)ST1 << 8;
	sleepTimer |= (ulong)ST2 << 16;
	sleepTimer += ((ulong)sec * (ulong)32768);
	ST2 = (uchar)(sleepTimer >> 16);
	ST1 = (uchar)(sleepTimer >> 8);
	ST0 = (uchar) sleepTimer;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1370144.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UG装配-布置

UG装配中&#xff0c;当一个产品在不同情况下具有不同的形态的时候&#xff0c;为了快速进行展示&#xff0c;我们可以使用布置命令. 我们可以直接在工具栏布置中&#xff0c;或者在装配导航器中右键单击装配体&#xff0c;选择布置-编辑&#xff0c;添加不同不同的布置页面 使…

模拟算法(模拟算法 == 依葫芦画瓢)万字

模拟算法 基本思想引入算法题替换所有的问号提莫攻击Z字形变换外观数列数青蛙 基本思想 模拟算法 依葫芦画瓢解题思维要么通俗易懂&#xff0c;要么就是找规律&#xff0c;主要难度在于将思路转换为代码。 特点&#xff1a;相对于其他算法思维&#xff0c;思路比较简单&#x…

Docker简介、基本概念和安装

Docker简介、基本概念和安装 1.docker简介 1.1 什么是docker Docker 最初是 dotCloud 公司创始人 Solomon Hykes (opens new window)在法国期间发起的一个公司内部项目&#xff0c;它是基于 dotCloud 公司多年云服务技术的一次革新&#xff0c;并于 2013 年 3 月以 Apache 2…

Power BI - 5分钟学习修改数据类型

每天5分钟&#xff0c;今天介绍Power BI修改数据类型 Power BI加载数据时&#xff0c;会尝试将源列的数据类型转换为更高效的存储、计算和数据可视化的数据类型。 例如&#xff0c;如果从Excel导入的值的列没有小数值&#xff0c;Power BI Desktop会将整个数据列转换为整数数据…

HCIA-Datacom题库(自己整理分类的)_17_简单的命令判断【11道题】

1.华为AR路由器的命令行界面下&#xff0c;save命令的作用是保存当前的系统时间。 解析&#xff1a;Save保存配置 2.VRP界面下&#xff0c;使用命令delete vrpcfg.zp删除文件&#xff0c;必须在回收站中清空&#xff0c;才能彻底删除文件。√ 解析&#xff1a;delete删除到回…

“高端”的位运算

王有志&#xff0c;一个分享硬核Java技术的互金摸鱼侠加入Java人的提桶跑路群&#xff1a;共同富裕的Java人 原计划迭代作为预备知识的收尾&#xff0c;不过在解2的幂和4的幂时&#xff0c;想到关于数字2的问题可以通过位运算去解决&#xff0c;因此补充了关于位运算的内容。 …

Spring循环引用和三级缓存

前言 Spring 解决 Bean 之间的循环引用关系用到了三级缓存&#xff0c;那么问题来了。三级缓存是怎么用的&#xff1f;每一层的作用是什么&#xff1f;非得用三级吗&#xff1f;两级缓存行不行&#xff1f; 理解循环引用 所谓的“循环引用”是指 Bean 之间的依赖关系形成了一…

什么事“网络水军”?他们的违法活动主要有四种形式

我国治理网络水军&#xff0c;包括造谣引流、舆情敲诈、刷量控评、有偿删帖等各类“网络水军”等违法犯罪活动已经许久。 日前&#xff0c;官方召开新闻发布会&#xff0c;公布了相关的一些案件进程&#xff0c;今年已累计侦办相关案件339起&#xff0c;超过历年的全年侦办案件…

开启Android学习之旅-6-实战答题App

不经过实战&#xff0c;看再多理论&#xff0c;都是只放在笔记里&#xff0c;活学活用才是硬道理。同时开发应用需要循序渐进&#xff0c;一口气规划300个功能&#xff0c;400张表&#xff0c;会严重打击自己的自信。这里根据所学的&#xff0c;开发一个答题App。 题库需求分析…

Linux 系统之部署 ZFile 在线网盘服务

一、ZFile 介绍 1&#xff09;ZFile 简介 官网&#xff1a;https://www.zfile.vip/ GitHub&#xff1a;https://github.com/zfile-dev/zfile ZFile 是一款基于 Java 的在线网盘程序&#xff0c;支持对接 S3、OneDrive、SharePoint、又拍云、本地存储、FTP 等存储源&#xff0…

精彩推荐 |【Java技术专题】「重塑技术功底」攻破Java技术盲点之剖析动态代理的实现原理和开发指南(中)

攻破Java技术盲点之剖析动态代理的实现原理和开发指南 前提介绍技术回顾回顾问题分析代理对象实现了什么接口代理对象的方法体是什么 CGLIB动态代理CGLIB的原理继承方式 为什么要用CGLIB建立被代理的类cglib拦截器类测试类易错点&#xff1a;CGLIB的invoke和invokeSuper的区分i…

【2024最新-python3小白零基础入门】No1.python简介以及环境搭建

文章目录 一 python3 简介二 python语言的特点三 python安装四 安装开发工具-pycharm五 新建一个python项目1.新建项目2 配置虚拟环境3 运行项目 一 python3 简介 Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性&a…

系分笔记数据库技术之数据库安全措施

文章目录 1、概要2、数据库的保护措施3、数据库的故障4、备份和日志5、总结 1、概要 数据库设计是考试重点&#xff0c;常考和必考内容&#xff0c;本篇主要记录了知识点&#xff1a;数据库故障及解决、数据库安全保护措施和数据库备份及恢复。 2、数据库的保护措施 数据库安全…

学习笔记——C++二维数组

二维数组定义的四种方式&#xff1a; 1&#xff0c;数据类型 数组名[ 行数 ][ 列数 ]&#xff1b; 2&#xff0c;数据类型 数组名[ 行数 ][ 列数 ]{{数据1&#xff0c;数据2}&#xff0c;{数据3&#xff0c;数据4}}&#xff1b; 3&#xff0c;数据类型 数组名[ 行数…

LeetCode(242)有效的字母异位词⭐

给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 示例 1: 输入: s "anagram", t "nagaram" 输出: true示例 2: 输…

2024年第九届图像、视觉与计算国际会议(ICIVC 2024)即将召开!

2024年第九届图像、视觉与计算国际会议&#xff08;ICIVC 2024&#xff09;将于2024年7月15-17日在中国苏州举行&#xff0c;本次会议是由昆山杜克大学和IEEE联合主办&#xff0c;SMC技术支持&#xff0c;西安科技大学&#xff0c;北京工业大学&#xff0c;中国海洋大学&#x…

5分钟彻底搞懂什么是token

大家好啊&#xff0c;我是董董灿。 几年前在一次工作中&#xff0c;第一次接触到自然语言处理模型 BERT。 当时在评估这个模型的性能时&#xff0c;领导说这个模型的性能需要达到了 200 token 每秒&#xff0c;虽然知道这是一个性能指标&#xff0c;但是对 token 这个概念却不…

Qt / day01

1. 思维导图 2. 自由发挥应用场景实现一个登录窗口界面。 代码(mywidget.cpp)&#xff1a; #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {// windows setup //setup windows sizethis->resize(600, 370);//set window fixed si…

c++实现支持动态扩容的栈(stack)

1.在栈容量满时自动扩容: 支持自动扩容栈实现: // // myStack.hpp // algo_demo // // Created by Hacker X on 2024/1/9. //#ifndef myStack_hpp #define myStack_hpp #include <stdio.h> #include <string.h> //栈实现 //1.入栈 //2.出栈 //3.空栈 //4.满栈 …

图片纹理贴图

/* * 当需要给图形赋予真实颜色的时候&#xff0c;不太可能为没一个顶点指定一个颜色&#xff0c;通常会采用纹理贴图 * 每个顶点关联一个纹理坐标 (Texture Coordinate) 其它片段上进行片段插值 * */#include <iostream> #define STBI_NO_SIMD #define STB_IMAGE_IMPLE…