[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [avr-libc-dev] [RFC] Sleeping BOD API
From: |
Bob Paddock |
Subject: |
Re: [avr-libc-dev] [RFC] Sleeping BOD API |
Date: |
Fri, 13 Feb 2009 09:13:59 -0500 |
> I'm concerned that because you're doing this in C, the compiler won't
> generate efficient >enough code
There was a single unnecessary reload from the compiler generated code.
This assembly language file (bodsleep.S) does work on the Tiny88:
;20090213 Disable Brown Out Detect during Sleep. Has critical cycle
timing. IRQs must be off.
#include <avr/io.h>
.section .text
.global bod_sleep
bod_sleep:
IN R24,_SFR_IO_ADDR(MCUCR) ; Load MCUCR to R24
ORI R24,(_BV(BODS)|_BV(BODSE)) ; Set Brown Out Disable
during Sleep and enable the bit change
OUT _SFR_IO_ADDR(MCUCR),R24 ; Store MCUCR
ANDI R24,~(_BV(BODSE)) ; Clear BODSE
OUT _SFR_IO_ADDR(MCUCR),R24 ; Store MCUCR with BODSE cleared
SEI ; Enable Interrupts
SLEEP ; Go to sleep
RET
> And, why are you using __interrupt_enable() instead of sei()? Are you trying
> to have this >work under AVR GCC and IAR too?
I try to write all of my code in tool neutral format, more portable
that way. All of my projects include "compiler.h" that does The Right
Thing depending on what compiler might be in use (IAR, GCC, Imagecraft
etc). I have moved all of my projects except one, Tiny2313 with zero
bytes free in IAR, to GCC.
RE: [avr-libc-dev] [RFC] Sleeping BOD API, Weddington, Eric, 2009/02/06
Re: [avr-libc-dev] [RFC] Sleeping BOD API, Bob Paddock, 2009/02/09
Re: [avr-libc-dev] [RFC] Sleeping BOD API, Bob Paddock, 2009/02/12