Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Atmel AT91Sam7x512. Неправильная частота прерываний от PIO
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Parkan
Мои приветствия, уважаемые форумчане.
У меня следующая проблема: есть некоторое устройство, которое генерит меандр, период которого равен 3,35 мс. Этот сигнал заводится на контакт PIO PB22. Я вешаю задаю прерывание по фронту сигнала и по возникновению оного выполняю некие действия. Так вот, прерывание возникает, субъективно в два раза чаще, чем нужно. Мерил осциллографом входной сигнал - точно меандр с периодом 3,35мс. Вот код инициализации прерывания:

CODE
static const Pin intPin = { 1 << 22, AT91C_BASE_PIOB, AT91C_ID_PIOB, PIO_INPUT, PIO_DEGLITCH };
volatile static unsigned int interruptCounter = 0;
//------------------------------------------------------------------------------

__ramfunc void InterruptHandler1(const Pin *)
{
//volatile unsigned int dummy = 0;
if (1492 == interruptCounter)
{
interruptCounter = 0;
// ...
}
else
{
++interruptCounter;
}

// AT91C_BASE_AIC->AIC_EOICR = 0;
// AT91C_BASE_PIOB->PIO_ISR;
// AT91C_BASE_AIC->AIC_IECR;
}
//------------------------------------------------------------------------------

void InitControlSchema(void)
{
PIO_Configure(&intPin, 1);
PIO_InitializeInterrupts(AT91C_AIC_PRIOR_HIGHEST | AT91C_AIC_SRCTYPE_POSITIVE_EDGE);
PIO_ConfigureIt(&intPin, InterruptHandler1);
PIO_EnableIt(&intPin);
}
//------------------------------------------------------------------------------


Программированием микроконтроллеров занялся недавно, посему, прошу простить, если формулировка вопроса покажется технически неграмотной, а сам вопрос глупым. Буду благодарен за ответ.
MiklPolikov
Цитата(Parkan @ May 25 2012, 16:09) *
Так вот, прерывание возникает, субъективно в два раза чаще, чем нужно.


Очевидно что прерывание возникает и по переднему фронту, и по заднему. Посмотрите в документации регистр который за это отвечает, и настройте как Вам нужно.
aaarrr
Прерывание от PIO в SAM7 всегда генерируется по любому фронту, настроить иначе нельзя. Можно только в программе проанализировать состояние пина и выбрать нужный.
Parkan
Цитата(aaarrr @ May 25 2012, 20:06) *
Прерывание от PIO в SAM7 всегда генерируется по любому фронту, настроить иначе нельзя. Можно только в программе проанализировать состояние пина и выбрать нужный.

Цитата(MiklPolikov @ May 25 2012, 18:06) *
Очевидно что прерывание возникает и по переднему фронту, и по заднему. Посмотрите в документации регистр который за это отвечает, и настройте как Вам нужно.


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