Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не могу разобраться с ISR
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
lons83
Помогите разобраться...два дня сижу ни как не могу понять что не так.

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

Настраиваю прерывания по кнопке.
Настойка PIO:
- Генерейт IRQ по EDGE
- Синхронизация по Спадающему фрону, Enable bit-clearing НЕ УСТАНОВЛЕН.

Текст в NIOS ECLIPSE (web 12.1)

Код
#include <altera_avalon_pio_regs.h>
#include <system.h>
#include <alt_types.h>
#include <sys/alt_irq.h>

unsigned char i;
void init_isr ();
void handle_btn();


void init_isr ()      // инициализация
{

IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_BUT_BASE, 0xff);
IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_BUT_BASE, 0x01);


#ifdef ALT_ENHANCED_INTERRUPT_API_PRESENT
    alt_ic_isr_register(PIO_BUT_IRQ_INTERRUPT_CONTROLLER_ID, PIO_BUT_IRQ, handle_btn, 0, 0x0);
#else
    alt_irq_register( PIO_BUTTON_IRQ, 0, handle_btn);
#endif

}


void handle_btn()
{
i++;

//  при первом заходе зажигание светодиодов и сброс EDGE CApture (чтобы выйти из прерывания)

if (i==1) { IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, 0x03);         IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_BUT_BASE, 0xff);}                
        
//  при втором заходе гашение светодиодов и сброс EDGE CApture (чтобы выйти из прерывания)
                                                              
if (i==2) { i=0; IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, 0x00);  IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_BUT_BASE, 0xff);}

}


int main()
{
    i=0;

    IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, 0x00);

    init_isr();

    while (1);

    return 0;
}



Результат:

Светодиоды зажигаются и гаснут при каждом переключении (то есть как будто стоит срабатывание при любом изменении (ANY))
а в некоторых случаях некоторые переключения просто гинорируются....

Может кто-нибудь подскажет что нет так...
Заранее спасибо))))
cnn2
так это же дребезг кнопки
lons83
Цитата(cnn2 @ Apr 1 2013, 07:42) *
так это же дребезг кнопки


задержку поставил - не помогло... задержка: 1мкс после этого опрос входящий ножки.

такой еще вопрос (просто сам до конца не понял):
функция : alt_ic_isr_register(PIO_BUT_IRQ_INTERRUPT_CONTROLLER_ID, PIO_BUT_IRQ, handle_btn, 0, 0x0);
четвертый параметр у меня - 0.
Это правильно или там другое должно быть?
cnn2
В википендии замечательная фотка есть http://ru.wikipedia.org/wiki/%D0%A4%D0%B0%...itch_bounce.JPG
и статья Дребезг контактов
так вот там 1,2 мс дребезг
а по хорошему нужно не менее 10-15 мс ждать
по поводу параметра не знаю
думаю он ни при чем
lons83
Цитата(cnn2 @ Apr 1 2013, 16:01) *
В википендии замечательная фотка есть http://ru.wikipedia.org/wiki/%D0%A4%D0%B0%...itch_bounce.JPG
и статья Дребезг контактов
так вот там 1,2 мс дребезг
а по хорошему нужно не менее 10-15 мс ждать
по поводу параметра не знаю
думаю он ни при чем


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