|
В прерываниях CM0/CM3 в конце нужен ClearPending? |
|
|
|
 |
Ответов
|
Nov 18 2013, 22:38
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(sonycman @ Nov 19 2013, 00:02)  А не проще ли сбрасывать флаг сразу по входу в прерывание? Зачем это делать перед выходом? Если вопрос ко мне по поводу сброса IR регистра, то где сбрасывать решает программист по своим хотелкам. Я решал так чтобы была меньше вероятность повторного залёта в текущее прерывание из-за повторно установившегося флага, который в начале обработчика сбрасывался. Например из-за какого-то очень медленного прерывания, прерывающего текущее, или тоже медленное, вызванное накануне установки флага таймера и по времени занявшее около периода срабатывания таймера. Если внутри обработчика вызываются какие-то относительно долгие алгоритмы (но ессно меньшие периода таймера), то чтобы они два раза подряд не вызывались, когда внутри обработчика снова взвёлся тот же флаг в IR для вызова обработчика. Но учитывая пока мне непонятную логику/схемотехнику NVIC, выбор где ставить сброс IR становится сложнее. Особенно, если эта логика будет хоть немного отличаться в разных ревизиях/процессорах. Правильно ли я понимаю, что NVIC сам сбрасывает запрос/бит в регистре ISPR на выходе текущего прерывания? Или на входе? Upd Перепроверил сброс IR последней командой обработчика. Раньше ошибся из-за (двойной) инверсии светодиода внутри обработчика. Поставил вывод байта в УАРТ и заметил. Оказывается точно так же - прерывание вызывается два раза подряд. Прерывание таймера, настроенное на 1 Гц вызывается дважды с паузами в 1 сек. Учту, что впритык к выходу из обработчика нельзя без нопов или барьера. Спасибо adnega, ни за что бы сам не догадался о причине. А вне обработчика программно его инициировать SetPending-ом корректно? У меня есть такие вещи в CM0, у которого нет регистра STIR. В описании CM3 (LPC134x) об этом регистре есть предложение "The STIR register provides an alternate way for software to generate an interrupt, in addition to using the ISPR registers."
Сообщение отредактировал GetSmart - Nov 19 2013, 07:01
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Nov 19 2013, 09:21
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Цитата(GetSmart @ Nov 19 2013, 02:38)  Если вопрос ко мне по поводу сброса IR регистра, то где сбрасывать решает программист по своим хотелкам. Я решал так чтобы была меньше вероятность повторного залёта в текущее прерывание из-за повторно установившегося флага, который в начале обработчика сбрасывался. Если флаг, сброшенный в начале обработчика, успевает установиться вновь до конца обработки прерывания - то его необходимо обработать второй раз, что будет эффективно сделано механизмом tail-chaining. Для этого даже не потребуется делать каких-то своих проверок в коде. Иначе получите пропуск события и некорректную работу программы. С другой стороны, если обработчик настолько медленный, что не успевает закончить обработку за время между прерываниями - как то криво у вас всё организовано. Цитата Правильно ли я понимаю, что NVIC сам сбрасывает запрос/бит в регистре ISPR на выходе текущего прерывания? Или на входе? Некоторые прерывания сбрасываются автоматически при входе в ISR. Но не все. Читайте мануал на каждый конкретный случай.
|
|
|
|
Сообщений в этой теме
GetSmart В прерываниях CM0/CM3 в конце нужен ClearPending? Nov 15 2013, 07:35 adnega Цитата(GetSmart @ Nov 15 2013, 11:35) Ста... Nov 15 2013, 08:11 GetSmart Цитата(adnega @ Nov 15 2013, 14:11) Вроде... Nov 16 2013, 00:32 Lagman Цитата(adnega @ Nov 15 2013, 12:11) Вроде... Nov 18 2013, 19:06 GetSmart Сравниваю разные исходники из примеров Кейла, Иара... Nov 17 2013, 22:02 ViKo Если прерывание не успело обработаться до прихода ... Nov 18 2013, 08:51 adnega Цитата(ViKo @ Nov 18 2013, 12:51) Если пр... Nov 18 2013, 10:22  GetSmart Цитата(adnega @ Nov 18 2013, 16:22) Но го... Dec 21 2013, 04:42   ViKo Цитата(GetSmart @ Dec 21 2013, 07:42) Не ... Dec 21 2013, 08:13 ViKo Тогда почему об этом не заботятся в библиотечной ф... Nov 18 2013, 11:12 adnega Цитата(ViKo @ Nov 18 2013, 15:12) Тогда п... Nov 18 2013, 11:32 Flexz Цитата(ViKo @ Nov 18 2013, 15:12) Наверно... Nov 18 2013, 11:29 rudy_b Технических тонкостей конкретного проца не знаю, н... Nov 18 2013, 11:36 SII Команды типа DSB к обработке прерываний никакого о... Dec 21 2013, 06:16 GetSmart Цитата(SII @ Dec 21 2013, 12:16) Способ ф... Dec 21 2013, 07:31  SII Цитата(GetSmart @ Dec 21 2013, 11:31) Не ... Dec 21 2013, 08:20   GetSmart Цитата(SII @ Dec 21 2013, 14:20) время пе... Dec 21 2013, 08:45    adnega Цитата(GetSmart @ Dec 21 2013, 12:45) Чте... Dec 21 2013, 09:17   GetSmart Цитата(adnega @ Dec 21 2013, 15:17) Зачем... Dec 21 2013, 09:23    adnega Цитата(GetSmart @ Dec 21 2013, 13:23) Это... Dec 21 2013, 10:42     GetSmart Цитата(adnega @ Dec 21 2013, 16:42) Если ... Dec 21 2013, 10:52      adnega Цитата(GetSmart @ Dec 21 2013, 14:52) Вре... Dec 21 2013, 11:33   GetSmart Цитата(SII @ Dec 21 2013, 14:20) Все обра... Dec 21 2013, 15:00    SII Цитата(GetSmart @ Dec 21 2013, 19:00) Во-... Dec 21 2013, 15:35     GetSmart Цитата(SII @ Dec 21 2013, 21:35) Какие ещ... Dec 21 2013, 18:40 GetSmart В примерах вполне свежих компиляторов ИАР, Кейл на... Dec 22 2014, 14:59 nill Если Вы про NVIC_ClearPendingIRQ(), то это один из... Dec 23 2014, 18:59 ViKo Я тут копался в своем, перечитал тему. Не увидел с... Feb 10 2015, 11:46 jcxz Цитата(ViKo @ Feb 10 2015, 17:46) Я тут к... Feb 12 2015, 02:56  ViKo Цитата(jcxz @ Feb 12 2015, 05:56) Не так.... Feb 12 2015, 05:51
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|