Здравствуйте,уважаемые. Никак не получается заставить работать 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 не срабатывает, прерывание не выстреливает.
|