Цитата(Копейкин @ Aug 23 2012, 12:05)

У меня примера под рукой нет, но когда разбирался, то отложилось в памяти так:
1) Интерфейс Interrupt sender даёт нам линии irq или irq_n, которые работают по уровню, не фронту.
Выбрали, допустим irq - срабатывает на уровень "1".
2) Ставим на линию irq триггер.
3) Триггер взводится в "1" Вашим событием (кнопка, счётчик...)
4) Программа в обработчике прерывания ОБЯЗАТЕЛЬНО должна этот триггер сбросить в "0",
иначе из прерывания не выйти. Сбросить можно чтением или записью по адресу, как Вам удобно.
Вот таким образом.
Есть ещё компонент - векторизируемый контроллер прерываний - он даёт возможностей побогаче,
более предсказуемое время входа в прерывание, но требует существенных ресурсов, для реализации.
С ним не разбирался - так, обзорно...
Спасибо. Понятно. Жаль, что только по уровню.
Вобщем так вроде и реализовал. Только сброс со стороны обработчика не делал.
Попробую со сбросом.
Всеравно не до конца понимаю зачем сбрасывать тригер со стороны программы (тоесть в обработчике).
Почему не проходит номер просто формировать импульс небольшой длительности и все?
Читал мануал и выяснил, что если использовать PIO то можно все реализовать и по фронту. В этом случае используется
регистр PIO который внешним событием можно установить, а в обработчике сбросить типа
CODE
/* Initialize the button_pio. */
static void init_button_pio()
{
/* Recast the edge_capture pointer to match the
alt_irq_register() function prototype. */
void* edge_capture_ptr = (void*) &edge_capture;
/* Enable all 4 button interrupts. */
IOWR_ALTERA_AVALON_PIO_IRQ_MASK(BUTTON_PIO_BASE, 0xf);
/* Reset the edge capture register. */
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE, 0x0);
/* Register the ISR. */
#ifdef ALT_ENHANCED_INTERRUPT_API_PRESENT
alt_ic_isr_register(BUTTON_PIO_IRQ_INTERRUPT_CONTROLLER_ID,
BUTTON_PIO_IRQ,
handle_button_interrupts,
edge_capture_ptr, 0x0);
#else
alt_irq_register( BUTTON_PIO_IRQ,
edge_capture_ptr,
handle_button_interrupts );
#endif
}
Вроде и так можно, но тогда придется из компонента прерывание убрать, добавить 1 бит PIO, вывести наружу импульсы запроса прерывания которые подать извне на PIO (тоесть просто перемычка). Насколько так будет хуже или лучше?