Jump to content

    

_Desh_

Участник
  • Content Count

    57
  • Joined

  • Last visited

Everything posted by _Desh_


  1. Тоже так думал, но сегодня в конце рабочего дня специально снес всю папку software, перекомпилировал аппаратную часть и заново сгенерировал BSP с программой - не помогло. Завтра с работы попробую залить исходники.
  2. Проблема с запуском проекта для NIOS из-под Eclipse. Как я понимаю (поправьте, если не так), надо иметь на руках файлы .sof и .elf. Оба файла имеются. Итак, включаю железку, шью .sof (Quartus Programmer), затем из-под eclipse выбираю Run As->Nios Hardware. Дальше оболочка меня спрашивает настройки, я их все указываю, но прошивка не загружается - все время выдает Download ELF file process failed. В консоли выводится что-то типа Verify failed at 0x10000 to 0x14FFFF или что-то в этом роде. По адресу 0x10000-0x130xxx (не помню точно) у меня в системе находится onchip_memory. К шине подключена правильно, Reset Vector и Exception Vector указывают на нее. Из периферии оставил только PIO, JTAG UART, Vectored Interrupt Controller. На форуме Альтеры куча подобных вопросов, но конкретных ответов нет - все время советуют проверить тайминги и сигналы clk, reset. Но раз Quartus предупреждений или ошибок при компиляции не выдал, то ошибок времянки нет. Clk идет с PLL (80 МГц), reset - лог. 1 (пока так, для простоты). Подскажите, пожалуйста, что еще может быть не так?
  3. Пробовал. Убрал свой таймер из sys_clk_timer в настройках bsp. Вроде пустой проект скомпилировался. Но пустые проекты никому не нужны, поэтому я написал следующее: #include "system.h" #include "sys/alt_irq.h" #include "altera_avalon_timer_regs.h" volatile int timer_status = 0; volatile int timer_timeout = 0; static void handle_timer_interrupts(void* context) { volatile int* timer_status_ptr = (volatile int*) context; *timer_status_ptr = IORD_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE); IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE, 0); timer_timeout = 1; } static void init_timer() { void* timer_status_ptr = (void*) &timer_status; IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_BASE, 0x5); IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE, 0); alt_ic_isr_register(TIMER_IRQ_INTERRUPT_CONTROLLER_ID, TIMER_IRQ, handle_timer_interrupts, timer_status_ptr, 0x0); } int main() { init_timer(); /* Тут мой код */ return 0; } Ошибка та же: undefined reference to 'alt_ic_isr_register'. Что я делаю не так?
  4. В данном конкретном исходнике все прописано. Мой код ничего не делает, так что в него ничего включать и не надо. Да я не пугаюсь, но делать-то что? Исходники править? Откатываться на версию 9.1? Спрашиваю исключительно в надежде на то, что кто-нибудь уже сталкивался и знает как решить.
  5. Вот сейчас на работе пробую вообще пустую программу скомпилировать. Состав системы: nios, onchip_memory, epcs_flash_controller, interval_timer. Qsys чего-то там генерирует (без ошибок и предупреждений), запускаю Nios II SBT, пустой проект, набираю код int main() { while (1); return 0; } При компиляции мне выдает ошибку в файле alt_avalon_timer_sc_init.c (!), т.е. сам у себя в драйверах HAL. Пишет: undefined reference to 'alt_ic_isr_register'
  6. Да-да, верно, alt_ic_isr_register, спасибо! Да alt_irq_register мне и не нужна, это я просто хотел проиллюстрировать, что не работает самый запростецкий проект, не могу понять из-за чего. Все заголовочные фалйы подключены, VIC в системе присутствует, переменная ALT_ENHANCED_API_PRESENT (или как-то там) объявлена. Среда разработки функцию видит (переходит по Ctrl + клик на имени функции к ее объявлению). То есть все сделано по документации. И повторюсь, в 9.1 абсолютно такой же софт успешно компилируется и работает.
  7. Возникла такая проблема. Самый простой пример с прерываниями не работает - count_binary (который идет в комплекте с квартусом и ниосом). Подобные обработчики прерываний раньше уже писал на версии 9.1 - все работает. При переносе проекта на новый квартус 11.1 - ни в какую. В среде NIOS II SBT при компиляции выводит сообщение об ошибке - undefined reference to alt_ic_irq_register (использую vectored interrupt controller). Т.е. не может зарегистрировать обработчик прерывания. Заголовочный файл "sys\alt_irq.h" добавлен. Все по идее должен видеть - но результат нулевой. Не работает также функция alt_irq_register. На форуме альтеровском смотрел - там были подобные вопросы, но никто толком так ничего и не ответил. Кто что подскажет?