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