Jump to content
    

QSYS. Прерывание Parallel I/0.

Приветствую!
Выполнил настройку прерывания 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;
}

//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

Set.jpg

Edited by Jetrano

Share this post


Link to post
Share on other sites

В 21.01.2024 в 15:34, sazh сказал:

А дребезг контактов как убираете?

В обработчике прерывания? Никак не убираю. Рассчитывал на RC-цепочку. Разве она совсем бесполезна?

Share this post


Link to post
Share on other sites

1 час назад, Jetrano сказал:

 Рассчитывал на RC-цепочку.

Если PG15 выход, то где там RC цепочка. В общем дребезг кнопки надо убрать.

Share this post


Link to post
Share on other sites

В 21.01.2024 в 18:23, sazh сказал:

Если PG15 выход, то где там RC цепочка. В общем дребезг кнопки надо убрать.

Добро. Спасибо!

Share this post


Link to post
Share on other sites

3 минуты назад, Jetrano сказал:

Добро. Спасибо!

Честно признаться, при работе с Плис у меня нет кнопки. Раньше дребез я устранял RS триггером (ТМ2). На R и S входы вешал резисторы к питанию, к R  и S входа подключал 3х позиционную кнопку, центральный контакт сидел на 0. И он подключался то к R, то к S. Это расписано у Тицца и Шенка в первом издании. В Вашем случае я набросал проект. Может поможет. (Настроить разрядность счетчика с помощью параметра, чтоб где то 50 мс - 200 отработать).

Может поможет.

debounce.zip

Share this post


Link to post
Share on other sites

В 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. При многократном нажатии на кнопку никаких "иголок" не было,
но примерно в каждом десятом случае, при отпускании кнопки присутствовал короткий импульс.
Конечно, в идеале и его не должно быть, но всё же далеко не всегда это происходило.
Соберу "кнопку" по другой схеме, проверю.
Спасибо за проект, попробую разобраться.

Share this post


Link to post
Share on other sites

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

5.png

Edited by Jetrano

Share this post


Link to post
Share on other sites

11 часов назад, Jetrano сказал:

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

5.png

 

На этой схеме кнопка с обвесом -  подано на шинный формирователь. Просто буфер. Причем это МОП структура, неиспользованные входы должны подключаться к питанию или общему. Ко всем схема надо подходить критически.

Я имел ввиду следущее: Дребезг контактов — Википедия (wikipedia.org).

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...