[En-Nut-Discussion] power optimizations in idle thread

Mustafa Yuecel yuecel at tik.ee.ethz.ch
Thu Apr 12 10:50:02 CEST 2007


Hi Henrik

Ok, I see no problem with the buskeeper bit, but what if someone want to
use the ADC wakeup and thus the ADC should not disabled during sleep? Do
we ignore this case, use SLEEP_MODE_ADC in this case or put some #ifdefs?

Musti

Henrik Maier wrote:
> Why not saving the ADC bit and buskeeper bits and set it to the previous
> state after wake-up?
> 
> Henrik
> 
>> -----Original Message-----
>> From: Mustafa Yuecel [mailto:yuecel at tik.ee.ethz.ch]
>> Sent: Wednesday, 11 April 2007 12:59 AM
>> To: en-nut-discussion at egnite.de
>> Subject: [En-Nut-Discussion] power optimizations in idle thread
>>
>> Hi,
>>
>> In order to reduce the current consumption on our BTnodes I would like
>> the commit the following changes on arch/avr/os/nutinit.c to CVS.
>>
>> 1. NutThreadSetSleepMode returns the old value (like
>> NutThreadSetPriority).
>>
>> 2. disable ADC and buskeeper before entering sleep mode and re-enable
>> these after wakeup:
>>
>> if (idle_sleep_mode != SLEEP_MODE_NONE) {
>>   sleep_mode = AVR_SLEEP_CTRL_REG & _SLEEP_MODE_MASK;
>>   set_sleep_mode(idle_sleep_mode);
>>   cbi(ADCSR, ADEN); // disable ADC
>>   cbi(XMCRB, XMBK); // disable buskeeper
>>   /* Note:  avr-libc has a sleep_mode() function, but it's broken for
>>   AT90CAN128 with avr-libc version earlier than 1.2 */
>>   AVR_SLEEP_CTRL_REG |= _BV(SE);
>>   __asm__ __volatile__ ("sleep" "\n\t" :: );
>>   AVR_SLEEP_CTRL_REG &= ~_BV(SE);
>>   sbi(XMCRB, XMBK); // re-enable buskeeper
>>   sbi(ADCSR, ADEN); // re-enable ADC
>>   set_sleep_mode(sleep_mode);
>> }
>>
>>
>> 1. is a quick change, but 2. throws some problems up:
>>
>> - the ADC may be used as wakeup source for SLEEP_MODE_IDLE and
>> SLEEP_MODE_ADC, so it should not be disabled in any case. Either we use
>> a define option at compile time or we set up the policy that the ADC
>> remains only enabled in SLEEP_MODE_ADC.
>>
>> - the buskeeper is only useful/enabled if external RAM is available.
>> Maybe we can use here '#ifdef NUTXMEM_SIZE'?
>>
>> Any comments?
>>
>>
>> I proposed these changes (among with others) on
>> http://www.btnode.ethz.ch/Projects/JAWS-DSNPowerdownFeature. All the
>> modifications decreases the current consumption of around 0.25 and 0.35
>> mA.
>>
>>
>> Best,
>> Musti
>> _______________________________________________
>> http://lists.egnite.de/mailman/listinfo/en-nut-discussion
>>
> 
> 
> _______________________________________________
> http://lists.egnite.de/mailman/listinfo/en-nut-discussion




More information about the En-Nut-Discussion mailing list