|
|
  |
Программа для NIosII в EPCS, boot loader |
|
|
|
Jan 22 2008, 20:56
|

Гуру
     
Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359

|
Итак все-таки, прочитал что надо сделать чтобы зашить программу в епцс вместе с конфигурационным файлом. Но так и не вкурил следующее:
1) куда же эта программа при включении бутлоадится, в какое-то ОЗУ, которое входит в состав ниоса? 2) как я понимаю в версии 6.1 все-таки надо делать описание. Это точно? Ведь для заливки программы в CFI_FLASH я не делал описание, а просто дал название контроллеру (для епцс не дает дать название).
Альтернатива епцс и флешу - добавлять в SOPC onchipmemory и туда программу складывать, а потом указывать ей .hex для прошивки. Но это для конечного продукта, ведь ее можно залить только с перекомпиляцией проекта, а это долго. Кроме того годиться лишь для небольшой программы. Потому необходимо все-таки разбираться с епцс, чтобы снять этот вопрос раз и навсегда! Еще, для ниоса пишу неособенно задумываясь программы на С, простенькие. Тут возникает непонятка - куда размещаются переменные-то? Надеюсь не по адресу 0, ибо там SDRAM в которой храниться картинка ))) Дизасемблер что-то лопатить не слишком хочется...
--------------------
Быть. torizin-liteha@yandex.ru
|
|
|
|
|
Jan 23 2008, 07:38
|

Гуру
     
Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359

|
Так, с этим вроде разобрался... Теперь, т.к. у меня квартус 6.1, то мне приходится создавать описание платы дабы можно было в EPCS запихнуть программу для ниоса. Создаю описание платы, как на рисунке. И флеш програмер говорит ошибку: "SOF offset is invalid: java.lang.NumberFormatException: For input string: """ Ну, соответсвенно, не дает указать hardware image region... и вообще не програмирует. Что я не так со смещением сделал? Е-мое, забыл рисунок-то добавить, как обычно. Добавляю...
Эскизы прикрепленных изображений
--------------------
Быть. torizin-liteha@yandex.ru
|
|
|
|
|
Jan 24 2008, 15:20
|

Гуру
     
Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359

|
Ладно, от этой темы можно пока отвлечся, т.к. это сейчас для меня не принципиально. Теперь вопрос по программной части. Мне необходимо из флеш-памяти (CFI) перекопировать в память SDRAM область размером 640х480х2 (всмысле два байта на пиксель). Далее я ее вывожу на монитор посредством обращения к памяти через шину авалон прямо из проекта квартусовского... Так вот, вначале делал просто таким образом: Код alt_u16 *fff; //указатель на флеш alt_u16 *ddd; //указатель на сдрам fff = (alt_u16*)(CFI_FLASH_0_BASE); ddd = (alt_u16*)(SDRAM_0_BASE); memcpy(ddd, fff, 614400); И все вроде работало. Тот же результат, что и при копировании прямо через указатели. Картинка выводилась и т.п. Но вот дальше обнаружилось что так прокатывает только один раз, далее функции Код memcpy, memset работают уже неправильно, да и через указатели уже не получается. Начал копать в сторону IOWR: Код for (i = 0; i < 307200; i++) { dst_src = IORD_16DIRECT(CFI_FLASH_0_BASE, i); IOWR_16DIRECT(SDRAM_0_BASE, i, dst_src); } И оказалось что и тут все не так. Копируется, но как-то неправильно, с пропусками. Даже если просто записывать в память 0... Подскажите, что делать, как правильно сделать все это? Без ДМА. Господа, простите. Это была паника, просто паника - все работает...
--------------------
Быть. torizin-liteha@yandex.ru
|
|
|
|
|
Jan 25 2008, 05:53
|

Гуру
     
Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359

|
Спасибо за ответ... 1) С епцс не разобрался пока, отложил. Вот там вверху картинку выкладывал и на том застопорился.
2) Прога хранится во флеш-памяти, память программ, переменные и пр. - все в on_chip памяти, ибо программа пока небольшая.
3) СДРАМ предназначен только для хранения нескольких кадров (страниц), и вывод осуществляю аппаратно, потому распределяю память принудительно. Думаю воспользоваться тем же malloc в дальнейшем, а адрес выделяемой памяти передавать через PIO. Но это не принципиально да и не необходимо на мой взгляд.
4) Про перефирию прочитал, потом прочитал HAL и выяснил, что главное использовать функции IOWR/IORD (и производные), если работать в обход кэша, для простоты.
--------------------
Быть. torizin-liteha@yandex.ru
|
|
|
|
|
Jan 26 2008, 12:21
|

Гуру
     
Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988

|
Цитата(torik @ Jan 23 2008, 13:38)  Теперь, т.к. у меня квартус 6.1, то мне приходится создавать описание платы дабы можно было в EPCS запихнуть программу для ниоса.
Создаю описание платы, как на рисунке. И флеш програмер говорит ошибку: "SOF offset is invalid: java.lang.NumberFormatException: For input string: """ Ну, соответсвенно, не дает указать hardware image region... и вообще не програмирует. Что я не так со смещением сделал? 8) да,да помню я этот глюк. это не флеш програмер, а java корявая. проблема решается очень просто, надо шить в консоли. почитайте user guide на flash_programmer.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|