реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> AT32UC3A1256 EIC генерит ложные прерывания
khorght
сообщение Jun 3 2014, 15:35
Сообщение #1





Группа: Участник
Сообщений: 11
Регистрация: 8-12-12
Пользователь №: 74 763



Здравствуйте,уважаемые. Никак не получается заставить работать 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 не срабатывает, прерывание не выстреливает.
Go to the top of the page
 
+Quote Post
Zig
сообщение Jun 30 2014, 11:27
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 185
Регистрация: 30-12-04
Пользователь №: 1 761



Попробуй добавить к инициализации
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);

}
}
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th April 2024 - 16:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.01363 секунд с 7
ELECTRONIX ©2004-2016