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

 
 
> PCINT для ATtiny2313., Ломаю голову.
kv_addr
сообщение Jan 14 2006, 14:13
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 208
Регистрация: 6-07-04
Из: Полтава
Пользователь №: 279



Имеется некоторое устройство на ATtiny2313. Для обработки данных, получаемых с двух линий порта B (PB0 и PB1), используется прерывание PCINT (Pin-Change Interruption). Происходящие на этих линиях события взаимонезависимы и поэтому возможна ситуация, когда во время обработки прерывания, например, от PB0 произойдет изменение на PB1. Это событие также должно быть обработано и никоим образом не потеряно. Время обработки прерывания от каждой из линий значительно меньше минимального интервала между событиями на этой линии, но события на другой могут попадать во временной интервал обработки прерывания от первой. Вполне допустимо как отложить обработку прерывания от второй до завершения обработки от первой, так и прервать обработку от первой для обработки от второй и потом продолжить обработку от первой, но в конечном счете оба прерывания должны быть обработаны.

Для того, чтобы решить эту задачу, мне не совсем понятно, как можно распорядиться с флагами I в регистре SREG и PCIF в регистре EIFR.

В момент изменения состояния одной из линий взводятся оба флага и происходит обработка прерывания по вектору PCINT по возврату из которой оба флага сбрасываются. Если в это время происходит событие на другой линии, то, по идее, оно будет проигнорировано, поскольку флаг PCIF у них общий.

1. Если в пп обработки прерывания сбросить флаг PCIF, то второй линией он будет снова взведен, но будет сброшен по возврату и отсроченной обработки прерывания не произойдет. Верно ли я понимаю? Можно ли все же реализовать ОТСРОЧЕННУЮ обработку прерывания, возникшего во время прерывания?

2. Если же сбросить оба флага, то, как я понимаю, второе прерывание прервет первое, будет отработано и снова вернется в первое. Вроде-бы так. Но нет ли здесь какого-либо подвоха?

Если можно, проясните ситуацию с этим Pin-Change.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kv_addr
сообщение Jan 15 2006, 19:24
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 208
Регистрация: 6-07-04
Из: Полтава
Пользователь №: 279



Ага, вот ключевой момент! Если PCIF сбрасывается именно тогда, когда начинается обработка прерывания (на что, ясного и внятного указания в атмеловской документации я, к сожалению, не нашел), то все становится по своим местам. Меня беспокоило то, что если при обработке одного прерывания произойдет второе, то оно может быть утеряно. А ситуация с ОДНОВРЕМЕННЫМ прерываним по двум линиям решается, потому как в п/п обработки прерывания идет "разбор полетов", т.е. на какой линии (линиях) состояние изменилось и ни одно изменение не будет пропущено.

TNX за разъяснение.
Go to the top of the page
 
+Quote Post



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

 


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


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