Jump to content

    
Sign in to follow this  
AlexBel

NIOS для начинающих

Recommended Posts

Возникла такая проблема. Самый простой пример с прерываниями не работает - 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>

 

 

Share this post


Link to post
Share on other sites
Я 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 абсолютно такой же софт успешно компилируется и работает.

Share this post


Link to post
Share on other sites

Вот сейчас на работе пробую вообще пустую программу скомпилировать. Состав системы: 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'

Edited by _Desh_

Share this post


Link to post
Share on other sites
все что нужно в include прописано? В исходниках ниоса вполне могут быть косяки, не пугайтесь так сильно ;)

 

В данном конкретном исходнике все прописано. Мой код ничего не делает, так что в него ничего включать и не надо.

Да я не пугаюсь, но делать-то что? Исходники править? Откатываться на версию 9.1? Спрашиваю исключительно в надежде на то, что кто-нибудь уже сталкивался и знает как решить.

Share this post


Link to post
Share on other sites
Перегенерировать проект пробовали? пересобрать заново? проверил у меня всё определяется ква версии 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'. Что я делаю не так?

Edited by _Desh_

Share this post


Link to post
Share on other sites
Ошибка та же: undefined reference to 'alt_ic_isr_register'. Что я делаю не так?

Проверьте вот это: http://www.altera.com/support/kdb/solution...152011_982.html

и до кучи вот это: http://www.altera.com/support/kdb/solutions/spr375970.html

Share this post


Link to post
Share on other sites
Проверьте вот это: ...

Проверил в v11.1sp2.

Все работает, как положено. Рукопашной модификации sopcinfo не требуется.

 

Еще вопрос - в настройках процессора какое количество shadow register sets указано?

Если задано значение 0 (ноль), то такой контроллер HAL'ом поддерживаться не будет (о чем Qsys честно и предупреждает).

Share this post


Link to post
Share on other sites
Похоже вы давно не чистили папку с проектом.

Для генерации BSP вы используете файл CPU.sopcinfo,

а ваша система генерирует CPU_SOPC.sopcinfo.

 

Последний сгенерировал нормально.

Попробовал все пересоздать все равно появляются ошибки такого плана.

post-36375-1334836215_thumb.jpg

post-36375-1334836231_thumb.jpg

 

Share this post


Link to post
Share on other sites
Попробовал все пересоздать все равно появляются ошибки такого плана.

post-36375-1334836215_thumb.jpg

post-36375-1334836231_thumb.jpg

 

Разобрался сам. Хотя теперь возник другой вопрос. Например я создал проект ядра NIOS, сделал для него программу в Eclips, после чего мне оказалось необходимо добавить в тот же проект ядра NIOS дополнительные выводы или что то еще, мне что снова надо создавать проект в Eclips по новому или я могу обновить как то старый(Как я понимаю необходимо обновит BSP модель)?

Share this post


Link to post
Share on other sites

Используете старый проект. Но нужно перегенрировать BSP. Для этого по BSP части проекта (не тот в котором у вас исходники) жмете правой кнопкой там выбираете NIOS II> Generate BSP

Share this post


Link to post
Share on other sites
Используете старый проект. Но нужно перегенрировать BSP. Для этого по BSP части проекта (не тот в котором у вас исходники) жмете правой кнопкой там выбираете NIOS II> Generate BSP

 

Спасибо))

Share this post


Link to post
Share on other sites

Уважаемые коллеги, на сайте "Эфо" прочитал что проводятся курсы NIOS 2 на базе " кафедре Автоматики и Вычислительной Техники (СПбГПУ)", написано что те кто заканчивает эти курсы получает в электронном виде: лекции, описания лабораторных работ, результаты лабораторных работ.

Может кто проходил эти курсы поделятся материалами, если не жалко, было бы полезно.

Share this post


Link to post
Share on other sites

Проблема с запуском проекта для 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 (пока так, для простоты). Подскажите, пожалуйста, что еще может быть не так?

Edited by _Desh_

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.

Sign in to follow this