Перейти к содержанию
    

Jetrano

Новичок
  • Постов

    12
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. А в SDK есть возможность указать на чём будет выполняться программа или её части, на МВ или на Cortex-e ?
  2. Если бы была возможность, я непременно задал бы вопрос автору.
  3. Всем привет! Встретился проект для XC7Z010 вот с такой системой. Объясните, плз, зачем два мастера с системе? Приложение созданное в Xilinx SDK будет выполняться на кортексе. Для чего здесь MicroBlaze ? Для того чтобы добавить в систему, в которой уже есть внешняя DDR-память, блочную память?
  4. Не секрет. Для XC7Z010 на стороне PL выводы были в состоянии PULLDOWN, а на стороне PS выводы были в состоянии PULLUP. Светодиодом проверял. В квартусе это в настройках есть. В Xilinx ISE так же в настройках отображается. А в Vivado я не нашёл. Там в GUI это нужно указывать или в xdc.
  5. Сам разобрался, поспешил с вопросом ) В файле XDC нужно указать: set_property BITSTREAM.CONFIG.UNUSEDPIN PULLNONE [current_design]
  6. Какой командой можно установить неиспользованные пины в высокоомное состояние? Или выполнить эту настройку в GUI ? В ответ на команду set_property BITSTREAM.CONFIG.UNUSEDPIN FLOAT [get_designs current_design] выводится сообщение о том, что для выражения get_designs необходимо указать существующий дизайн: WARNING: [Vivado 12-629] No designs matched 'current_design'. ERROR: [Common 17-55] 'set_property' expects at least one object. Resolution: If [get_<value>] was used to populate the object, check to make sure this command returns at least one valid object.
  7. Всевозможных плат с FPGA много и на некоторых установлены кнопки с обычной обвязкой (резисторы, конденсаторы), а то и вовсе имеющие только подтяжку к плюсу или минусу питания. Такие кнопки пригодны только для того чтобы считывать их состояние, а в качестве источника прерывания необходимо подключать их через регистр, транзистор.
  8. Вчера подключал сенсорный переключатель TTP223. С ним всё работает чётко, так как и должно работать. Осциллографа у меня нет и для того чтобы хотя бы что-то увидеть, что происходит при нажатии и отпускании обычной кнопки, воспользовался логическим анализатором Saleae Logic. При многократном нажатии на кнопку никаких "иголок" не было, но примерно в каждом десятом случае, при отпускании кнопки присутствовал короткий импульс. Конечно, в идеале и его не должно быть, но всё же далеко не всегда это происходило. Соберу "кнопку" по другой схеме, проверю. Спасибо за проект, попробую разобраться.
  9. В обработчике прерывания? Никак не убираю. Рассчитывал на RC-цепочку. Разве она совсем бесполезна?
  10. Приветствую! Выполнил настройку прерывания 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; } //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
×
×
  • Создать...