| Микроконтролери и електроника 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 да.
|
|||
| Автор: | Реконструктор [ Вто Окт 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/ |
|