Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AT32UC3A1256 EIC генерит ложные прерывания
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > AVR32
khorght
Здравствуйте,уважаемые. Никак не получается заставить работать EIC с помощью Atmel ASF. Пытаюсь сделать прерывание по RISING_EDGE, схема подключения пина: пин - выход буфера - SN74LVC8T245 - вход буфера, притянутый к земле через 100кОм. Как только подаю на вход 3Вольта генерится не одно прерывание по переднему фронту а очень много прерываний, от 6 до 20 штук, проверил осциллографом, чистый сигнал, дёрганий не видно, конденсаторы повешены между всему парами питание-земля.Пытался подвесить на вход буфера кондер, ничего не изменилось. Код вот такой:

// Enable edge-triggered interrupt.
eic_options.eic_mode = EIC_MODE_EDGE_TRIGGERED;
// Interrupt will trigger on falling edge.
eic_options.eic_edge = EIC_EDGE_RISING_EDGE;
// Initialize in synchronous mode : interrupt is synchronized to the clock
eic_options.eic_async = EIC_ASYNCH_MODE; //EIC_ASYNCH_MODE;
// Set the interrupt line number.
eic_options.eic_line = EXT_INT0;
// Map the interrupt lines to the GPIO pin with the right peripheral functions.
gpio_enable_module_pin(AVR32_EIC_EXTINT_0_PIN, AVR32_EIC_EXTINT_0_FUNCTION);
// Disable all interrupts.
Disable_global_interrupt();
// Register the EIC interrupt handler to the interrupt controller.
INTC_register_interrupt(&eic_int_handler, D0_IRQ, AVR32_INTC_INT0);
// Init the EIC controller with the options
eic_init(&AVR32_EIC, &eic_options, 1);
// Enable the chosen lines and their corresponding interrupt feature.
eic_enable_line(&AVR32_EIC, eic_options.eic_line);
eic_enable_interrupt_line(&AVR32_EIC, eic_options.eic_line);
// Enable all interrupts.
Enable_global_interrupt();


#if __GNUC__
__attribute__((__interrupt__))
#elif __ICCAVR32__
__interrupt
#endif
static void eic_int_handler(void)
{
...
eic_clear_interrupt_line(&AVR32_EIC, eic_options.eic_line);
}

Менял на другие ноги и прерывания ( мало-ли) - результат тот же. Пробовал снять подтяжку и поймать прерывание по заднему фронту, опять то же самое.
Подскажите, пожалуйста в чем может быть проблема. Спасибо

PS.Попытка заменить на GPIO INTC, увы невозможна, использую USB, а он при попытке инициализации через INTC_init_interrupts, наглухо убивает USB. А вызов этой функции перед инициализацией USB не срабатывает, прерывание не выстреливает.
Zig
Попробуй добавить к инициализации
eic_options.eic_filter = EIC_FILTER_DISABLED;

А в прерывании
static void eic_int_handler(void)
{
...
if ((eic_is_interrupt_line_enabled(&AVR32_EIC, eic_options.eic_line)
&& (eic_is_interrupt_line_pending(&AVR32_EIC, eic_options.eic_line))) {
eic_disable_interrupt_line(&AVR32_EIC, eic_options.eic_line);
eic_clear_interrupt_line(&AVR32_EIC, eic_options.eic_line);
...
eic_enable_interrupt_line(&AVR32_EIC, eic_options.eic_line);

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