Например TDA7294

Форум РадиоКот • Просмотр темы - CodeVision AVR в вопросах и ответах
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пн июл 28, 2025 01:48:05

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 8295 ]     ... , , , 77, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вт июн 08, 2010 15:07:56 
Сверлит текстолит когтями
Аватар пользователя

Карма: 1
Рейтинг сообщений: 4
Зарегистрирован: Чт окт 15, 2009 14:16:18
Сообщений: 1116
Откуда: Екб
Рейтинг сообщения: 0
потеряно


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вт июн 08, 2010 15:37:51 
Потрогал лапой паяльник

Зарегистрирован: Сб дек 12, 2009 02:15:45
Сообщений: 392
Рейтинг сообщения: 0
спасибо, понятно.
тогда такой вопрос, если запрещать и разрешать прерывание прямо в обработчике прерывания, можно ли??
Код:
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
какой то мой код
#asm("cli")
какой то мой код
#asm("sei")
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вт июн 08, 2010 15:53:53 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Сб сен 06, 2008 12:56:13
Сообщений: 326
Рейтинг сообщения: 0
neon-f писал(а):
подскажите, если запрещаешь прерывания
Код:
#asm("cli")
в это время произходит прерывание, потом разрешаешь прерывание
Код:
#asm("sei")
- это прерывание потеряно? или после разрешения прерываний оно обработается?
Если флаг общего разрешения прерываний "I" в регистре SREG сброшен - команда #asm("cli"), то, если после этого возникают условия отдельных прерываний, устанавливаются их флаги. После общего разрешения прерываний, они обрабатываются в порядке приоритета.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вт июн 08, 2010 16:16:18 
Потрогал лапой паяльник

Зарегистрирован: Сб дек 12, 2009 02:15:45
Сообщений: 392
Рейтинг сообщения: 0
ValBag
так все таки не потеряю прерывание???
:dont_know:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вт июн 08, 2010 16:27:53 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Сб сен 06, 2008 12:56:13
Сообщений: 326
Рейтинг сообщения: 0
neon-f писал(а):
ValBag
так все таки не потеряю прерывание???
Если оно было разрешено и имеет флаг, то не потеряется.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вт июн 08, 2010 16:51:42 
Мучитель микросхем
Аватар пользователя

Карма: -5
Рейтинг сообщений: 0
Зарегистрирован: Пт май 29, 2009 10:14:29
Сообщений: 402
Рейтинг сообщения: 0
ValBag писал(а):
neon-f писал(а):
подскажите, если запрещаешь прерывания
Код:
#asm("cli")
в это время произходит прерывание, потом разрешаешь прерывание
Код:
#asm("sei")
- это прерывание потеряно? или после разрешения прерываний оно обработается?
Если флаг общего разрешения прерываний "I" в регистре SREG сброшен - команда #asm("cli"), то, если после этого возникают условия отдельных прерываний, устанавливаются их флаги. После общего разрешения прерываний, они обрабатываются в порядке приоритета.


Ничего не догнал. У кого нибудь примерчик будет , что бы можно было пощупать?


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вт июн 08, 2010 17:10:28 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Сб сен 06, 2008 12:56:13
Сообщений: 326
Рейтинг сообщения: 0
nsl2004 писал(а):
Ничего не догнал. У кого нибудь примерчик будет , что бы можно было пощупать?
Можно словесно. Допустим, у вас есть разрешение на прерывание по переполнению таймера0. Теперь вы запрещаете глобально все прерывания (cli). Таймер продолжает работать, разрешение на прерывание по его переполнению есть, выставляются флаги запроса прерывания. Но глобальное условие запрещает все прерывания. Флаг запроса таймера не "пропадает" и при общем разрешении прерываний (sei), он обработается. Но есть один момент. Если в период "перерыва" в прерываниях возникло несколько запросов от таймера, то выполнится только последнее.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вт июн 08, 2010 17:20:53 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18403
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
ValBag писал(а):
Но есть один момент. Если в период "перерыва" в прерываниях возникло несколько запросов от таймера, то выполнится только последнее.
правильнее сказать - обработается только один-единственный запрос, т.е. возникнет только одно прерывание.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вт июн 08, 2010 17:27:47 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Сб сен 06, 2008 12:56:13
Сообщений: 326
Рейтинг сообщения: 0
ARV писал(а):
правильнее сказать - обработается только один-единственный запрос, т.е. возникнет только одно прерывание.
Можно и так сказать. Но часть прерываний, если они были, потеряются.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вт июн 08, 2010 17:40:36 
Потрогал лапой паяльник

Зарегистрирован: Сб дек 12, 2009 02:15:45
Сообщений: 392
Рейтинг сообщения: 0
а если такой варианнт. во время #asm("cli") - #asm("sei") происходит два разных события, например переполнение Т0 и Т2, значит подымется 2 разных флага и после #asm("sei") обработаются оба события ???


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вт июн 08, 2010 17:44:39 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Сб сен 06, 2008 12:56:13
Сообщений: 326
Рейтинг сообщения: 0
neon-f писал(а):
а если такой варианнт. во время #asm("cli") - #asm("sei") происходит два разных события, например переполнение Т0 и Т2, значит подымется 2 разных флага и после #asm("sei") обработаются оба события ???
Да, с учетом сказанного выше и в порядке приоритета.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вт июн 08, 2010 17:58:44 
Мучитель микросхем
Аватар пользователя

Карма: -5
Рейтинг сообщений: 0
Зарегистрирован: Пт май 29, 2009 10:14:29
Сообщений: 402
Рейтинг сообщения: 0
2ValBag
Спасибо. Несколько понятнее стало. Надо что то скропать поигратся и посмотреть.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вт июн 08, 2010 21:56:02 
Мучитель микросхем

Зарегистрирован: Вс июн 01, 2008 12:16:38
Сообщений: 459
Рейтинг сообщения: 0
Небольшое дополнение - есть все-таки флаги которые могут потеряться, их немного но все-же. Например внешнее прерывание по низкому уровню на выводе - флаг устанавливается только на время действия низкого уровня, естественно если низкий уровень произошел между командами cli и sei. Естественно если команды идут подряд, то это очень короткий промежуток и вероятность пропуска прерываний мала, но если между командами есть еще и другие - т.е время между командами не очень мало, то есть вероятность пропустить короткий импульс.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Ср июн 09, 2010 12:11:48 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Сб сен 06, 2008 12:56:13
Сообщений: 326
Рейтинг сообщения: 0
Да, такая вероятность есть. Только флаг там не устанавливается. Прерывание действует все время, пока присутствует условие, в данном случае - низкий уровень, а флаг сброшен постоянно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Ср июн 09, 2010 12:41:01 
Потрогал лапой паяльник

Зарегистрирован: Сб дек 12, 2009 02:15:45
Сообщений: 392
Рейтинг сообщения: 0
ну с этим вопросом все понятно
теперь такой вопрос
я в прерывании подымаю "флаг" , потом в теле проверяю поднят ли, и если да, то делаю какое-то действие, а флаг сбрасываю. в качестве флага у меня обычная переменная. а как можно обойтись без переменной? где то читал что можно использовать регистры, которые сами сбрасываются после использования, но где не найду.
вот как это сейчас делаю я:
Код:
bit  flag=0;
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
flag=1;
}
....................
if (flag==1)  {flag=0;  какой то мой код ;}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Ср июн 09, 2010 13:33:12 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Сб сен 06, 2008 12:56:13
Сообщений: 326
Рейтинг сообщения: 0
Я тоже пользуюсь таким приемом, чтобы совершить какие-то действия после возврата из прерывания. Другие пока не знаю. Переменная то, битовая, в чем проблема.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Ср июн 09, 2010 20:15:21 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18403
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
прерывание для того и существует, чтобы немедленно отреагировать на какое-то событие. только в очень редких случаях можно согласиться с тем, что событие фиксируется мгновенно, а обрабатывается затем когда-нибудь, например, при фиксации игольчатых импульсов. в других случаях надо трижды подумать, оправдан ли такой подход. можео сделать обработку события в самом обработчике прерываний, или наоборот, обойтись вообще без прерываний - методом опроса.
вот смотрите: вы ставите флаг в обработчике - зачем? если запретить обработку прерывания по переполнению таймера, то не потребуется и переменная-флаг: в регистре TIFR и так при переполнении таймера установится соответствующий бит-флаг! вам остается только иной раз проверять - стоит флаг или нет. а сбросить его можно записью единички. вот и выходит, что в вашем случае нет нужды тратить память на обработчик прерывания и битовую переменную...

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Ср июн 09, 2010 20:48:43 
Потрогал лапой паяльник

Зарегистрирован: Сб дек 12, 2009 02:15:45
Сообщений: 392
Рейтинг сообщения: 0
на самом деле вот как это выглядит
Код:
bit  flag=0;
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{ какой то код связанный с динамической индикацией }
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
какой то код2
flag=1;
}
....................
if (flag==1)  {flag=0;  чтение ds18b20 ;}

для чтения ds18b20 использую модифицированную библиотеку, которая запрещает прерывания на время общения по 1 Wire. так вот если чтение ds18b20 делать внутри прерывания, то останавливается динамическая индикация. а если читать ds18b20 вообще без прерываний, то получается постоянное чтениедатчика, что во первых вредно точности измерения, и самое главное контроллеру некогда опрашивать кнопки. если добавить задержку delay, то до кнопок вообще дело не доходит. Вот такое кино.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Ср июн 09, 2010 21:03:37 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18403
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
в том случае, если флаг сигнализирует о том, что надо что-то сделать действительно "редкое", ваш подход оправдан. более того, долгие процедуры (а работу с датчиком быстрой не назовешь) недопустимо делать в прерывании. однако, помимо всего прочего, вам бы надо модифицировать свою функцию работы с датчиком так, чтобы прерывания запрещались только на время тайм-слота, т.е. примерно 15-20 микросекунд, а не на весь процесс обмена (порядка нескольких миллисекунд) - тогда никакого влияния на динамическую индикацию и что-либо еще работа с датчиком не окажет (20 микросекунд слишком мало, чтобы быть заметным человеку)

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Ср июн 09, 2010 21:22:08 
Потрогал лапой паяльник

Зарегистрирован: Сб дек 12, 2009 02:15:45
Сообщений: 392
Рейтинг сообщения: 0
так у меня и запрещается только на время тайм-слота, поэтому динамическая индикация и не прерывается. а вот если чтение датчика делать внутри одного из прерываний, то уже не важно как и на сколько запрещать, и запрещать ли вообще, т.к. пока не обработается одно, второе все равно не наступит.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 8295 ]     ... , , , 77, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y