|
|
  |
NIOS для начинающих |
|
|
|
Feb 9 2012, 15:01
|

Частый гость
 
Группа: Свой
Сообщений: 146
Регистрация: 11-08-08
Из: Kolpino
Пользователь №: 39 551

|
Цитата(Full41 @ Feb 9 2012, 18:25)  Вот проект тестовый [attachment=65423:Primer_1.rar] Похоже вы давно не чистили папку с проектом. Для генерации BSP вы используете файл CPU.sopcinfo, а ваша система генерирует CPU_SOPC.sopcinfo. Последний сгенерировал нормально.
--------------------
|
|
|
|
|
Mar 3 2012, 11:41
|
Группа: Новичок
Сообщений: 4
Регистрация: 3-03-12
Пользователь №: 70 583

|
Здравствуйте, я полнейший новичок, но так вышло, что сразу попал в пекло на работе. Есть Stratix IV, готовый .ptf - файл. К плате подключена EEPROM AT24C1024 (даташит, очень коротенький:
24c1024.pdf ( 256.17 килобайт )
Кол-во скачиваний: 542 ). Задача такая - записать что-то в эту память и считать оттуда это что-то. На данном этапе хотя бы одно слово, чтобы мне разобраться, что куда. Создал шаблонный проект "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 ( 37 килобайт )
Кол-во скачиваний: 258 . В чем проблема - я первый раз в жизни встретился с NIOS, Altera, EEPROM и т.д. Все, что я знаю, это программирование на C++ и университетский курс цифровой схемотехники. Таким образом, если это не составит труда, хотелось бы услышать более разжеванное объяснение в терминах программирования, чего же от меня хотят, т.к. пока что не представляю, как вообще эти регистры интерфейса увязать с самой памятью, то есть проблемы на фундаментальном уровне понимания. Понимаю, как гвозди забивать, но не знаю, куда, и что вообще требуется сколотить. Особо буду рад примерам кода или каким-то ссылкам на то, что мне следовало бы изучить, чтобы понять всё это дело. Еще раз - мне не требуется полноценная программа работы с памятью, только пример записи/считывания слова, чтобы понять фундамент. Дальше сам. Спасибо.
|
|
|
|
|
Mar 3 2012, 13:34
|
Группа: Новичок
Сообщений: 4
Регистрация: 3-03-12
Пользователь №: 70 583

|
Цитата(barabek @ Mar 3 2012, 15:50)  Если Вы правильно описали свой опытто мой совет - начните с мигания светодиодами. Светодиодами уже мигал. Тут просто не моя инициатива, на работе надо что-то делать, вот дали задание следующее после светодиодов. Парень сказал, что очень легко, но он мне не расскажет, а то мне будет неинтересно. А я прям не знаю, с какой стороны подступиться Хвастаться не буду, но обучаемость и интеллект у меня не страдают, так что я чувствую в себе силы в этом разобраться достаточно быстро, вот только нужно вектор движения правильный задать, так как время не ждет.
|
|
|
|
|
Mar 3 2012, 21:16
|
Знающий
   
Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644

|
[attachment=66232:I2C.7z] Цитата(Pashtet791 @ Mar 3 2012, 16:34)  ...А я прям не знаю, с какой стороны подступиться  ... Используйте нисходящее программирование, изучите 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 ( 1.52 килобайт )
Кол-во скачиваний: 14
|
|
|
|
|
Mar 4 2012, 05:54
|
Группа: Новичок
Сообщений: 4
Регистрация: 3-03-12
Пользователь №: 70 583

|
Цитата(Konst_777 @ Mar 4 2012, 00:16)  [attachment=66232:I2C.7z] Используйте нисходящее программирование, изучите 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 Вы будете еще дорабатывать. Спасибо большое
|
|
|
|
|
Mar 4 2012, 06:22
|
Знающий
   
Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644

|
Цитата(Pashtet791 @ Mar 4 2012, 08:54)  Спасибо большое  Добро пожаловать в Nios II Уверен, что программист, который будет использовать обмен с 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 ( 1.46 килобайт )
Кол-во скачиваний: 17
|
|
|
|
|
Mar 5 2012, 08:22
|
Группа: Новичок
Сообщений: 4
Регистрация: 3-03-12
Пользователь №: 70 583

|
Цитата(Konst_777 @ Mar 4 2012, 10:22)  Добро пожаловать в Nios II Уверен, что программист, который будет использовать обмен с 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, помеченные как информация для чтения, должны помещать в себе читаемую информацию.
|
|
|
|
|
Mar 5 2012, 20:52
|
Знающий
   
Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644

|
Цитата(Pashtet791 @ Mar 5 2012, 11:22)  ...Открыл EEPROM.c и вижу, что функция eeprom_write вызывает I2C_start_io... Это просто пример использования регистра REG_COMMAND_WRITE. В I2C.h я использую макрос с именем COMOD_WR_CONTROL. Действительно, правильнее использовать для этого макроса имя REG_COMMAND_WRITE. Цитата(Pashtet791 @ Mar 5 2012, 11:22)  ... бит P0 (так и не понял его назначение)... Нужно изучить 24c1024.pdf. Емкость EEPROM AT24C1024 составляет 128 Кбайт. То есть, чтобы адресовать байт используется 17-разрядный адрес. Младшие 16 разрядов выдаются двумя байтами после Device Address (см. рис. 2, 3, 5, 6). А старший разряд адреса, который не поместился в эти два байта, выдается в разряде P0 байта Device Address. Цитата(Pashtet791 @ Mar 5 2012, 11:22)  Если я правильно понимаю... По-моему, Вам нужно попросить автора 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, написание и отладку программы.
|
|
|
|
|
Mar 8 2012, 03:44
|

Участник

Группа: Участник
Сообщений: 46
Регистрация: 6-07-11
Из: Кострома
Пользователь №: 66 096

|
Прошу помочь с программированием EPCS4, уже 4-й день мучаюсь но не могу запустить из неё nios II. Сразу скажу что форум перерыл весь, за 4 дня испробовал всё что тут нашёл, но ничего не работает. Скриншоты ключевых моментов прилагаются. Содержание файла nios2-flash-override.txt, не уверент что тут всё правильно написано поправте если что: CODE [EPCS-FF] # EPCS4N sector_size = 65536 sector_count = 8
таким скриптом пользовался: CODE #!/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) Что дальше делать не знаю, подскажите кто чем может, уже даже не знаю за что и хвататься, что делаю не так?
Сообщение отредактировал Orochi - Mar 8 2012, 03:46
Эскизы прикрепленных изображений
|
|
|
|
|
Mar 16 2012, 13:55
|
Группа: Новичок
Сообщений: 1
Регистрация: 16-03-12
Пользователь №: 70 841

|
Доброго времери суток, товарищи программеры  Подскажите такую штуку: вставляю свои библиотеки в проект (виртуальный каталог с системы), но не все файлы из этих библиотек я использую. Проектов много, и в одних нужно использовать одни файлы, в других другие, но библиотеки общие. Так вот, когда я делаю на ненужных файлах "Exclude from build..." - файл помечается другим значком (типа стал игнорируемым), но при компиляции он остаётся в Makefile и соответственно вкомпиливается и выдаёт ошибки (ошибки связанные с наличием перифирии, которой нет в этом проекте, но используется в других проектах). Если создать несколько файлов в корне проекта - то вроде как функция исколючения файлов с компиляции работает нормально, но именно на виртуальных каталогах непонятный глюк. Подскажите пожалуйста, может я не правильно каталог библиотек добавил, или же нужно как-то по-другому осуществлять менеджмент библиотек? В примере я исключил FRAM.C но видно, что в Makefile он остался. ЗЫЖ В Nios II 11й версии уже всё отлично работает, и хорошо всё сделано, НО сам квартус очень глючный,а SOPC вообще неизвестно как компилит
Сообщение отредактировал StripSmile - Mar 16 2012, 13:57
Эскизы прикрепленных изображений
|
|
|
|
|
Apr 10 2012, 20:55
|
Участник

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

|
Возникла такая проблема. Самый простой пример с прерываниями не работает - 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.
На форуме альтеровском смотрел - там были подобные вопросы, но никто толком так ничего и не ответил. Кто что подскажет?
Сообщение отредактировал _Desh_ - Apr 10 2012, 20:59
|
|
|
|
|
  |
5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0
|
|
|