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

Вот что-то каши много теперь стало.

1 - я предлагал грузиться имеено из ончипа! Сразу! Это когда ончип память инициализируется вашим кодом для Ниоса сразу. Это hex файл подключить надо в Qsys при создании самой ончип памяти.

2 - Раз теперь загрузка есть - смотрите, что вам генерит программер.

Его нутро не сложное и по коду множно понять где заголовок загрузчика, какого размера сам код, где закончился код, что доливается после кода до кратного числа в память. Там вроде всё просто. Бывало - приходилось писать свой генератор .bin файлов для заливки во флеш память. По разным причинам. Но удалось и всё работает. Возможно, что размер указан неверно. Или у программера указано перелить всё содержимое флеши в ончип.

У альтеры есть мануал по способам загрузки:

Alternate Nios Boot Methods. Может покурить его. Ну и багрепорт почитать.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сразу после добавления проекта Квартус в Hardware Connections появляются такие ошибки.

 

1 - я предлагал грузиться имеено из ончипа! Сразу! Это когда ончип память инициализируется вашим кодом для Ниоса сразу. Это hex файл подключить надо в Qsys при создании самой ончип памяти.

Это hex файл перед подключением нужно переделать?У того что у меня сейчас стартовый адрес 0х8020.

post-18832-1392631470_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это hex файл перед подключением нужно переделать?

 

Его нужно получить их эклипса. Результат компиляции вашего ПО для Ниоса. Сейчас не могу сказать, где там эти галочки.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Его нужно получить их эклипса. Результат компиляции вашего ПО для Ниоса. Сейчас не могу сказать, где там эти галочки.

Флажок enable_alt_load в настройках bsp?Попробовал несколько вариантов,всегда у *.hex стартовый адрес 0х0003EE53.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Значит это допустимая ситуация?

да, вообще не понимаю, зачем все это нужно. во всяком случае, с этим можно потом разобраться

Пробовал ставить флажки ,но кнопка Start после refresh остаётся недоступной.

в консоли вбейте: nios2-flash-programmer --verbose

если покажет, что видит регистры EPCS, то накидайте скрипт а-ля:

#!/bin/sh
EPCS_BASE=0x100a800
cd /home/vadik/Qdesigns/L150_220_test
# Creating .flash file for the FPGA configuration
"$SOPC_KIT_NIOS2/bin/sof2flash" --epcs --input="./L150_220_test.sof" --output="L150_220_test.flash" 
# Programming flash with the FPGA configuration
"$SOPC_KIT_NIOS2/bin/nios2-flash-programmer" --epcs --base=$EPCS_BASE  "L150_220_test.flash"
# Creating .flash file for the project
"$SOPC_KIT_NIOS2/bin/elf2flash" --epcs --after="L150_220_test.flash" --input="./software/L150_220_sw/L150_220_sw.elf" --output="epcs_flash_controller_0.flash"
# Programming flash with the project
"$SOPC_KIT_NIOS2/bin/nios2-flash-programmer" --epcs --base=$EPCS_BASE  "epcs_flash_controller_0.flash"

и забудьте про этот корявый эклипсовский гуй

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

и забудьте про этот корявый эклипсовский гуй

Огромное спасибо!

Вот уважаю такие бескомпромиссные ответы.

Сейчас попробую,только скажите как выбрать EPCS_BASE?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Огромное спасибо! Вот уважаю такие бескомпромиссные ответы. Сейчас попробую,только скажите как выбрать EPCS_BASE?

 

 

 

 

Так это же адрес из системы Qsys для EPCS.

 

Я не понимаю, отчего у вас получаются разные адреса в Qsys и в hex. Может в этом и косяк. Я с Ниосом работаю только в Quartus 11.1sp2.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так это же адрес из системы Qsys для EPCS.

Я не понимаю, отчего у вас получаются разные адреса в Qsys и в hex. Может в этом и косяк.

Адрес чего?Епцс-контроллера?Для чего кому-то знать какой адрес на шине имеет контроллер?

Я выше приводил скрипты,там ключа --base нет,скрипты брал на www.naliwator.narod.ru

Пока беру тайм-аут,буду переустанавливать ОС на компе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Адрес чего?Епцс-контроллера?Для чего кому-то знать какой адрес на шине имеет контроллер?

именно, сам адрес можно взять в system.h или из QSys выдернуть. смысл в том, что nios2-flash-programmer шьет "на горячую",

используя контроллер EPCS (который на самом деле SPI). кстати, забыл написать, что sof уже должен быть загружен

(при первой прошивке можно использовать nios2-configure-sof). при последующих манипуляциях sof нужно подгружать только если сменится адрес контроллера

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

именно, сам адрес можно взять в system.h или из QSys выдернуть. смысл в том, что nios2-flash-programmer шьет "на горячую",

используя контроллер EPCS (который на самом деле SPI). кстати, забыл написать, что sof уже должен быть загружен

(при первой прошивке можно использовать nios2-configure-sof). при последующих манипуляциях sof нужно подгружать только если сменится адрес контроллера

Ясно,спасибо!

Переустановил у себя ОС,Квартус и т.д.

Е.М.Н.И.П раньше скрипты были в файлах *.sh например elf2flash.sh , сейчас же есть только elf2flash без расширения с загадочным содержимым:

#!/bin/sh
. "${0%[\\/]*}/sh_jar.sh"

Или так и должно быть и память опять подводит? WinXP32.

Кстати,а чем плох метод предложенный warrior-2001? По моему это самый короткий путь. Правда у меня ещё не получилось сделать *.hех из *.elf для инициализации ram , отвлекаюсь постоянно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати,а чем плох метод предложенный warrior-2001? По моему это самый короткий путь.

 

 

 

 

Отвечу сам пожалуй.

 

Минус в том, что ПО для процессора по сути хранится в самой конфигурации ПЛИС.

 

И если захотите сменить ПО, не меняя прошивку(а вы захотите ;) ), то придётся перекомпиливать весь проект в квартусе с новым hex файлом.

 

Так что в моём случае - это лишь первый этап.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И если захотите сменить ПО, не меняя прошивку(а вы захотите ;) ), то придётся перекомпиливать весь проект в квартусе с новым hex файлом.

 

hex можно обновить и без полной пересборки проекта.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А Вы не правы. Ведь есть же такая чудесная команда как Update Memory Initialization File.

 

Е.М.Н.И.П раньше скрипты были в файлах *.sh например elf2flash.sh , сейчас же есть только elf2flash без расширения с загадочным содержимым:

#!/bin/sh
. "${0%[\\/]*}/sh_jar.sh"

Или так и должно быть и память опять подводит? WinXP32.

Таки память меня подвела,скрипты нормальные.

Ваш метод заработал с полоборота :rolleyes:

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

сейчас же есть только elf2flash без расширения с загадочным содержимым:

#!/bin/sh
. "${0%[\\/]*}/sh_jar.sh"

это тоже shell-script, в *nix расширения не обязательны

Кстати,а чем плох метод предложенный warrior-2001? По моему это самый короткий путь. Правда у меня ещё не получилось сделать *.hех из *.elf для инициализации ram , отвлекаюсь постоянно.

мне скрипт удобнее тем, что он хоть напишет, если что не так пошло. а квартусовский программер выкинет что-нибудь типа "JTAG error $*&^*#%" и сиди думай. а еклипсовские приблуды имеют свойство падать вообще молча (не все, зависит от версии и погоды на Марсе).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

мне скрипт удобнее тем, что он хоть напишет, если что не так пошло. а квартусовский программер выкинет что-нибудь типа "JTAG error $*&^*#%" и сиди думай. а еклипсовские приблуды имеют свойство падать вообще молча (не все, зависит от версии и погоды на Марсе).

Это да,но команду Update Memory Initialization File можно и скриптом выполнить.

Помогите,плз,разобраться с прерываниями.Получается так что прерывания возникают всегда,даже когда нет принимаемых данных.Как такое может быть,ведь при чтении данных флаг RRDY сниматься должен?

static void spi_slave_isr(void* isr_context)
    {
    volatile alt_u8 data_rx;
    RES_BIT_OUTPORT(21);
    data_rx = (char)(IORD_ALTERA_AVALON_SPI_RXDATA(SPI_SLAVE_BASE))&0x000000ff;
    IOWR_ALTERA_AVALON_SPI_STATUS(SPI_SLAVE_BASE, 0x0);
    *isr_context = (alt_u16)data_rx;
    SET_BIT_OUTPORT(21);
    }

Выяснилось что SPI здесь не виноват,прерывания возникают даже если в регистре SPI снять все маски прерываний.

Они возникают сразу после регистрации обработчика.

void Irq_init() {
//    IOWR_ALTERA_AVALON_SPI_CONTROL(SPI_SLAVE_BASE, ALTERA_AVALON_SPI_CONTROL_IRRDY_MSK | ALTERA_AVALON_SPI_CONTROL_IE_MSK);
    // Регистрация обработчика прерываний
    t1=alt_ic_isr_register(
            SPI_SLAVE_IRQ_INTERRUPT_CONTROLLER_ID,
            SPI_SLAVE_IRQ,
            spi_slave_isr,
            spi_buf_rx,
            flags);
}

С чем это может быть связано?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...