реклама на сайте
подробности

 
 
> NIOS II, программирование ниос2 на СИ
x66
сообщение Jan 20 2015, 06:52
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 7-05-10
Пользователь №: 57 122



Здравствуйте, пишу программу на Си в ниос2 эклипс. Проект был собран в qsys, там имеется ниос2, DDR2, PIO, on-chip memory2 и т.д. Возник вопрос: как на языке Си обратиться например именно к выводу PIO или к шине адреса DDR2? Вставил несколько строк, но не знаю правильно ли сделал
ALT_MODULE_CLASS_pio_in (PIO_IN_BASE, data_inp);
ALT_MODULE_CLASS_pio_out_on (PIO_OUT_ON_BASE, data_out_on);
ALT_MODULE_CLASS_pio_out (PIO_OUT_BASE, data_out);
ALT_MODULE_CLASS_onchip_memory2_0 (ONCHIP_MEMORY2_0_BASE, on_chip);
Go to the top of the page
 
+Quote Post
8 страниц V   1 2 3 > »   
Start new topic
Ответов (1 - 14)
doom13
сообщение Jan 20 2015, 07:55
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(x66 @ Jan 20 2015, 09:52) *
Здравствуйте, пишу программу на Си в ниос2 эклипс. Проект был собран в qsys, там имеется ниос2, DDR2, PIO, on-chip memory2 и т.д. Возник вопрос: как на языке Си обратиться например именно к выводу PIO или к шине адреса DDR2? Вставил несколько строк, но не знаю правильно ли сделал
ALT_MODULE_CLASS_pio_in (PIO_IN_BASE, data_inp);
ALT_MODULE_CLASS_pio_out_on (PIO_OUT_ON_BASE, data_out_on);
ALT_MODULE_CLASS_pio_out (PIO_OUT_BASE, data_out);
ALT_MODULE_CLASS_onchip_memory2_0 (ONCHIP_MEMORY2_0_BASE, on_chip);

Смотрите в BSP папку drivers, там есть всё необходимое.
Go to the top of the page
 
+Quote Post
x66
сообщение Jan 20 2015, 08:24
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 7-05-10
Пользователь №: 57 122



Цитата(doom13 @ Jan 20 2015, 10:55) *
Смотрите в BSP папку drivers, там есть всё необходимое.


Все что есть в папке. Где взять DDR2 и on-chip memory2 ?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
doom13
сообщение Jan 20 2015, 08:36
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(x66 @ Jan 20 2015, 11:24) *
Все что есть в папке. Где взять DDR2 и on-chip memory2 ?

Bsp перегенерили после добавления DDR2? Должны драйвера под контроллер DDR2 появиться, для On-Chip memory и не требуются, ну а для GPIO - altera_avalon_gpio_regs.h.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 20 2015, 08:38
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



DDR2 - это не просто статичная память, даже когда вы ее не трогаете там много всего происходит. Потому олопачиванием ее занимается специальный контроллер. Который дергает адреса, производит рефреши, выдбирает столбики и колонки.

Из этого следует что в целом вам не зачем и нельзя обращаться к шине что идет на память, иначе вы этот процесс собьете.

Чтобы просто пошевелить ножками проца - для этого существует модули которые подключаются к шине проца и данные переводят в пины GPIO. Если же есть острая необходимость шевелить ногами памяти (что скорее всего не выйдет), надо писать свой модуль между контроллером и памятью и с шиной к процу. Но скорее всего после внедрения этого модуля ваша память перестанет работать...

Применение контроллера DDR должно встроить память в адресное пространство вашего процессора, во всяком случае это логично и у ксалинкс сделано именно так, потому обращение в память подключенную к процу через контроллер происходит просто по адресам (чтение, запись по указателю в С)
Go to the top of the page
 
+Quote Post
doom13
сообщение Jan 20 2015, 08:49
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Обманул Вас, для DDR2 как и для On-Chip Memory не будет драйверов в BSP. При условии правильных настроек в Qsys для DDR2-контроллера и соблюдения всех таймингов будет работать как обычная память - создаём указатель на адреса DDR, по нему обращаемся к памяти.
Go to the top of the page
 
+Quote Post
x66
сообщение Jan 20 2015, 09:07
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 7-05-10
Пользователь №: 57 122



получается, что я могу работать только с адресами ОЗУ? Адресное пространство вроде задал верно, qsys не ругался.

Цитата(doom13 @ Jan 20 2015, 11:36) *
Bsp перегенерили после добавления DDR2? Должны драйвера под контроллер DDR2 появиться, для On-Chip memory и не требуются, ну а для GPIO - altera_avalon_gpio_regs.h.


altera_avalon_gpio_regs.h получается общем для нескольких PIO? я в qsys сделал несколько PIO (PIO_IN, PIO_OUT, PIO_OUT_ON)
Go to the top of the page
 
+Quote Post
doom13
сообщение Jan 20 2015, 09:09
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(x66 @ Jan 20 2015, 12:07) *
altera_avalon_gpio_regs.h получается общем для нескольких PIO? я в qsys сделал несколько PIO (PIO_IN, PIO_OUT, PIO_OUT_ON)

Да, только там есть параметр BASE, а он для всех GPIO разный.
Go to the top of the page
 
+Quote Post
x66
сообщение Jan 20 2015, 09:14
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 7-05-10
Пользователь №: 57 122



Цитата(doom13 @ Jan 20 2015, 12:09) *
Да, только там есть параметр BASE, а он для всех GPIO разный.


Спасибо, начинаю понимать. Везде в примерах даются строки, например IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE, leds), но не объясняются.
Go to the top of the page
 
+Quote Post
doom13
сообщение Jan 20 2015, 09:16
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(x66 @ Jan 20 2015, 12:07) *
получается, что я могу работать только с адресами ОЗУ? Адресное пространство вроде задал верно, qsys не ругался.

Не совсем понял, что Вы этим хотели сказать. Если к Ниосу прикручен DDR2 и On-chip memory, то и тот и тот есть ОЗУ.
Для работы с DDR2 можно использовать что-то типа:
Код
int *ddr2_ptr = (int *) DDR2_START_ADDRESS;

или в BSP Editor определяете секции, которые будут ложится в DDR2 (например .heap - тогда при динамическом выделении памяти, она и будет выделяться в DDR2).
Go to the top of the page
 
+Quote Post
x66
сообщение Jan 20 2015, 09:19
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 7-05-10
Пользователь №: 57 122



Цитата(doom13 @ Jan 20 2015, 12:09) *
Да, только там есть параметр BASE, а он для всех GPIO разный.


В моем случае надо так вводить строки?
IOWR_ALTERA_AVALON_PIO_DATA(pio_in, data)
IOWR_ALTERA_AVALON_PIO_DATA(pio_out, data)
IOWR_ALTERA_AVALON_PIO_DATA(pio_out_on, data)

Вместо data вводится свое имя переменной
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 20 2015, 09:21
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



С DDR можно работать как с памятью вообще
Для этого надо узнать ее адрес и по адресу читать - писать
А можно как с памятью процессора, для этого надо линкеру про нее рассказать, и тогда все остальное будет происходить само. переменные в ней создадутся, куча там будет и так далее..

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

Неужели альтера не дает примеров с тестом памяти? посмотрите его, там же все очевидно
Go to the top of the page
 
+Quote Post
x66
сообщение Jan 20 2015, 09:22
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 7-05-10
Пользователь №: 57 122



Цитата(doom13 @ Jan 20 2015, 12:16) *
Не совсем понял, что Вы этим хотели сказать. Если к Ниосу прикручен DDR2 и On-chip memory, то и тот и тот есть ОЗУ.
Для работы с DDR2 можно использовать что-то типа:
Код
int *ddr2_ptr = (int *) DDR2_START_ADDRESS;

или в BSP Editor определяете секции, которые будут ложится в DDR2 (например .heap - тогда при динамическом выделении памяти, она и будет выделяться в DDR2).


Имеется внешняя DDR2, также есть On-chip memory, которая необходима для моментов времени, когда происходит чтение из DDR2. В эклипсе для работы с адресами я использую строки, например int addr_on_chip=0x4008000; Правильная ли такая запись?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 20 2015, 09:24
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



нет
потому что нужно адрес не
int addr_on_chip=0x4008000

а
int *addr_on_chip = (int *)0x4008000;

записать туда *addr_on_chip = 10;
считать оттуда
int Temp = *addr_on_chip;


при условии что 0x4008000 - это адрес в ДДР
Go to the top of the page
 
+Quote Post
doom13
сообщение Jan 20 2015, 09:26
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(x66 @ Jan 20 2015, 12:19) *
В моем случае надо так вводить строки?
IOWR_ALTERA_AVALON_PIO_DATA(pio_in, data)
IOWR_ALTERA_AVALON_PIO_DATA(pio_out, data)
IOWR_ALTERA_AVALON_PIO_DATA(pio_out_on, data)

Вместо data вводится свое имя переменной

Да, data - то, что хотите видеть на выходе порта или то, что читаете.
Адреса pio_in, pio_out, pio_out_on берёте из system.h.
Go to the top of the page
 
+Quote Post

8 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 02:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.01473 секунд с 7
ELECTRONIX ©2004-2016