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

 
 
> Хочется программно инициировать прерывание, Но не INT0/INT1, как бы погламурнее
Rst7
сообщение May 20 2008, 11:52
Сообщение #1


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Тут задача возникла следующего характера. Как бы инициировать прерывание программным путем?

Самый простой способ - использовать INT0, например, и сконфигурировать прерывание по изменению состояния ноги (нога на вывод), в результате - достаточно шевельнуть ножкой (изменив ее, скажем OUT'ом в PINx) и флаг прерывания установится; соответственно, когда будет разрешено прерывание INT0 - оно и произойдет. Но, к сожалению, INT0 и INT1 заняты, надо изобретать что-то другое.

Вот мысль появилась использовать прерывание от компаратора, причем следующим образом:

Компаратор штатно выключен (он не нужен в проекте), для установки флага прерывания от него использовать последовательность
Код
ACSR=(1<<ACD)|(1<<ACIS1)|(1<<ACIS0); //Comparator Interrupt on Rising Output Edge.
ACSR=(1<<ACD)|(1<<ACIS1); //Comparator Interrupt on Falling Output Edge.


Т.е. переключить туда-сюда "по фронту/по спаду". На идею натолкнула фраза
Цитата
When changing the ACIS1/ACIS0 bits, the Analog Comparator Interrupt must be disabled by clearing its Interrupt Enable bit in the ACSR Register. Otherwise an interrupt can occur when the bits are changed.

в даташите.

К сожалению, сейчас негде попробовать этот чит. Посему пара вопросов:

1. Может кто делал такое и уже знает результат?
2. Может у кого есть под рукой макеточка, проверить бы?
3. А может кто гламурнее способ знает?


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SasaVitebsk
сообщение May 20 2008, 15:11
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



2 GM - ты немного задачу не осознал. smile.gif

Например я делаю 100 прерываний от таймера, а вот после сотого мне надо выполнить хороший кусок работы. За это время придёт 4 прерывания от таймера. Короче надо в прерывании от таймера, по какому-то событию вызвать другое прерывание. Прямой вызов - не проходит, надо чтобы из того вернулась и вошла в новое.

smile.gif Короче не умею я объяснять. smile.gif Пусть кто другой попробует.
Go to the top of the page
 
+Quote Post
defunct
сообщение May 20 2008, 15:16
Сообщение #3


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(SasaVitebsk @ May 20 2008, 18:11) *
Например я делаю 100 прерываний от таймера, а вот после сотого мне надо выполнить хороший кусок работы. За это время придёт 4 прерывания от таймера.

Не, такой пример не пойдет, разобъют сразу тупым и в тоже время справедливым вопросом - почему бы не выполнить хороший кусок работы в основном цикле программы. smile.gif
Go to the top of the page
 
+Quote Post
galjoen
сообщение May 20 2008, 15:51
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(defunct @ May 20 2008, 19:16) *
Не, такой пример не пойдет, разобъют сразу тупым и в тоже время справедливым вопросом - почему бы не выполнить хороший кусок работы в основном цикле программы. smile.gif

Не. В основном цикле не пойдёт. Вдруг там уже что-то выполняется, тогда туда и вернёмся. Кроме того написано, что нужно быстро - каждый такт на счету. Т.е. видимо нужно сделать что-то более приоритетное чем основной цикл, но менее приоритетное, чем прерывания (некоторые). Например рассчёт CRC блока, который в флешку записать надо. В таких случаях приходится и с возможностью рекурсии бороться, и со стеком колдовать, и смотреть кого это мы прервали то. Только на асме такое делается (я делал). А тут видимо на C, используя прерывания, такое же хотят сделать.
Go to the top of the page
 
+Quote Post
defunct
сообщение May 20 2008, 20:56
Сообщение #5


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(galjoen @ May 20 2008, 18:51) *
Не. В основном цикле не пойдёт. Вдруг там уже что-то выполняется, тогда туда и вернёмся. Кроме того написано, что нужно быстро - каждый такт на счету.

Смотря как построен основной цикл.
У меня в основном цикле выполняется диспетчер задач, точнее даже диспетчер функций-обработчиков событий. Т.к. задачи выполняются бесконечно, а функции - конечно и быстро. Функции делятся по приоритетам. Приоритет драйверов периферии (диспетчер крутит их постоянно) и пользовательские приоритеты. Работает все это как часы. Никаких проблем с сохранением контекстов, никаких накладных расходов на отдельные стеки задач.
В прерываниях устаналивается готовность соотв. функций. В основном цикле - производится запуск обработчика события.
Насчет каждый такт на счету - не верю, не может каждый такт быть на счету для чего-то настолько длительного, что ест аж 4 периода таймера и в то же время настолько редкого, что происходит раз в 100 периодов таймера. Нестукуется с таким событием понятие каждый такт на счету.
Go to the top of the page
 
+Quote Post
singlskv
сообщение May 20 2008, 21:16
Сообщение #6


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(defunct @ May 21 2008, 00:56) *
Насчет каждый такт на счету - не верю, не может каждый такт быть на счету для чего-то настолько длительного, что ест аж 4 периода таймера и в то же время настолько редкого, что происходит раз в 100 периодов таймера. Нестукуется с таким событием понятие каждый такт на счету.
Ну и почему же это не стыкуется ?
допустим хочу:
- передачу по SPI на максимальной скорости(кб этак 250-500 в сек) но при этом чтобы
джиттер был минимален и предсказуем
- опрос кнопок(типа процесс в 100 раз более медленный)
- запись в EEPROM когда надо(тоже не быстро).
- итд итп

ну и кто мешает это все совместить ?


Цитата(ReAl @ May 21 2008, 01:03) *
Кстати, я очень обижен на атмел в том, что битики force output compare у таймеров не вызывают соответствующее прерывание output compare :-(
А Вы ими пробовали вобще пользоваться ? (битиками)
я нет, поэтому и интересно...
но кстати таймером тож можно чего-нить такое намутить, тока топикстартер не сознается какие
узлы кроме комаратора у него еще не задействованны...
Go to the top of the page
 
+Quote Post
defunct
сообщение May 20 2008, 21:19
Сообщение #7


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(singlskv @ May 21 2008, 00:11) *
Ну и почему же это не стыкуется ?

Несктыкуется это событие (длиной в 4 периода таймера) с надобностью обработки в прерывании.

Цитата
допустим хочу:
- передачу по SPI на максимальной скорости(кб этак 250-500 в сек) но при этом чтобы
джиттер был минимален и предсказуем
- опрос кнопок(типа процесс в 100 раз более медленный)
- запись в EEPROM когда надо(тоже не быстро).
- итд итп

ну и кто мешает это все совместить ?

Ничто и не помешает все это совместить если обработку события длиной в 4 периода таймера кинуть в основной цикл.
Go to the top of the page
 
+Quote Post
galjoen
сообщение May 20 2008, 21:59
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(defunct @ May 21 2008, 01:19) *
Несктыкуется это событие (длиной в 4 периода таймера) с надобностью обработки в прерывании.

Тут прерывание ТОЛЬКО для того, чтоб приоритет этого события поднять, а основной цикл отдать кому то другому (на, делай в нём что хочешь, всё равно мне не навредишь).
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Rst7   Хочется программно инициировать прерывание   May 20 2008, 11:52
- - prottoss   Цитата(Rst7 @ May 20 2008, 19:52) Тут зад...   May 20 2008, 11:58
- - VladimirYU   Цитата(Rst7 @ May 20 2008, 15:52) Тут зад...   May 20 2008, 11:58
- - prottoss   Цитата(Rst7 @ May 20 2008, 19:52) ,Вот мы...   May 20 2008, 12:01
|- - ReAl   Цитата(prottoss @ May 20 2008, 15:01) Как...   May 20 2008, 20:31
- - Rst7   ЦитатаА почему хочется именно пограммное прерывани...   May 20 2008, 12:12
- - sKWO   Цитата(Rst7 @ May 20 2008, 14:52) Тут зад...   May 20 2008, 12:16
- - galjoen   Цитата(Rst7 @ May 20 2008, 15:52) Тут зад...   May 20 2008, 12:25
- - Rst7   Цитатаа оно возникает когда пустой регистр данных ...   May 20 2008, 12:34
|- - Палыч   Не понятно, чем Вам не угодило прерывание от EEPRO...   May 20 2008, 13:01
|- - galjoen   Цитата(Rst7 @ May 20 2008, 16:34) Мне не ...   May 20 2008, 13:39
||- - Палыч   Цитата(galjoen @ May 20 2008, 16:39) Чтоб...   May 20 2008, 14:14
|- - prottoss   Цитата(Rst7 @ May 20 2008, 20:34) Мне не ...   May 20 2008, 13:53
- - Палыч   Цитата(Rst7 @ May 20 2008, 14:52) Тут зад...   May 20 2008, 12:44
- - Rst7   ЦитатаКак раз от компаратора в scmRTOS и использую...   May 20 2008, 12:52
|- - singlskv   Цитата(Rst7 @ May 20 2008, 16:52) Только ...   May 20 2008, 13:01
|- - &-rey   Цитата(Rst7 @ May 20 2008, 15:52) Ага, пр...   May 20 2008, 13:01
|- - defunct   Цитата(Rst7 @ May 20 2008, 15:52) Все не ...   May 20 2008, 15:03
- - Rst7   ЦитатаЕсли, память не используете, Использую. Кро...   May 20 2008, 13:03
|- - Палыч   Цитата(Rst7 @ May 20 2008, 16:03) Мне нуж...   May 20 2008, 13:09
- - Rst7   ЦитатаРазрешили прерывание - получили прерывание. ...   May 20 2008, 13:15
|- - &-rey   так и не понял, нога которая ICP используется ?   May 20 2008, 13:16
- - Rst7   ЦитатаICP используется ? Занята. Да и дрыгать нож...   May 20 2008, 13:24
- - ILYAUL   Цитата(Rst7 @ May 20 2008, 15:52) Тут зад...   May 20 2008, 13:31
- - Rst7   ЦитатаТак вроде с готовностью EEPROM всё хорошо по...   May 20 2008, 13:49
|- - galjoen   Цитата(Rst7 @ May 20 2008, 17:49) К сожал...   May 20 2008, 14:16
|- - defunct   Цитата(Rst7 @ May 20 2008, 16:49) Сбрасыв...   May 20 2008, 15:11
- - =GM=   Цитата(Rst7 @ May 20 2008, 10:52) Тут зад...   May 20 2008, 14:59
- - SasaVitebsk   Я использую от таймера. У меня мега640 - там этих ...   May 20 2008, 15:05
||- - Палыч   Цитата(galjoen @ May 20 2008, 18:51) Т.е....   May 20 2008, 16:08
|||- - galjoen   Цитата(Палыч @ May 20 2008, 20:08) Приори...   May 20 2008, 16:52
||- - singlskv   Цитата(defunct @ May 21 2008, 01:19) Неск...   May 20 2008, 21:35
|||- - defunct   Цитата(singlskv @ May 21 2008, 00:35) Те ...   May 20 2008, 23:30
|||- - Dog Pawlowa   Цитата(defunct @ May 21 2008, 02:30) Ну т...   May 21 2008, 05:44
|- - Палыч   Цитата(SasaVitebsk @ May 20 2008, 18:11) ...   May 20 2008, 15:19
|- - SasaVitebsk   Цитата(Палыч @ May 20 2008, 18:19) Почему...   May 20 2008, 15:35
|- - Палыч   Цитата(SasaVitebsk @ May 20 2008, 18:35) ...   May 20 2008, 15:41
- - _Pasha   Привет, телепаты 1. Какая у Вас мега в проекте? ...   May 20 2008, 16:04
- - SasaVitebsk   Вот уж не знаю как вам объяснить. Ещё раз...   May 20 2008, 16:12
|- - Палыч   Цитата(SasaVitebsk @ May 20 2008, 19:12) ...   May 20 2008, 16:34
- - Rst7   Давайте я попробую все-таки подробностей добавить....   May 20 2008, 16:29
|- - singlskv   Не знаю точно поможет ли это Вам в конкретной зада...   May 20 2008, 18:19
- - singlskv   Если свободен пин nSS(SPI SlaveSelect) я бы еще по...   May 20 2008, 20:50
- - ReAl   Кстати, я очень обижен на атмел в том, что битики ...   May 20 2008, 21:03
- - Дон Амброзио   У меня для "быстрых" потоков, которые до...   May 21 2008, 05:13
- - Rst7   Ну вообщем, проверил на железе - не приводит к уст...   May 21 2008, 05:48
|- - galjoen   Цитата(Rst7 @ May 21 2008, 09:48) Код#pra...   May 21 2008, 06:58
|- - sKWO   Цитата(Rst7 @ May 21 2008, 08:48) В принц...   May 21 2008, 08:21
- - SasaVitebsk   В принципе предложений накидали. Обсуждать подх...   May 21 2008, 07:15
|- - Dog Pawlowa   Цитата(SasaVitebsk @ May 21 2008, 10:15) ...   May 21 2008, 07:23
- - Rst7   ЦитатаЗато прерывания от таймера вообще возникать ...   May 21 2008, 07:37
|- - galjoen   М.б. конечно я уже надоел своим занудством, но... ...   May 21 2008, 09:30
- - Rst7   ЦитатаМне вот это всё не нравится (некрасивым каже...   May 21 2008, 09:38


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 01:44
Рейтинг@Mail.ru


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