CC1110Fx / CC1111Fx
13.8 Sleep Timer
The Sleep Timer is used to control when the
CC1110Fx/CC1111Fx exits from PM{0-2} and
hence the Sleep Timer can be used to
implement a wake up functionality which
enables CC1110Fx/CC1111Fx to periodically wake
up to active mode and listen for incoming RF
packets.
power RC oscillator to clock the Sleep Timer,
tEvent0 is given by:
750
tEvent0
=
⋅ EVENT0⋅ 25⋅WOR_ RES
fref
If the 32.768 kHz crystal oscillator is used to
clock the Sleep Timer, tEvent0 is calculated as
follows:
13.8.1 Sleep Timer Operation
This section describes the operation of the
timer.
1
tEvent0
=
⋅ EVENT0⋅25⋅WOR_ RES
32768
Note: In this section of the document, fRef is
used to denote the reference frequency for
the synthesizer.
The time from the CC1110Fx/CC1111Fx enters
PM2 until the next Event 0 is programmed to
appear (tSLEEPmin) should be larger than 11.08
ms when fref is 26 MHz and 12 ms when fref is
24 MHz (Sleep Timer clocked by the low
power RC oscillator).
For CC1110Fx
and for
f =fXOS
ref
fXOSC
CC1111Fx,
fref
=
2
750
When referring to the low power RCOSC,
calibrated values are assumed
tSLEEP
=
⋅384
min
fref
When the Sleep Timer is clocked by the
The Sleep Timer consists of a 31-bit counter.
The appropriate bits of this counter are
selected according to a resolution setting
determined by the WORCTRL.WOR_RES
register bits. The Sleep Timer is either clocked
by the 32.768 kHz crystal oscillator or by the
low power RC oscillator (fref / 750). The timer
can only be used in PM0, PM1, and PM2.
32.768 kHz crystal oscillator, tSLEEP = 11.72
min
ms (384/32768).
13.8.2 Sleep Timer and Power Modes
Entering PM0-2 has to be aligned to a positive
edge on the 32 kHz clock source.
There has to be at least two positive edges on
the 32 kHz clock source between
WORCTRL.WOR_RESET being asserted and
updating EVENT0and entering PM0-2.
The Sleep Timer has a programmable timing
event called Event 0. While in PM0, PM1, or
PM2, reaching Event
0
will make the
CC1110Fx/CC1111Fx enter active mode.
If EVENT0 is to be updated to a value lower
than
current
time
value,
The time between two consecutive Event 0’s
(tEvent0) is programmed with a mantissa value
WORCTRL.WOR_RESET has to be asserted
first.
given
by
WOREVT1.EVENT0
and
WOREVT0.EVENT0, and an exponent value set
by WORCTRL.WOR_RES. When using the low
The following two code examples should be
used in order to set correct sleep time:
// Updating Event0 to a value higher than current timer value
char temp = WORTIME0;
while(temp == WORTIME0);
WOREVT1 = desired event0;
WOREVT0 = desired event0;
PCON |= 0x01;
// Wait until a positive 32 kHz edge
// Set Event0, high byte
// Set Event0, low byte
// Enter PM
// Updating Event0 to a value lower than current time value
WORCTRL |= 0x04;
// Reset Sleep Timer
char temp = WORTIME0;
while(temp == WORTIME0);
temp = WORTIME0;
while(temp == WORTIME0);
WOREVT1 = desired event0;
WOREVT0 = desired event0;
PCON |= 0x01;
// Wait until a positive 32 kHz edge
// Wait until a positive 32 kHz edge
// Set Event0, high byte
// Set Event0, low byte
// Enter PM
SWRS033E
Page 128 of 239