|
|
  |
NIOS для начинающих |
|
|
|
Apr 10 2012, 22:46
|
Знающий
   
Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831

|
Цитата(_Desh_ @ Apr 11 2012, 06:55)  Возникла такая проблема. Самый простой пример с прерываниями не работает - 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.
На форуме альтеровском смотрел - там были подобные вопросы, но никто толком так ничего и не ответил. Кто что подскажет? Я VIC не использовал, но указанной Вами функции не нашел и в документации. Может имели ввиду alt_ic_ isr_register ? А функцию alt_irq_register они перекинули в устаревшие. Нужно подключать файл <priv/alt_legacy_irq.h>
|
|
|
|
|
Apr 11 2012, 03:05
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 6-12-11
Пользователь №: 68 698

|
Цитата(barabek @ Apr 11 2012, 02:46)  Я VIC не использовал, но указанной Вами функции не нашел и в документации. Может имели ввиду alt_ic_isr_register ?
А функцию alt_irq_register они перекинули в устаревшие. Нужно подключать файл <priv/alt_legacy_irq.h> Да-да, верно, alt_ic_ isr_register, спасибо! Да alt_irq_register мне и не нужна, это я просто хотел проиллюстрировать, что не работает самый запростецкий проект, не могу понять из-за чего. Все заголовочные фалйы подключены, VIC в системе присутствует, переменная ALT_ENHANCED_API_PRESENT (или как-то там) объявлена. Среда разработки функцию видит (переходит по Ctrl + клик на имени функции к ее объявлению). То есть все сделано по документации. И повторюсь, в 9.1 абсолютно такой же софт успешно компилируется и работает.
|
|
|
|
|
Apr 11 2012, 05:56
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 6-12-11
Пользователь №: 68 698

|
Вот сейчас на работе пробую вообще пустую программу скомпилировать. Состав системы: 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'
Сообщение отредактировал _Desh_ - Apr 11 2012, 06:01
|
|
|
|
|
Apr 11 2012, 07:00
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 6-12-11
Пользователь №: 68 698

|
Цитата(Wic @ Apr 11 2012, 10:27)  все что нужно в include прописано? В исходниках ниоса вполне могут быть косяки, не пугайтесь так сильно  В данном конкретном исходнике все прописано. Мой код ничего не делает, так что в него ничего включать и не надо. Да я не пугаюсь, но делать-то что? Исходники править? Откатываться на версию 9.1? Спрашиваю исключительно в надежде на то, что кто-нибудь уже сталкивался и знает как решить.
|
|
|
|
|
Apr 11 2012, 10:46
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 6-12-11
Пользователь №: 68 698

|
Цитата(Wic @ Apr 11 2012, 12:25)  Перегенерировать проект пробовали? пересобрать заново? проверил у меня всё определяется ква версии 11,1сп1 Пробовал. Убрал свой таймер из 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'. Что я делаю не так?
Сообщение отредактировал _Desh_ - Apr 11 2012, 10:49
|
|
|
|
|
Apr 12 2012, 15:15
|

Лентяй
     
Группа: Свой
Сообщений: 2 203
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 843

|
Цитата(Stewart Little @ Apr 11 2012, 22:10)  Проверьте вот это: ... Проверил в v11.1sp2. Все работает, как положено. Рукопашной модификации sopcinfo не требуется. Еще вопрос - в настройках процессора какое количество shadow register sets указано? Если задано значение 0 (ноль), то такой контроллер HAL'ом поддерживаться не будет (о чем Qsys честно и предупреждает).
--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
|
|
|
|
|
Jun 4 2012, 15:49
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 6-12-11
Пользователь №: 68 698

|
Проблема с запуском проекта для 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 (пока так, для простоты). Подскажите, пожалуйста, что еще может быть не так?
Сообщение отредактировал _Desh_ - Jun 4 2012, 15:49
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|