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

 
 
> Как грамотно управлять прерываниями?, Приложение - работа с очередью
Master
сообщение Jun 5 2006, 14:07
Сообщение #1


Частый гость
**

Группа: Новичок
Сообщений: 170
Регистрация: 26-05-05
Из: Москва
Пользователь №: 5 405



Доброго времени суток!

Есть очередь байт, к которой имеют доступ функции записи и чтения. Причём если эта очередь передатчика, то чтение выполняется из прерывания, а если очередь приёмника, то, соответственно, из прерывания выполняется запись.
Так вот вопрос: как грамотно запретить прерывания устройства (например DBGU), чтобы после разрешения прерываний выполнились те из них, которые за время запрещения-разрешения выставили соответствующие биты в регистре статуса устройства?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Andy Mozzhevilov
сообщение Jun 6 2006, 03:41
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206



Цитата(Master @ Jun 5 2006, 20:07) *
Доброго времени суток!

Есть очередь байт, к которой имеют доступ функции записи и чтения. Причём если эта очередь передатчика, то чтение выполняется из прерывания, а если очередь приёмника, то, соответственно, из прерывания выполняется запись.
Так вот вопрос: как грамотно запретить прерывания устройства (например DBGU), чтобы после разрешения прерываний выполнились те из них, которые за время запрещения-разрешения выставили соответствующие биты в регистре статуса устройства?


Может не понял вопроса, но по моему просто запретить, а потом разрешить. Можно запрещать прерывания глобально, либо только конкретное прерывание в контроллере прерываний.
После разрешения прерывания оно активируется, если соответсвующий флаг наличия прерывания
в регистре периферии будет установлен.
Или поясните, почему эта схема не работает, по вашему мнению?


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
Master
сообщение Jun 6 2006, 08:45
Сообщение #3


Частый гость
**

Группа: Новичок
Сообщений: 170
Регистрация: 26-05-05
Из: Москва
Пользователь №: 5 405



Цитата(Andy Mozzhevilov @ Jun 6 2006, 06:41) *
Может не понял вопроса, но по моему просто запретить, а потом разрешить. Можно запрещать прерывания глобально, либо только конкретное прерывание в контроллере прерываний.
После разрешения прерывания оно активируется, если соответсвующий флаг наличия прерывания
в регистре периферии будет установлен.
Или поясните, почему эта схема не работает, по вашему мнению?

C удовольствием! Бьюсь уже... счёт дням потерял.
Глобальное запрещение не пройдёт - в проекте крутятся ещё помимо DBGU и USART устройства на SPI, Timers, RTT. А впоследствии будут "прикручены" PDC, PIT, USB и ADC.
Конкретное прерывание запрещать пробовал и в AIC, и непосредственно в DBGU, но байты по прежнему теряются, из чего я делаю вывод, что после их обратного разрешения, прерывания по установившимся флагам не срабатывают. В документации на AT91SAM7S соответствующего пункта я не нашёл sad.gif Например в документации по AVR сказано, что
Цитата
Writing this bit to one enables interrupt on the RXC Flag. A USART Receive Complete interrupt will be generated only if the RXCIE bit is written to one, the Global Interrupt
Flag in SREG is written to one and the RXC bit in UCSRA is set.
Тоесть при совпадении всех трёх событий вырабатывается прерывание. Хоть явно и не описано, что при срабатывании последнего неслучившегося из трёх события генерится прерывание, так происходит на самом деле - проверено, и очередь работает как говорится без сучка, без задоринки.
Здесь же какая-то засада, и как именно нужно запрещать-разрешать прерывания, остаётся неясно.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 27th July 2025 - 03:20
Рейтинг@Mail.ru


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