|
|
  |
NIOS II, программирование ниос2 на СИ |
|
|
|
Jan 20 2015, 06:52
|
Участник

Группа: Участник
Сообщений: 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);
|
|
|
|
|
Jan 20 2015, 07:55
|
Профессионал
    
Группа: Свой
Сообщений: 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, там есть всё необходимое.
|
|
|
|
|
Jan 20 2015, 08:24
|
Участник

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

|
Цитата(doom13 @ Jan 20 2015, 10:55)  Смотрите в BSP папку drivers, там есть всё необходимое. Все что есть в папке. Где взять DDR2 и on-chip memory2 ?
Эскизы прикрепленных изображений
|
|
|
|
|
Jan 20 2015, 09:07
|
Участник

Группа: Участник
Сообщений: 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)
|
|
|
|
|
Jan 20 2015, 09:14
|
Участник

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

|
Цитата(doom13 @ Jan 20 2015, 12:09)  Да, только там есть параметр BASE, а он для всех GPIO разный. Спасибо, начинаю понимать. Везде в примерах даются строки, например IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE, leds), но не объясняются.
|
|
|
|
|
Jan 20 2015, 09:16
|
Профессионал
    
Группа: Свой
Сообщений: 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).
|
|
|
|
|
Jan 20 2015, 09:19
|
Участник

Группа: Участник
Сообщений: 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 вводится свое имя переменной
|
|
|
|
|
Jan 20 2015, 09:22
|
Участник

Группа: Участник
Сообщений: 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; Правильная ли такая запись?
|
|
|
|
|
Jan 20 2015, 09:26
|
Профессионал
    
Группа: Свой
Сообщений: 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.
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|