Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

ATmega 128 & Timers
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=1149
Страница 1 от 1

Автор:  smollov [ Вто Окт 25, 2005 11:56 am ]
Заглавие:  ATmega 128 & Timers

Искам да попитам трябва ли преди да се зареди нова стойност в некой от таймерите на ATmega 128 в синхронен режим на работа да се забранява и разрешава след това глобалното прекъсване.

inline void Timer1_Set (u_int Value)
{
cli(); // забранява глобалното прекъсване
TCNT1 = Value;
TIMSK |= _BV(TOIE1); //Прекъсване при препълване
gT1Overflow = 0x00;
sei(); // разрешава глобално прекъсванията
}
В този примерен код необходими ли са cli() и sei() ??????????

Автор:  TheHungry [ Вто Окт 25, 2005 2:18 pm ]
Заглавие: 

Според Atmel да.

Прикачени файлове:
timer.JPG
timer.JPG [ 41.35 KiB | Прегледано 1872 пъти ]

Автор:  Реконструктор [ Вто Окт 25, 2005 3:12 pm ]
Заглавие: 

По принцип, чисто технически - не. Ако обаче тоя таймер предизвиква някви действия, или пък от много прекъсвания може да бъде установен, ти трябва синхроннизация, а тя се постига cli.

Автор:  TheHungry [ Вто Окт 25, 2005 6:31 pm ]
Заглавие: 

За по сигурно "CLI" иначе има да се чуди човек от къде се пръкват разни проблеми.

Автор:  Топ [ Пет Окт 28, 2005 4:07 pm ]
Заглавие:  Timers

Ако е таймер 1 или 3, 100% да. Изобщо при достъп да периферията, за четене или запис, 16-битовите данни се четат или пишат в поредни инструкции при забрана на прекъсванията. При операциите участва и един междинен регистър, целта на който е по 8-битовата шина да се прочете/запише 16 битова стойност в един и същи машинен цикъл. Ако между четенето/записа на двата байта на 16-битивата стойност настъпи прекъсване, бозата става пълна.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/