隔了好久……🤐
直接贴代码。简单的了解一下CC2530的电源管理模块和寄存器配置,以及跟电源管理挂钩的睡眠定时器。
代码及解析
#include <ioCC2530.h>
typedef unsigned int uint;
typedef unsigned char uchar;
typedef unsigned long ulong;
/****************************
该示例通过一个全局变量flag来分别进入CC2530电源管理模块的四个供电模式:空闲模式、PM1、PM2、PM3
通过睡眠定时器来控制电源模式的休眠唤醒时间间隔
现象是当2530上电或重启后,LED1会闪烁两次,然后进入空闲供电模式,通过睡眠定时器设置3秒后唤醒设备,
然后LED1闪烁两次,进入PM1,三秒后LED1再次闪烁两次,进入PM2,三秒后LED灯闪烁两次,进入PM3,之后就不会再自行唤醒设备,
此时进入了深度休眠,复位和中断才能唤醒他,这里使用KEY1的按键中断来唤醒进入PM3模式的设备。
一遍的测试中LED会自行闪烁四轮8次,每轮间隔3秒左右,然后不会再自行闪烁,直到按下KEY1
可以将140行的注释取消来查看睡眠定时器的运作情况
****************************/
//定义控制灯的端口
#define LED1 P1_0 //定义LED1为P10口控制
#define LED2 P1_1 //定义LED2为P11口控制
#define KEY1 P0_1 //定义KEY1为P01口控制
//函数声明
void Delay(uint n); //延时
void InitIO(void); //初始化LED控制IO口函数
void InitKEY(void); //初始化KEY控制IO口函数
void setSleep(uint); //设置睡眠模式
void Set_ST_Period(uint); //设置睡眠时间
void InitSleepTimer(void); //初始化睡眠定时器
uint flag = 0; //供电模式标志计数
//延时
//输入n,延时(4*n)ms
void Delay(uint n)
{
T1CTL |= 0x01; //1分频 16M晶振 溢出时间为1/16000000*65535=4ms
while(n>0)