Вы не вошли.
потом переходит по приоритету
Вы путаете понятия "приоритет прерываний" и "последовательность обслуживания прерываний, поступивших одновременно". Если прерывание более приоритетно, оно в состоянии прервать обработчик менее приоритетного прерывания. В AVR такого нет.
Вне форума
2 Liv про приоритеты прерываний попадалось утверждение (последний абзац):
sub.chipdoc.ru/html.cgi/txt/doc/micros/ … htm?fid=41
но вот более подрбно про усторйство interrupt unit не встречал.
Вне форума
Вы путаете понятия "приоритет прерываний" и "последовательность обслуживания прерываний, поступивших одновременно". Если прерывание более приоритетно, оно в состоянии прервать обработчик менее приоритетного прерывания. В AVR такого нет.
тоесть, пока у меня выполняеться прерывание с меньшим приоритетом поступает прерывание более приоритетное прерывание.
но процессор выполняет его до конца, потом переходит к более приоритетному.
но если они поступили одновременно- тогда выполняеться в первую очередь более приоритетное.
так я понимаю?
Вне форума
...Дело в том, что идет управление одним объектом, просто в разных случаях нужны разные задержки..
Почитайте про слово PWM, возможно Вам оно окажется ПОЛЕЗНЕЕ,чем таймер мучать...
.. допустим, что контроллер находится внутри обработчика прерывания, скажем, по INT0 (достаточно длинном). В это время наступает условие преывания, к примеру по перепад...?
За АВР не отвечу. Но возможно. что в них так же, как и в ПИК-ах - нсть ФЛАГИ собітий, вызвавших (разрешенные) прерывания.
В ПИК-е в описанной ситуации получится следующее:
1. закончится обработка прерывания инт0.
1а. перепад выставит ФЛАГ того, что "был перепад".
2. проц выйдет из обработчика ИНТ0 и восстановит (разрешит) прерывания (которые точно также были запрещены, как и у АВР-а, как писал Лив).
3. Ввиду того, что выставлен ФЛАГ "перепад был" проц снова уйдет в прерывание.
А там уже - как прописан Ваш обработчик....
(оффтопик)
Приоритетов прерываний у AVR нет вообще..
у 18-х пиков есть
Почему когда мы нарушаем, нас штрафуют, а когда всё делаем правильно, с нас берут налоги?....
Вне форума
"... The lower the address , the higter the priority level..."
а это что?
Вне форума
Ну вот, загнали в угол Неправильно это называть приоритетами. В AVR нет полноценного контроллера прерываний с поддержкой приоритетов. Это просто порядок обработки прерываний при их ОДНОВРЕМЕННОМ поступлении.
Вот, например у MCS-51 есть приоритеты прерываний. Там так же, как и в AVR, порядок обработки одновременно поступивших прерываний задан адресом вектора, но кроме того, каждому прерыванию при настройке можно задать высокий или низкий приоритет. Прерывание с более высоким приоритетом может прервать обработчик менее приоритетного прерывания, но не может такого же, или с более низким приоритетом.
В AVR все прерывания имеют одинаковый приоритет и не могут прерывать друг друга, так в начале выполнения обработчика любого прерывания бит глобального разрешения прерывания "I" в регистре SREG сбрасывается аппаратно и устанавливается вновь при выполнении команды "reti". Тем не менее, прерывания с низким приоритетом могут быть сделаны "ручками" путём использования команды "sei" в теле обработчика прерывания.
Пусть использование слова "приоритет" останется на совести у Atmel. Вот определение приоритета прерываний из Wikipedia:
"The interrupt priority level (IPL) is a part of the current system interrupt state, which indicates the interrupt requests that will currently be accepted. The IPL may be indicated in hardware by the registers in a Programmable Interrupt Controller, or in software by a bitmask or integer value."
А у AVR, когда идет обработка любого прерывания, даже прерывание с вектором по меньшему адресу обслужено не будет. Это означает, что все прерывания имеют одинаковый приоритет.
Вне форума
Давайте напишу разъяснения поподробнее про ПИК, а в АВР-ах поищите аналогии
INT0F - Флаг (причем, если быть абсолютно точным, то флаг СОБЫТИЯ, а не прерывания). Показывает, что условие ПРОИСХОДИЛО! Устанавливается автоматически. Сбрасывается только програмно (в смысле - сброс его должен присутствовать в програме-обработчике. ВАЖНО- появление флага НЕ ОЗНАЧАЕТ автоматического перехода на адрес проги-обработчика. Переход (или не переход) - определяется следующим битом (ниже).
INT0E - Enable - разрешение ПЕРЕХОДА процессора на адрес (т.н. вектор прерывания) обработчика прерывания. Если переход запрещен, то прошествие события ТОЛЬКО ВЫСТАВЛЯЕТ ФЛАГ, а проц где был. там и трудится. Если разрешено, то проц при ПОЯВЛЕНИИ ФЛАГА сразу же бросает выполнявшуюся программу, и переходит на адрес обработчика прерываний.
INT0P - Priority (приоритет). Как раз ОНО - приоритет прерывания для данного события, определяет две вещи:
а). во-первых адрес, куда поедет проц при возникновении данного события. У ПИК-а ДВА вектора прерываний - для прерываний высокго уровня (адрес - 0Х0008) и для прерываний низкого уровня (адрес 0Х0018). То есть, разделив прерывания по приоритетам, нужно написать два обработчика прерываний.
б). прерыванияотнесенные к числу "высоких" могут прервать обработку преываний, отнесенных к числу "низких....
Почему когда мы нарушаем, нас штрафуют, а когда всё делаем правильно, с нас берут налоги?....
Вне форума
Вобщем, в том то и проблема, -что там в голове у того Programmable Interrupt Controller, вместе с атмелем. Формально то и RESET помещен в "таблицу векторов прерываний" но бит I на него не действует ( я не беру во внимание последние навороты вроде RSTDISBL в фузах или переназначение адресов векторов)
Отредактировано Vasil (22.09.2006 21:56:07)
Вне форума
INT0F - Флаг (причем, если быть абсолютно точным, то флаг СОБЫТИЯ, а не прерывания). Показывает, что условие ПРОИСХОДИЛО! Устанавливается автоматически. Сбрасывается только програмно (в смысле - сброс его должен присутствовать в програме-обработчике. ВАЖНО- появление флага НЕ ОЗНАЧАЕТ автоматического перехода на адрес проги-обработчика. Переход (или не переход) - определяется следующим битом (ниже).
Этот флаг называется флагом запроса прерывания. Установка флага не означает выполнение обработчика, это всего лишь запрос. В AVR эти флаги сбрасываются автоматически при осуществлении перехода на обработчик прерывания.
INT0E - Enable - разрешение ПЕРЕХОДА процессора на адрес (т.н. вектор прерывания) обработчика прерывания. Если переход запрещен, то прошествие события ТОЛЬКО ВЫСТАВЛЯЕТ ФЛАГ, а проц где был. там и трудится. Если разрешено, то проц при ПОЯВЛЕНИИ ФЛАГА сразу же бросает выполнявшуюся программу, и переходит на адрес обработчика прерываний.
В AVR всё аналогично, только существуют биты разрешения отдельных прерываний и еще бит глобального разрешения прерываний. Обработка прерывания может произойти только в том случае, если оба они установлены.
INT0P - Priority (приоритет). Как раз ОНО - приоритет прерывания для данного события, определяет две вещи:
а). во-первых адрес, куда поедет проц при возникновении данного события. У ПИК-а ДВА вектора прерываний - для прерываний высокго уровня (адрес - 0Х0008) и для прерываний низкого уровня (адрес 0Х0018). То есть, разделив прерывания по приоритетам, нужно написать два обработчика прерываний.
б). прерыванияотнесенные к числу "высоких" могут прервать обработку преываний, отнесенных к числу "низких....
Второе говорит о том, что приоритеты прерываний у ПИКа есть. Это хорошо. Но все прерывания свалены в кучу (вернее, в две кучи - на два вектора). Это плохо.
Вне форума
Вобщем, в том то и проблема, -что там в голове у того Programmable Interrupt Controller
Был бы в AVR этот самый контроллер, было бы сложнее. А так всё как грабли.
Вне форума
[ Сгенерировано за 0.058 сек, 7 запросов выполнено - Использовано памяти: 626.11 Кбайт (Пик: 676.48 Кбайт) ]