naliwator 0 9 февраля, 2012 Опубликовано 9 февраля, 2012 · Жалоба Вот проект тестовый Primer_1.rar Похоже вы давно не чистили папку с проектом. Для генерации BSP вы используете файл CPU.sopcinfo, а ваша система генерирует CPU_SOPC.sopcinfo. Последний сгенерировал нормально. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
full41 0 10 февраля, 2012 Опубликовано 10 февраля, 2012 · Жалоба Похоже вы давно не чистили папку с проектом. Для генерации BSP вы используете файл CPU.sopcinfo, а ваша система генерирует CPU_SOPC.sopcinfo. Последний сгенерировал нормально. Попробую пересоздать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pashtet791 0 3 марта, 2012 Опубликовано 3 марта, 2012 · Жалоба Здравствуйте, я полнейший новичок, но так вышло, что сразу попал в пекло на работе. Есть Stratix IV, готовый .ptf - файл. К плате подключена EEPROM AT24C1024 (даташит, очень коротенький: 24c1024.pdf ). Задача такая - записать что-то в эту память и считать оттуда это что-то. На данном этапе хотя бы одно слово, чтобы мне разобраться, что куда. Создал шаблонный проект "hello world", собрал, получил system.h. Все, что мне нужно из system.h, - это: /* * i2c_comod configuration * */ #define I2C_COMOD_NAME "/dev/i2c_comod" #define I2C_COMOD_TYPE "i2c_alt" #define I2C_COMOD_BASE 0x0240a61c #define I2C_COMOD_SPAN 4 #define ALT_MODULE_CLASS_i2c_comod i2c_alt Интерфейс работы с AT24C1024 - два 16-разрядных регистра, объединенных в один. Описание интерфейса (одна страничка): i2c_master__ComMod_.doc . В чем проблема - я первый раз в жизни встретился с NIOS, Altera, EEPROM и т.д. Все, что я знаю, это программирование на C++ и университетский курс цифровой схемотехники. Таким образом, если это не составит труда, хотелось бы услышать более разжеванное объяснение в терминах программирования, чего же от меня хотят, т.к. пока что не представляю, как вообще эти регистры интерфейса увязать с самой памятью, то есть проблемы на фундаментальном уровне понимания. Понимаю, как гвозди забивать, но не знаю, куда, и что вообще требуется сколотить. Особо буду рад примерам кода или каким-то ссылкам на то, что мне следовало бы изучить, чтобы понять всё это дело. Еще раз - мне не требуется полноценная программа работы с памятью, только пример записи/считывания слова, чтобы понять фундамент. Дальше сам. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
barabek 0 3 марта, 2012 Опубликовано 3 марта, 2012 · Жалоба Здравствуйте, я полнейший новичок,... В чем проблема - я первый раз в жизни встретился с NIOS, Altera, EEPROM и т.д. Все, что я знаю, это программирование на C++ и университетский курс цифровой схемотехники. Если Вы правильно описали свой опытто мой совет - начните с мигания светодиодами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pashtet791 0 3 марта, 2012 Опубликовано 3 марта, 2012 · Жалоба Если Вы правильно описали свой опытто мой совет - начните с мигания светодиодами. Светодиодами уже мигал. Тут просто не моя инициатива, на работе надо что-то делать, вот дали задание следующее после светодиодов. Парень сказал, что очень легко, но он мне не расскажет, а то мне будет неинтересно. А я прям не знаю, с какой стороны подступиться Хвастаться не буду, но обучаемость и интеллект у меня не страдают, так что я чувствую в себе силы в этом разобраться достаточно быстро, вот только нужно вектор движения правильный задать, так как время не ждет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Konst_777 0 3 марта, 2012 Опубликовано 3 марта, 2012 · Жалоба ...А я прям не знаю, с какой стороны подступиться ... Используйте нисходящее программирование, изучите datasheet 24c1024.pdf и задавайте вопросы автору i2c_master__ComMod_.doc. Если светодиодом успешно помигали, то сможете добавить в проект четыре файла I2C.c, I2C.h, I2C_ioctl.c и I2C_ioctl.h. Добавили? Теперь, самое главное не забыть написать имя автора в заголовках этих файлов. I2C.h - уже можно отдать программисту, который будет использовать обмен с EEPROM. /* * I2C.h * * Created on: 03.03.2012 * Author: */ #ifndef I2C_H_ #define I2C_H_ #include "alt_types.h" // результаты выполнения функций (коды ошибок) #define I2C_OK 0 #define I2C_IO_ERROR -1 #define I2C_ADDRESS_OVERFLOW -2 // максимальный байт, который можно адресовать в AT24C1024 #define EEPROM_LENGTH 131071 // размер страницы для AT24C1024 #define EEPROM_PAGE_LENGTH 256 /* * * Чтение "len" байт в массив "data" начиная с адреса "eeprom_offset" EEPROM. * Функция возвращает результат выполнения чтения из EEPROM AT24C1024 * */ alt_8 I2C_read(alt_u32 eeprom_offset, alt_u32 len, alt_u8* data); /* * * Запись "len" байт начиная с адреса "eeprom_offset" EEPROM из массива "data". Значение "len" должно быть от 1 to 255 * Функция возвращает результат выполнения записи в EEPROM AT24C1024 * */ alt_8 I2C_write(alt_u32 eeprom_offset, alt_u16 len, alt_u8* data); #endif /* I2C_H_ */ Модули I2C.c, I2C_ioctl.c и I2C_ioctl.h Вы будете еще дорабатывать. I2C.7z Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pashtet791 0 4 марта, 2012 Опубликовано 4 марта, 2012 · Жалоба Используйте нисходящее программирование, изучите datasheet 24c1024.pdf и задавайте вопросы автору i2c_master__ComMod_.doc. Если светодиодом успешно помигали, то сможете добавить в проект четыре файла I2C.c, I2C.h, I2C_ioctl.c и I2C_ioctl.h. Добавили? Теперь, самое главное не забыть написать имя автора в заголовках этих файлов. I2C.h - уже можно отдать программисту, который будет использовать обмен с EEPROM. /* * I2C.h * * Created on: 03.03.2012 * Author: */ #ifndef I2C_H_ #define I2C_H_ #include "alt_types.h" // результаты выполнения функций (коды ошибок) #define I2C_OK 0 #define I2C_IO_ERROR -1 #define I2C_ADDRESS_OVERFLOW -2 // максимальный байт, который можно адресовать в AT24C1024 #define EEPROM_LENGTH 131071 // размер страницы для AT24C1024 #define EEPROM_PAGE_LENGTH 256 /* * * Чтение "len" байт в массив "data" начиная с адреса "eeprom_offset" EEPROM. * Функция возвращает результат выполнения чтения из EEPROM AT24C1024 * */ alt_8 I2C_read(alt_u32 eeprom_offset, alt_u32 len, alt_u8* data); /* * * Запись "len" байт начиная с адреса "eeprom_offset" EEPROM из массива "data". Значение "len" должно быть от 1 to 255 * Функция возвращает результат выполнения записи в EEPROM AT24C1024 * */ alt_8 I2C_write(alt_u32 eeprom_offset, alt_u16 len, alt_u8* data); #endif /* I2C_H_ */ Модули I2C.c, I2C_ioctl.c и I2C_ioctl.h Вы будете еще дорабатывать. Спасибо большое :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Konst_777 0 4 марта, 2012 Опубликовано 4 марта, 2012 · Жалоба Спасибо большое :rolleyes: Добро пожаловать в Nios II :rolleyes: Уверен, что программист, который будет использовать обмен с EEPROM вернет Вам I2C.h со следующими вопросами: Почему Вы дали ему I2C.h, хотя он работает с EEPROM и знать не желает, через какой интерфейс идет обмен. Почему у функции I2C_write() ограничение на запись в 256 байт. Ему совсем не интересно знать про Ваши ограничения. Тогда Вы перепишете Ваши модули и отдадите этому привереде файл EEPROM.h: /* * EEPROM.h * * Created on: 03.03.2012 * Author: */ #ifndef EEPROM_H_ #define EEPROM_H_ #include "alt_types.h" // результаты выполнения функций (коды ошибок) #define EEPROM_OK 0 #define EEPROM_IO_ERROR -1 #define EEPROM_ADDRESS_OVERFLOW -2 // максимальный байт, который можно адресовать в AT24C1024 #define EEPROM_LENGTH 131071 /******************************************************************************** ******************************* * * Чтение "len" байт в массив "data" начиная с адреса "offset" EEPROM. * Функция возвращает результат выполнения чтения из EEPROM AT24C1024 * ******************************************************************************** *******************************/ alt_8 eeprom_read(alt_u32 eeprom_offset, alt_u32 len, alt_u8* data); /******************************************************************************** ******************************* * * Запись "len" байт начиная с адреса "offset" EEPROM из массива "data". * Функция возвращает результат выполнения записи в EEPROM AT24C1024 * ******************************************************************************** *******************************/ alt_8 eeprom_write(alt_u32 eeprom_offset, alt_u32 len, alt_u8* data); #endif /* EEPROM_H_ */ В свою очередь, у Вас появится желание задать вопрос автору i2c_master__ComMod_.doc - может ли он создать такой контроллер связи с EEPROM, который будет отображать содержимое EEPROM на область памяти процессора Nios II. Скорее всего ответ автора контроллера связи с EEPROM будет в духе: "Идите, идите, я не подаю по понедельникам". Но попробовать можно EEPROM.7z Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pashtet791 0 5 марта, 2012 Опубликовано 5 марта, 2012 · Жалоба Добро пожаловать в Nios II :rolleyes: Уверен, что программист, который будет использовать обмен с EEPROM вернет Вам I2C.h со следующими вопросами: Почему Вы дали ему I2C.h, хотя он работает с EEPROM и знать не желает, через какой интерфейс идет обмен. Почему у функции I2C_write() ограничение на запись в 256 байт. Ему совсем не интересно знать про Ваши ограничения. Тогда Вы перепишете Ваши модули и отдадите этому привереде файл EEPROM.h: /* * EEPROM.h * * Created on: 03.03.2012 * Author: */ #ifndef EEPROM_H_ #define EEPROM_H_ #include "alt_types.h" // результаты выполнения функций (коды ошибок) #define EEPROM_OK 0 #define EEPROM_IO_ERROR -1 #define EEPROM_ADDRESS_OVERFLOW -2 // максимальный байт, который можно адресовать в AT24C1024 #define EEPROM_LENGTH 131071 /******************************************************************************** ******************************* * * Чтение "len" байт в массив "data" начиная с адреса "offset" EEPROM. * Функция возвращает результат выполнения чтения из EEPROM AT24C1024 * ******************************************************************************** *******************************/ alt_8 eeprom_read(alt_u32 eeprom_offset, alt_u32 len, alt_u8* data); /******************************************************************************** ******************************* * * Запись "len" байт начиная с адреса "offset" EEPROM из массива "data". * Функция возвращает результат выполнения записи в EEPROM AT24C1024 * ******************************************************************************** *******************************/ alt_8 eeprom_write(alt_u32 eeprom_offset, alt_u32 len, alt_u8* data); #endif /* EEPROM_H_ */ В свою очередь, у Вас появится желание задать вопрос автору i2c_master__ComMod_.doc - может ли он создать такой контроллер связи с EEPROM, который будет отображать содержимое EEPROM на область памяти процессора Nios II. Скорее всего ответ автора контроллера связи с EEPROM будет в духе: "Идите, идите, я не подаю по понедельникам". Но попробовать можно Сел разбираться. Насколько я понимаю, функция eeprom_write должна записывать данные из массива data в EEPROM. Открыл EEPROM.c и вижу, что функция eeprom_write вызывает I2C_start_io, которая выдает в регистр REG_COMMAND_WRITE команду начала обмена, адрес устройства, бит P0 (так и не понял его назначение) и признак записи/чтения. Если я правильно понимаю, мне нужно при помощи команд IOWR и IORD записывать/читать по содержащемуся в REG_COMMAND_WRITE адресу информацию из data. А разряды REG_STATUS_READ, помеченные как информация для чтения, должны помещать в себе читаемую информацию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Konst_777 0 5 марта, 2012 Опубликовано 5 марта, 2012 · Жалоба ...Открыл EEPROM.c и вижу, что функция eeprom_write вызывает I2C_start_io... Это просто пример использования регистра REG_COMMAND_WRITE. В I2C.h я использую макрос с именем COMOD_WR_CONTROL. Действительно, правильнее использовать для этого макроса имя REG_COMMAND_WRITE. ... бит P0 (так и не понял его назначение)... Нужно изучить 24c1024.pdf. Емкость EEPROM AT24C1024 составляет 128 Кбайт. То есть, чтобы адресовать байт используется 17-разрядный адрес. Младшие 16 разрядов выдаются двумя байтами после Device Address (см. рис. 2, 3, 5, 6). А старший разряд адреса, который не поместился в эти два байта, выдается в разряде P0 байта Device Address. Если я правильно понимаю... По-моему, Вам нужно попросить автора i2c_master__ComMod_.doc упростить жизнь и себе и Вам. На самом деле нет никакого выигрыша от применения этого контроллера связи с EEPROM. Ни по времени обращения к EEPROM ни по размеру программы процессора Nios II. Для работы с EEPROM необходимо управлять всего двумя сигналами SCL и SDA. Интерфейс FPGA с EEPROM должен содержать два регистра на чтение и запись. Они так и должны называться SCL и SDA. Через младшие разряды этих регистров процессор Nios II будет устанавливать и считывать состояние линий SCL и SDA. Значение старших разрядов этих регистров должно игнорироваться при записи и устанавливаться в ноль при считывании. Таким образом, автор i2c_master__ComMod_.doc должен добавить к SOPC два компонента PIO и закончить разработку "контроллера связи с EEPROM" в течение 5 минут. А Вы потратите пару дней на изучение 24c1024.pdf, написание и отладку программы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Orochi 0 8 марта, 2012 Опубликовано 8 марта, 2012 (изменено) · Жалоба Прошу помочь с программированием EPCS4, уже 4-й день мучаюсь но не могу запустить из неё nios II. Сразу скажу что форум перерыл весь, за 4 дня испробовал всё что тут нашёл, но ничего не работает. Скриншоты ключевых моментов прилагаются. Содержание файла nios2-flash-override.txt, не уверент что тут всё правильно написано поправте если что: [EPCS-FF] # EPCS4N sector_size = 65536 sector_count = 8 таким скриптом пользовался: #!/bin/sh sof2flash --input=EPCS4_SRAM.sof --output=epcs.flash --epcs --verbose elf2flash --input=software/soft/soft.elf --output=soft.flash --epcs --after=epcs.flash --verbose nios2-elf-objcopy -I srec -O ihex soft.flash soft.hex Что бы я не делал через nios2-flash-programmer заливаю ли я прошивку или что то подобное, флешка стирается (erase) но прогресс не уходит дальше 0% и имеем то что видим на terminal_bad.gif(прикрепл.). Пробовал создавать по методике с сайта naliwator.narod.ru там где elf файл добавляли к sof конвертировали в hex и затем конвертером в jic. Аппаратная часть работает NIOS II так и не смог оживить. Вектор сброса указал на контроллер EPCS. (eclipse_BSP_editor.gif) Что дальше делать не знаю, подскажите кто чем может, уже даже не знаю за что и хвататься, что делаю не так? Изменено 8 марта, 2012 пользователем Orochi Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
naliwator 0 9 марта, 2012 Опубликовано 9 марта, 2012 · Жалоба Orochi, пробовали на залитой системе активизировать проект, загрузив через Eclipse elf файл? В какой версии Quartus II работаете? Пробовали ли прочитать ончип память после старта процессора? Пробовали ли вы не в Qsys, а в Sopc Builder создать подобный проект? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Orochi 0 9 марта, 2012 Опубликовано 9 марта, 2012 (изменено) · Жалоба В итоге, после 5 дней "напряжённого труда" удалил проект и создал его заново. И как не странно Flash Programmer с первого раза всё прошил на ура без единой ошибки. А если бы у меня был проект не "тестовый" ... даже страшно думать ... время жалко) PS: Quartus 11.1 sp2 32-bit/Windows 7 - 32-bit Изменено 9 марта, 2012 пользователем Orochi Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
StripSmile 0 16 марта, 2012 Опубликовано 16 марта, 2012 (изменено) · Жалоба Доброго времери суток, товарищи программеры :) Подскажите такую штуку: вставляю свои библиотеки в проект (виртуальный каталог с системы), но не все файлы из этих библиотек я использую. Проектов много, и в одних нужно использовать одни файлы, в других другие, но библиотеки общие. Так вот, когда я делаю на ненужных файлах "Exclude from build..." - файл помечается другим значком (типа стал игнорируемым), но при компиляции он остаётся в Makefile и соответственно вкомпиливается и выдаёт ошибки (ошибки связанные с наличием перифирии, которой нет в этом проекте, но используется в других проектах). Если создать несколько файлов в корне проекта - то вроде как функция исколючения файлов с компиляции работает нормально, но именно на виртуальных каталогах непонятный глюк. Подскажите пожалуйста, может я не правильно каталог библиотек добавил, или же нужно как-то по-другому осуществлять менеджмент библиотек? В примере я исключил FRAM.C но видно, что в Makefile он остался. ЗЫЖ В Nios II 11й версии уже всё отлично работает, и хорошо всё сделано, НО сам квартус очень глючный,а SOPC вообще неизвестно как компилит :( Изменено 16 марта, 2012 пользователем StripSmile Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Desh_ 0 10 апреля, 2012 Опубликовано 10 апреля, 2012 (изменено) · Жалоба Возникла такая проблема. Самый простой пример с прерываниями не работает - 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. На форуме альтеровском смотрел - там были подобные вопросы, но никто толком так ничего и не ответил. Кто что подскажет? Изменено 10 апреля, 2012 пользователем _Desh_ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться