Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AT91SAM7S и внешние прерывания по фронту
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
kumle
Столкнулся с задачей когда одним входом нужно регистрировать начало импульса (полож. фронт) а другим входом конец импульса (отриц фронт).
Решил делать через внешние прерывания.
Знаю что режим такого прерывания задается в регистре AIC_SMR[source] : биты [2:0] задают приоритет прерывания, а биты [6:5] задают режим, например если [6:5]=11 то по положительному перепаду, а если 01 то по отрицательному перепаду. Но мне то нужно одновременно и то и другое, а source (источник) прерывания всего один это AT91C_ID_PIOA то бишь какой бы я вывод не подключил к этому прерыванию, получается для них для всех будет одинаковая настройка режима прерывания (либо только по положительному либо только по отрицательному)?
Может я чего то упустил в изучении? Или многого хочу?
codier
Фронт в AIC это несколько не то.. Вам нужно настраивать PIO контроллер, чтобы ловил прерывания по конкретным ножкам (PIO_PER, PIO_ODR, PIO_IER) , но, к сожалению, PIO в SAM7 ловит оба фронта и настроить иначе вроде как нельзя.

Цитата
27.4.10 Input Change Interrupt
The PIO Controller can be programmed to generate an interrupt when it detects an input change
on an I/O line.
Aurochs
Вход, на котором нужно фиксировать положительный фронт, можно подключить на IRQ0, а вход, на котором нужно фиксировать отрицательный фронт - на IRQ1. Ну, и соответствующим образом программируем контроллер прерываний...
kumle
Цитата(Aurochs @ Jan 16 2011, 20:34) *
Вход, на котором нужно фиксировать положительный фронт, можно подключить на IRQ0, а вход, на котором нужно фиксировать отрицательный фронт - на IRQ1. Ну, и соответствующим образом программируем контроллер прерываний...

Понятно, жаль что на моей отладочной плате на IRQ0 навесили кнопку !

А я правильно понимаю, что к другим (не к IRQ0/IRQ1) входам PIO тоже можно прикрутить прерывание, но источник прерывания будет один и соответственно приоритет и другие настройки (срабатывание по переднему/по заднему фронту) тоже одни и те же для всех входов подключенных к прерыванию ?
aaarrr
Источник будет один от всего блока PIO, и этот источник будет внутренним, настроить его можно только на срабатывание по высокому уровню или положительному фронту.
Эта настройка никоим образом не относится к самим сигналам PIO, прерывание всегда генерируется по любому фронту.
Aurochs
Цитата(kumle @ Jan 17 2011, 10:02) *
Понятно, жаль что на моей отладочной плате на IRQ0 навесили кнопку !

Если не нужно "просыпаться" по нажатию кнопки, то ее как раз и можно просто повесить на GPIO.
В противном случае можно, например, задействовать еще и FIQ.

Цитата(kumle @ Jan 17 2011, 10:02) *
А я правильно понимаю, что к другим (не к IRQ0/IRQ1) входам PIO тоже можно прикрутить прерывание, но источник прерывания будет один и соответственно приоритет и другие настройки (срабатывание по переднему/по заднему фронту) тоже одни и те же для всех входов подключенных к прерыванию ?

Да. Для контроллера прерываний контроллер PIO является одним из множества источников прерываний.
kumle
Цитата(aaarrr @ Jan 17 2011, 11:51) *
Источник будет один от всего блока PIO, и этот источник будет внутренним, настроить его можно только на срабатывание по высокому уровню или положительному фронту.
Эта настройка никоим образом не относится к самим сигналам PIO, прерывание всегда генерируется по любому фронту.


То есть если я правильно понял, то тут некая двойственность при настройке прерываний от входов PIO?
И еще немного непонятно что такое срабатывание по высокому уровню (с фронтами понятно.)
aaarrr
Попробую пояснить. Есть модуль PIO со своим выходом прерывания. Этот выход переходит в активное состояние по любому фронту на разрешенной в качестве источника прерывания ноги PIO. Со стороны AIC модуль PIO ничем не отличается от любого другого подобного (скажем, USART, SPI и т.п.), для него это просто внутренний источник прерывания, который может быть настроен на срабатывание только по высокому уровню или положительному фронту.
Выводы IRQx могут быть подключены непосредственно к AIC, и настроены на вызов прерывания по любому фронту и уровню.
kumle
Ааа, так имеется ввиду фронт выхода прерывания модуля PIO (некий внутренний сигнал от модуля PIO к AIC), а не фронт на выводе PIO.
Теперь прояснилось. Спасибо !!!

aaarrr
Цитата(kumle @ Jan 17 2011, 15:31) *
Ааа, так имеется ввиду фронт выхода прерывания модуля PIO (некий внутренний сигнал от модуля PIO к AIC), а не фронт на выводе PIO.

Совершенно верно. Многие почему-то упускают из вида, что это две большие разницы.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.