1、学习进度报告,2014-1-5,系统睡眠唤醒,看门狗,定时器产生PWM波,Add Your Text in here,下一阶段计划,供电模式,ZigBee系统多数工作在无人的环境下,因此系统的电源供给和运行时间便是需要考虑的问题。而在系统不需要处理数据或者控制其他硬件外设时进入休眠状态,这样可以减少电量的消耗,保证整个系统的工作时间。 CC2530提供了如下系统电源管理模式: (1)全功能模式,高频晶振(16M 或者 32M )和低频晶振(32.768K RCOSC/XOSC )全部工作, 数字处理模块正常工作。 (2)空闲模式:除了CPU 内核停止运行(即空闲),其他和主动模式一样。 (3)
2、PM1 : 高频晶振(16M 或者32M )关闭,低频晶振(32.768K RCOSC/XOSC )工作, 数字核心模块正常工作。 (4) PM2 :低频晶振(32.768K RCOSC/XOSC )工作, 数字核心模块关闭,系统通过RESET, 外部中断或者睡眠计数器溢出唤醒。 (5)PM3 : 晶振全部关闭,数字处理核心模块关闭,系统只能通过RESET或外部中断唤醒。此模式下功耗最低。,供电模式,主动模式是一般模式,而PM3 具有最低的功耗。不同的供电模式对系统运行的影响见上图,并给出了稳压器和振荡器选择。,主动模式/空闲模式,主动模式是完全功能的运行模式,CPU、外设和 RF收发器都是活
3、动的。数字稳压器是开启的。主动模式用于一般操作。在主动模式下(SLEEPCMD.MODE=0x00)通过使能 PCON.IDLE 位,CPU内核就停止运行,进入空闲模式。所有其他外设将正常工作,且 CPU内核将被任何使能的中断唤醒(从空闲模式转换到主动模式)。,其他供电模式/睡眠模式,PM1 在PM1 模式下,高频振荡器(32MHz XOSC 和16MHz RCOSC)是掉电的。稳压器和使能的32 kHz 振荡器是开启的。当进入PM1 模式,就运行一个掉电序列。由于PM1 使用的上电/掉电序列较快,等待唤醒事件的预期时间相对较短(小于3ms),就使用PM1。 PM2 PM2 具有较低的功耗。在
4、PM2 下的上电复位时刻,外部中断、所选的32 kHz 振荡器和睡眠定时器外设是活动的。I/O 引脚保留在进入PM2 之前设置的I/O 模式和输出值。所有其它内部电路是掉电的。稳压器也是关闭的。当进入PM2 模式,就运行一个掉电序列。 当使用睡眠定时器作为唤醒事件,并结合外部中断时,一般就会进入PM2 模式。相比较PM1,当睡眠时间超过3ms 时,一般选择PM2。比起使用PM1,使用较少的睡眠时间不会降低系统功耗。,其他供电模式/睡眠模式,PM3 PM3 用于获得最低功耗的运行模式。在PM3 模式下,稳压器供电的所有内部电路都关闭(基本上是所有的数字模块,除了中断探测和POR 电平传感)。内部
5、稳压器和所有振荡器也都关闭。 复位(POR 或外部)和外部I/O 端口中断是该模式下仅有的运行的功能。I/O 引脚保留进入PM3 之前设置的I/O 模式和输出值。复位条件或使能的外部IO 中断事件将唤醒设备,使它进入主动模式(外部中断从它进入PM3 的地方开始,而复位返回到程序执行的开始)。RAM 和寄存器的内容在这个模式下可以部分保留。PM3 使用和PM2 相同的上电/掉电序列。 当等待外部事件时,使用PM3 获得超低功耗。当睡眠时间超过3ms 且要求最低功耗时应该使用该模式。,睡眠唤醒中断模式,在这个试验中主要用到的寄存器为PCON、SLEEPCMD、P0IEN、PICTL、IEN1、EA
6、、P0IFG以及I/O口的相应寄存器。其中P0IEN、PICTL、IEN1、EA、P0IFG寄存器为外部中断的控制寄存器。,当PCON=0x01才能进入休眠模式,即才能读取SLEEPCMD.MODE。当MODE=00,且PCON=0x01 才能进入空闲模式。当PCON= 0,即进入主动模式。,睡眠唤醒中断模式,MODE位的配置需PCON=0x01,睡眠唤醒中断模式,Mode的值为供电模式1、2、3分别代表PM1、PM2、PM3其他的值都将进入主动模式。,http:/ 位的定时器,运行在一个32kHz 的时钟频率(可以是RCOSC 或XOSC)上。定时器在复位之后立即启动,如果没有中断就继续运行
7、。定时器的当前值可以从SFR 寄存器ST2:ST1:ST0 中读取。 当定时器的值等于24 位比较器的值,就发生一次定时器比较。通过写入寄存器ST2:ST1:ST0 来设置比较值。当STLOAD.LDRDY 是1 写入ST0 发起加载新的比较值,即写入ST2、ST1 和ST0 寄存器的最新的值。 加载期间STLOAD.LDRDY 是0,软件不能开始一个新的加载,直到STLOAD.LDRDY 回到1。读ST0 将捕获24 位计数器的当前值。因此,ST0 寄存器必须在ST1 和ST2 之前读,以捕获一个正确的睡眠定时器计数值。当发生一个定时器比较,中断标志STIF 被设置。每次系统时钟,当前定时器
8、值就被更新。 ST 中断的中断使能位是IEN0.STIE,中断标志是IRCON.STIF。 睡眠定时器的值在PM3 下不保存。 注意如果电压降到2V 以下同时处于PM2,睡眠间隔将会受到影响,睡眠唤醒定时器唤醒,睡眠唤醒定时器唤醒,该位为定时器加载状态的标志位,为只读的。在我做该实验时加载ST2:ST1:ST02的值,会检测该位的值(感觉程序不是要求很快时不需要这么做)。,睡眠唤醒定时器唤醒,这个寄存器我主要是用到CLK32K位来读取定时器的值。,睡眠唤醒定时器唤醒,该函数完成睡眠定时的初始化过程,包括初始化睡眠定时器,使能定时器中断,清标志位,打开总中断。,睡眠唤醒定时器唤醒,该函数是向睡眠
9、定时寄存器加载数值。由于是将睡眠定时器与系统时钟进行比较然后判断是否该唤醒系统,每次睡眠被唤醒时并不是系统重启,系统时钟的值将继续累加。因此每次要先将睡眠定时器的数值先加载到sleepTimer上然后在加上sec x32768,这里系统此时的晶振是32.768kHz因此是所欲睡眠的秒数乘以32768(该处粗略的计算)。然后等待加载状态,之后将sleepTimer的值加载给定时器。,睡眠唤醒定时器唤醒,该函数的作用是读取睡眠定时器的值。由于我开始弄好不清楚加载寄存器值函数的写法,所以我想让程序输出睡眠定时器的值,因此我写了这个读取定时器值得函数并将其值赋给一个数组。,睡眠唤醒定时器唤醒,中断函数
10、,完成清空标志位和使系统进入正常工作模式的任务。,看门狗,看门狗是在软件跑飞的情况下CPU自恢复的一个方式,当软件在选定的时间间隔内不能置位看门狗定时器(WDT),WDT就复位系统。看门狗可用于电噪声,电源故障或静电放电等恶劣工作环境或高可靠性要求的环境。如果系统不需要应用到看门狗,则WDT可配置成间隔定时器,在选定时间间隔内产生中断。 看门狗定时器的特性如下: 四个可选的定时器间隔 看门狗模式 定时器模式 在定时器模式下产生中断请求 WDT 可以配置为一个看门狗定时器或一个通用的定时器。WDT 模块的运行由WDCTL 寄存器控制。看门狗定时器包括一个15 位计数器,它的频率由32kHz 时钟
11、源规定。注意用户不能获得15 位计数器的内容。在所有供电模式下,15 位计数器的内容保留,且当重新进入主动模式,看门狗定时器继续计数。,看门狗,在系统复位之后,看门狗定时器就被禁用。要设置WDT 在看门狗模式,必须设置WDCTL.MODE1:0位为10 。然后看门狗定时器的计数器从0 开始递增。在看门狗模式下,一旦定时器使能,就不可以禁用定时器,因此,如果WDT 位已经运行在看门狗模式下,再往WDCTL.MODE1:0写入00 或10 就不起作用了。WDT 运行在一个频率为32.768 kHz(当使用32 kHz XOSC)的看门狗定时器时钟上。这个时钟频率的超时期限等于1.9ms,15.62
12、5 ms,0.25 s 和1s,分别对应64,512,8192 和32768 的计数值设置。如果计数器达到选定定时器的间隔值,看门狗定时器就为系统产生一个复位信号。如果在计数器达到选定定时器的间隔值之前,执行了一个看门狗清除序列,计数器就复位到0,并继续递增。看门狗清除的序列包括在一个看门狗时钟周期内,写入0xA 到WDCTL.CLR3:0,然后写入0x5 到同一个寄存器位。如果这个序列没有在看门狗周期结束之前执行完毕,看门狗定时器就为系统产生一个复位信号。当看门狗模式下,WDT 使能,就不能通过写入WDCTL.MODE1:0位改变这个模式,且定时器间隔值也不能改变。 在看门狗模式下,WDT 不会产生一个中断请求。,看门狗,看门狗定时器控制寄存器,看门狗,初始化看门狗模式,同时设置时间间隔为1s,看门狗,清除看门狗定时器,终止看门狗,喂狗。,定时器产生PWM,产生PWM的方式有两种:一种是通过延时的方式,一种是通过定时器比较的方式。,定时器产生PWM,