Мои приветствия, уважаемые форумчане.
У меня следующая проблема: есть некоторое устройство, которое генерит меандр, период которого равен 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);
}
//------------------------------------------------------------------------------
Программированием микроконтроллеров занялся недавно, посему, прошу простить, если формулировка вопроса покажется технически неграмотной, а сам вопрос глупым. Буду благодарен за ответ.
Сообщение отредактировал Parkan - May 25 2012, 13:11