I'm working on a project where I only need the MSP430 (probably a
'F423) to wake up once a day. It looks like the longest I can sleep
though is 30s. (TimerA w/ 32k ACLK / 8, updown mode, count to 61440
then back to 0 and interrupt on CCIFG) Any suggestions on how to get
a longer delay?
Also how can I simulate this? I've set up IAR/TI C-SPY to generate a
TimerA interrupt, but when the ISR reads TAIV to determine the
interrupt source, it always comes back 0.
Regards,
Joe
You don't read TAIV per se, you use it. TAIV is cleared on the first
read. The best way to use it is:_
TA12_ISR:
ADD &TAIV,PC
RETI
JMP TA1_ISR
JMP TA2_ISR
RETI
RETI
JMP TA_OVF_ISR ;You should be using the overflow
On the subject of long delays, these are typically executed as a lot mof
short delays. The MSP430 is particularly good for this becuase of the
DCO and very rapid wake-up (6usecs quoted, but typically about
500nsecs). In your ISR you maintain a second, or even third long
counter. using simply continuous count and rollover interruipt you get
an interrupt every 16 seconds, so a single counter would itself roll
over at 1048576 seconds, or 291 hours, so for a 24 hour interrupt you
need a
TA_OVF_ISR::
BIC #TAIFG, &TACTL
INC &COUNTER ;16 SECOND INTERVAL
COUNTER
CMP #5400,&COUNTER ;24 HOUR TEST
JLO SNOOZE ;IF NOT 24 HOURS
BACK TO SLEEP
BIC #LPM3,0(SP) ;EXIT SLEEP ON RETI,
WHEN OLD SR IS POPPED
SNOOZE:
RETI
This is the entire thing, except for entering sleep mode. I would have
the lowest possible DCO frequency on entry to sleep.
Al
jgb_gt_84 wrote:
>
>I'm working on a project where I only need the MSP430 (probably a
>'F423) to wake up once a day. It looks like the longest I can sleep
>though is 30s. (TimerA w/ 32k ACLK / 8, updown mode, count to 61440
>then back to 0 and interrupt on CCIFG) Any suggestions on how to get
>a longer delay?
>
>Also how can I simulate this? I've set up IAR/TI C-SPY to generate a
>TimerA interrupt, but when the ISR reads TAIV to determine the
>interrupt source, it always comes back 0.
>Regards,
>Joe
>
>
>
>
>
>
>
>
>
>.
>
>
>Yahoo! Groups Links
>
>
>
>
>
>
>
>
>
>
>
Reply by Leon Heller●April 9, 20052005-04-09
----- Original Message -----
From: "jgb_gt_84" <jgb_gt_84@jgb_...>
To: <msp430@msp4...>
Sent: Thursday, April 07, 2005 2:20 PM
Subject: [msp430] long delays and how to simulate them
>
>
>
> I'm working on a project where I only need the MSP430 (probably a
> 'F423) to wake up once a day. It looks like the longest I can sleep
> though is 30s. (TimerA w/ 32k ACLK / 8, updown mode, count to 61440
> then back to 0 and interrupt on CCIFG) Any suggestions on how to get
> a longer delay?
Just set it to interrupt, say, every second, and use software counters to
get your 24 hour delay.
Leon
Reply by Richard●April 9, 20052005-04-09
I think he wants to conserve power and only wake up every 24 hours....
At 12:55 AM 4/9/2005, you wrote:
>Just set it to interrupt, say, every second, and
use software counters to
>get your 24 hour delay.
>
>Leon
// richard (This email is for mailing lists. To reach me directly, please
use richard at imagecraft.com)
Reply by Onestone●April 9, 20052005-04-09
Not possible in any conventional MSP430 configuration I'm aware of. Of
course he could externally divide a 32.768kHz clock, or find a very low
frequency stable oscillator, then using the divide by 8 internally he
would need the input frequency to be 6.068Hz. Or set the input frequency
to 6Hz and the overflow counter to 64800. Then, after dividing by 8 the
clock frequency is 0.75hz, so 1/f = 1.333333333 * 64800 = 86400seconds
or 24 hours.
Dividing the 32768 clock would probably be easier than trying to get a
crystal that would neatly divide down to 6Hz. So divide the 32768 clock
by 8192 externally to get 4Hz, divide this by 8 to get 0.5hz, or a 2
second tick, the 43200 as a compare gives 24 hours. Of course you have
probanly consumed more power in the external divider than would be
consumed aking up for a few clock cycles, then going back to sleep
again. using registers for the COUNTER, and to hold the COMPARE value,
my orignal solution requires.
R4 is a counter to count Timera rollovers
R5 is the literal value that correponds to 24 hours
R6 is the bit pattern used to enter the currtent sleep mode
TA_OVF_ISR:
BIC #TAIFG, &TACTL ;5clocks
INC R4 ;16 SECOND
INTERVAL COUNTER 1Clk
CMP R5,R4 ;24 HOUR TEST
1clock
JLO SNOOZE ;IF NOT 24 HOURS BACK
TO SLEEP 2 clocks
BIC R6,0(SP) ;EXIT SLEEP ON
RETI, WHEN OLD SR IS POPPED 4 clocks
SNOOZE:
RETI ;5 clocks
18 clock cycles plus wake up time, executed every 8 seconds so in every
hour this sequence is executed 450 times. assuming DCOCLK = 500kHz then
the above routine, including the vector jmp table requires 23 clock
cycles, or 46usecs, plus 6usec start up. procedure requires a total of
52usecs every 8 seconds. LPM3 consumes around 2uA. run mode. Run mode at
500kHz is nominally 210uA, so the mean consumption is (7,999,948* 2 + 52
* 210)/8,000,000 or 2.001352uA. I haven't yet found a divider that draws
less than 1.35nA, or a stable external oscillatro that draws less
current either.
Al
Richard wrote:
>I think he wants to conserve power and only wake up
every 24 hours....
>
>At 12:55 AM 4/9/2005, you wrote:
>
>
>
>>Just set it to interrupt, say, every second, and use software counters
to
>>get your 24 hour delay.
>>
>>Leon
>>
>>
>
>// richard (This email is for mailing lists. To reach me directly, please
>use richard at imagecraft.com)
>
>
>
>.
>
>
>Yahoo! Groups Links
>
>
>
>
>
>
>
>
>
>
>
Reply by jgb_gt_84●April 11, 20052005-04-11
Everyone, thanks for the replies. You've confirmed what I had already
expected. I thought someone might have had a clever idea I had not
thought of.
The TAIV issue is apparently a deficiency of the KickStart interrupt
simulation.
regards,
Joe
--- In msp430@msp4..., Onestone <onestone@b...> wrote:
> Not possible in any conventional MSP430
configuration I'm aware of. Of
> course he could externally divide a 32.768kHz clock, or find a very low
> frequency stable oscillator, then using the divide by 8 internally he
> would need the input frequency to be 6.068Hz. Or set the input
frequency
> to 6Hz and the overflow counter to 64800. Then,
after dividing by 8 the
> clock frequency is 0.75hz, so 1/f = 1.333333333 * 64800 = 86400seconds
> or 24 hours.
>
> Dividing the 32768 clock would probably be easier than trying to get a
> crystal that would neatly divide down to 6Hz. So divide the 32768 clock
> by 8192 externally to get 4Hz, divide this by 8 to get 0.5hz, or a 2
> second tick, the 43200 as a compare gives 24 hours. Of course you have
> probanly consumed more power in the external divider than would be
> consumed aking up for a few clock cycles, then going back to sleep
> again. using registers for the COUNTER, and to hold the COMPARE value,
> my orignal solution requires.
>
> R4 is a counter to count Timera rollovers
> R5 is the literal value that correponds to 24 hours
> R6 is the bit pattern used to enter the currtent sleep mode
>
> TA_OVF_ISR:
> BIC #TAIFG, &TACTL ;5clocks
> INC R4 ;16 SECOND
> INTERVAL COUNTER 1Clk
> CMP R5,R4 ;24 HOUR TEST
> 1clock
> JLO SNOOZE ;IF NOT 24 HOURS
BACK
> TO SLEEP 2 clocks
> BIC R6,0(SP) ;EXIT SLEEP ON
> RETI, WHEN OLD SR IS POPPED 4 clocks
> SNOOZE:
> RETI ;5 clocks
>
> 18 clock cycles plus wake up time, executed every 8 seconds so in every
> hour this sequence is executed 450 times. assuming DCOCLK = 500kHz then
> the above routine, including the vector jmp table requires 23 clock
> cycles, or 46usecs, plus 6usec start up. procedure requires a total of
> 52usecs every 8 seconds. LPM3 consumes around 2uA. run mode. Run
mode at
> 500kHz is nominally 210uA, so the mean consumption
is (7,999,948* 2
+ 52
> * 210)/8,000,000 or 2.001352uA. I haven't yet
found a divider that
draws
> less than 1.35nA, or a stable external oscillatro
that draws less
> current either.
>
> Al
>
>
>
> Richard wrote:
>
> >I think he wants to conserve power and only wake up every 24 hours....
> >
> >At 12:55 AM 4/9/2005, you wrote:
> >
> >
> >
> >>Just set it to interrupt, say, every second, and use software
counters to
> >>get your 24 hour delay.
> >>
> >>Leon
> >>
> >>
> >
> >// richard (This email is for mailing lists. To reach me directly,
please
> >use richard at imagecraft.com)
> >
> >
> >
> >.
> >
> >
> >Yahoo! Groups Links
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
Signal Processing Engineer Seeking a DSP Engineer to tackle complex technical challenges. Requires expertise in DSP algorithms, EW, anti-jam, and datalink vulnerability. Qualifications: Bachelor's degree, Secret Clearance, and proficiency in waveform modulation, LPD waveforms, signal detection, MATLAB, algorithm development, RF, data links, and EW systems. The position is on-site in Huntsville, AL and can support candidates at 3+ or 10+ years of experience.