Jetrano 0 21 января Опубликовано 21 января (изменено) · Жалоба Приветствую! Выполнил настройку прерывания Parallel I/O в QSYS. Создал простой обработчик прерывания в котором включается и через 200 миллисекунд отключается светодиод, снимается interrupt flag. Загрузил программу. При нажатии на кнопку происходит прерывание. Если нажать и держать кнопку более 200 миллисекунд, а затем отпустить кнопку, то вновь происходит прерывание. Почему так? Разве указанные настройки прерывания Parallel I/O не говорят о том, что прерывание должно происходить ТОЛЬКО при условии FALLING EDGE ? //-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- void KBD_IRQ_func(void* context, alt_u32 id) { printf("Hello from KBD_IRQ_func !!!\n"); IOWR(LED_RED_BASE,0,1); usleep(200000); IOWR(LED_RED_BASE,0,0); // clear interrupt flag IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KBD_PULSE_BASE,0); printf("//-----------------------//\r\n"); return; } //-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- int main() { int error; printf("Hello from Nios II!\r\n"); // enable interrupt, 1-keybutton IOWR_ALTERA_AVALON_PIO_IRQ_MASK(KBD_PULSE_BASE, 0xF); // clear capture flag IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KBD_PULSE_BASE, 0); error = alt_irq_register(KBD_PULSE_IRQ, NULL, (void *) KBD_IRQ_func); if (error) printf("Failed to register interrut\r\n"); while (1) { } return 0; } //-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Изменено 21 января пользователем Jetrano Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 3 21 января Опубликовано 21 января · Жалоба А дребезг контактов как убираете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jetrano 0 21 января Опубликовано 21 января · Жалоба В 21.01.2024 в 15:34, sazh сказал: А дребезг контактов как убираете? В обработчике прерывания? Никак не убираю. Рассчитывал на RC-цепочку. Разве она совсем бесполезна? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 3 21 января Опубликовано 21 января · Жалоба 1 час назад, Jetrano сказал: Рассчитывал на RC-цепочку. Если PG15 выход, то где там RC цепочка. В общем дребезг кнопки надо убрать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jetrano 0 21 января Опубликовано 21 января · Жалоба В 21.01.2024 в 18:23, sazh сказал: Если PG15 выход, то где там RC цепочка. В общем дребезг кнопки надо убрать. Добро. Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 3 21 января Опубликовано 21 января · Жалоба 3 минуты назад, Jetrano сказал: Добро. Спасибо! Честно признаться, при работе с Плис у меня нет кнопки. Раньше дребез я устранял RS триггером (ТМ2). На R и S входы вешал резисторы к питанию, к R и S входа подключал 3х позиционную кнопку, центральный контакт сидел на 0. И он подключался то к R, то к S. Это расписано у Тицца и Шенка в первом издании. В Вашем случае я набросал проект. Может поможет. (Настроить разрядность счетчика с помощью параметра, чтоб где то 50 мс - 200 отработать). Может поможет. debounce.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jetrano 0 22 января Опубликовано 22 января · Жалоба В 21.01.2024 в 20:05, sazh сказал: Честно признаться, при работе с Плис у меня нет кнопки. Раньше дребез я устранял RS триггером (ТМ2). На R и S входы вешал резисторы к питанию, к R и S входа подключал 3х позиционную кнопку, центральный контакт сидел на 0. И он подключался то к R, то к S. Это расписано у Тицца и Шенка в первом издании. В Вашем случае я набросал проект. Может поможет. (Настроить разрядность счетчика с помощью параметра, чтоб где то 50 мс - 200 отработать). Может поможет. debounce.zip 858 Б · 1 загрузка Вчера подключал сенсорный переключатель TTP223. С ним всё работает чётко, так как и должно работать. Осциллографа у меня нет и для того чтобы хотя бы что-то увидеть, что происходит при нажатии и отпускании обычной кнопки, воспользовался логическим анализатором Saleae Logic. При многократном нажатии на кнопку никаких "иголок" не было, но примерно в каждом десятом случае, при отпускании кнопки присутствовал короткий импульс. Конечно, в идеале и его не должно быть, но всё же далеко не всегда это происходило. Соберу "кнопку" по другой схеме, проверю. Спасибо за проект, попробую разобраться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jetrano 0 23 января Опубликовано 23 января (изменено) · Жалоба Всевозможных плат с FPGA много и на некоторых установлены кнопки с обычной обвязкой (резисторы, конденсаторы), а то и вовсе имеющие только подтяжку к плюсу или минусу питания. Такие кнопки пригодны только для того чтобы считывать их состояние, а в качестве источника прерывания необходимо подключать их через регистр, транзистор. Изменено 23 января пользователем Jetrano Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 3 23 января Опубликовано 23 января · Жалоба 11 часов назад, Jetrano сказал: Всевозможных плат с FPGA много и на некоторых установлены кнопки с обычной обвязкой (резисторы, конденсаторы), а то и вовсе имеющие только подтяжку к плюсу или минусу питания. Такие кнопки пригодны только для того чтобы считывать их состояние, а в качестве источника прерывания необходимо подключать их через регистр, транзистор. На этой схеме кнопка с обвесом - подано на шинный формирователь. Просто буфер. Причем это МОП структура, неиспользованные входы должны подключаться к питанию или общему. Ко всем схема надо подходить критически. Я имел ввиду следущее: Дребезг контактов — Википедия (wikipedia.org). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться