реклама на сайте
подробности

 
 
> Atmega128 спит (должна спать)
elusive
сообщение Feb 19 2013, 06:08
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 91
Регистрация: 26-05-10
Пользователь №: 57 544



Нужно усыплять Atmega128 и пробуждать по таймеру timer0 25 раз. Делаю так:


Код
sleepmode:

//start timer0
  TCNT0 = 0;
  TCCR0 |= 0x07; //Set 1024 prescaler for timer0 and normal mode
  TIMSK |= 0x01; //Enable interrupt from timer0 overflow

//set Sleep Enable bit
  MCUCR |= 0x20;
  
  asm("sleep");
  
//clear Sleep Enable bit
  MCUCR &=~ 0x20;

//stop timer0
  TCCR0 &=~ 0x07; //Switch off timer0
  TIMSK &=~ 0x01; //Disable interrupt from timer0 overflow

  timer_++;
  if (timer_ < 25)
       goto sleepmode;


Проблема: один раз мега нормально засыпает, просыпается по прерыванию, в обработчике бит Global_Interrupts сбрасывается и во второй раз процессор проснуться не может.

Вопрос: где поставить сакраментальное SEI (разрешить глобальные прерывания)? где бы я ни ставил (в пределах этого кода) это всегда приводит к тому что мега не спит! то есть после команды sleep она благополучно продолжает пахать! почему??

Сообщение отредактировал elusive - Feb 19 2013, 06:08
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 20:08
Рейтинг@Mail.ru


Страница сгенерированна за 0.01452 секунд с 7
ELECTRONIX ©2004-2016