Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: mega88PA асинхронный счетчик2
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
arttab
Если повтор, то извиняйте - не нашел. тыкните куда надо

нужно запустить Т2 асинхронно с последующим переводом power save и с периодическим пробуждению по переполнению. тактирование от от встроенного кварца 8МГц с , делителем на 8

сделал г.код для отладки именно этого момента:
__disable_interrupt();
while(ASSR); //wait 0
TIMSK2=0; // not inerrupt
while(ASSR); //wait 0
ASSR=(0<<AS2);
while(ASSR); //wait 0
TCNT2=5;
while(ASSR); //wait 0
OCR2A=0;
while(ASSR); //wait 0
OCR2B=0;
while(ASSR); //wait 0
TCCR2B=(1<<CS22)|(1<<CS21)|(0<<CS20);//TIMER0_PRECSALER; // ///////////////CLK/256/250 = 15.625 (64ms)
while(ASSR); //wait 0
TCCR2A=0; //ctc
while(ASSR); //wait 0
TIMSK2=(1<<TOIE2); /* TIMER0 ON */
while(ASSR); //wait 0
TIFR2=(0<<TOV2);
while(ASSR); //wait 0


в сон:

while(ASSR);
while ( count_old==count ) {
__enable_interrupt();
SMCR|=(1<<SM1)|(1<<SM0)|(1<<SE);//MCUCR|=(1<<SE);
__sleep();
SMCR&=~(1<<SE);//MCUCR&=~(1<<SE); // Â sleep

Сергей Борщ
А как именно оно не работает? Если надо просто просыпаться, не входя в обработчик прерывания, то перед sleep() надо запретить прерывания.
"Т2 асинхронно" - это с внешним кварцем? Тогда в ASSR надо взвести бит AS2 и проверка while(ASSR) уже будет некорректна. До взведения этого бита можно писать в регистры таймера не дожидаясь снятия статусных битов ASSR.
Запись SMCR |= не самый лучший вариант. SMCR = в этом месте было бы и короче и надежнее.
TIFR2=(0<<TOV2); тоже не имеет смысла - этот флаг сбрасывается записью в него 1.
TCCR2A=0; //ctc - мне кажется тут комментарий не соответствует коду
arttab
не работает - т.е. не заходит в прерывание __interrupt void TIMER0_OVF2_interrupt(void).
в прерывании дергаю вывод и смотрю на осциллографе - интервал остается 64мсек.

"Т2 асинхронно" видимо я не правильно выразился. я имел в виду что перевожу ядро в save mode.

еще по разбираюсь - вроде заработало, но не уверен.

Спасибо!



Сергей Борщ
QUOTE (arttab @ Nov 1 2012, 11:04) *
"Т2 асинхронно" видимо я не правильно выразился. я имел в виду что перевожу ядро в save mode.
А, ну если источник тактирования у таймера и ядра один - то тогда вообще ASSR читать не нужно.
arttab
теперь думаю как проверить что ЦП уходит в save mode
Сергей Борщ
Загнать в цикл sleep() и дерганье ногой? Если уходит - будет дерганье с частотой таймера, если нет - с частотой ядра.
arttab
WD выключил и добавил ногодруганья перед перед и после sleep - дрыгается wink.gif

Спасибо!!!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.