x66 0 20 января, 2015 Опубликовано 20 января, 2015 · Жалоба Здравствуйте, пишу программу на Си в ниос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); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 20 января, 2015 Опубликовано 20 января, 2015 · Жалоба Здравствуйте, пишу программу на Си в ниос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, там есть всё необходимое. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x66 0 20 января, 2015 Опубликовано 20 января, 2015 · Жалоба Смотрите в BSP папку drivers, там есть всё необходимое. Все что есть в папке. Где взять DDR2 и on-chip memory2 ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 20 января, 2015 Опубликовано 20 января, 2015 · Жалоба Все что есть в папке. Где взять DDR2 и on-chip memory2 ? Bsp перегенерили после добавления DDR2? Должны драйвера под контроллер DDR2 появиться, для On-Chip memory и не требуются, ну а для GPIO - altera_avalon_gpio_regs.h. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 20 января, 2015 Опубликовано 20 января, 2015 · Жалоба DDR2 - это не просто статичная память, даже когда вы ее не трогаете там много всего происходит. Потому олопачиванием ее занимается специальный контроллер. Который дергает адреса, производит рефреши, выдбирает столбики и колонки. Из этого следует что в целом вам не зачем и нельзя обращаться к шине что идет на память, иначе вы этот процесс собьете. Чтобы просто пошевелить ножками проца - для этого существует модули которые подключаются к шине проца и данные переводят в пины GPIO. Если же есть острая необходимость шевелить ногами памяти (что скорее всего не выйдет), надо писать свой модуль между контроллером и памятью и с шиной к процу. Но скорее всего после внедрения этого модуля ваша память перестанет работать... Применение контроллера DDR должно встроить память в адресное пространство вашего процессора, во всяком случае это логично и у ксалинкс сделано именно так, потому обращение в память подключенную к процу через контроллер происходит просто по адресам (чтение, запись по указателю в С) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 20 января, 2015 Опубликовано 20 января, 2015 · Жалоба Обманул Вас, для DDR2 как и для On-Chip Memory не будет драйверов в BSP. При условии правильных настроек в Qsys для DDR2-контроллера и соблюдения всех таймингов будет работать как обычная память - создаём указатель на адреса DDR, по нему обращаемся к памяти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x66 0 20 января, 2015 Опубликовано 20 января, 2015 · Жалоба получается, что я могу работать только с адресами ОЗУ? Адресное пространство вроде задал верно, qsys не ругался. 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) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 20 января, 2015 Опубликовано 20 января, 2015 · Жалоба altera_avalon_gpio_regs.h получается общем для нескольких PIO? я в qsys сделал несколько PIO (PIO_IN, PIO_OUT, PIO_OUT_ON) Да, только там есть параметр BASE, а он для всех GPIO разный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x66 0 20 января, 2015 Опубликовано 20 января, 2015 · Жалоба Да, только там есть параметр BASE, а он для всех GPIO разный. Спасибо, начинаю понимать. Везде в примерах даются строки, например IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE, leds), но не объясняются. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 20 января, 2015 Опубликовано 20 января, 2015 · Жалоба получается, что я могу работать только с адресами ОЗУ? Адресное пространство вроде задал верно, qsys не ругался. Не совсем понял, что Вы этим хотели сказать. Если к Ниосу прикручен DDR2 и On-chip memory, то и тот и тот есть ОЗУ. Для работы с DDR2 можно использовать что-то типа: int *ddr2_ptr = (int *) DDR2_START_ADDRESS; или в BSP Editor определяете секции, которые будут ложится в DDR2 (например .heap - тогда при динамическом выделении памяти, она и будет выделяться в DDR2). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x66 0 20 января, 2015 Опубликовано 20 января, 2015 · Жалоба Да, только там есть параметр 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 вводится свое имя переменной Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 20 января, 2015 Опубликовано 20 января, 2015 · Жалоба С DDR можно работать как с памятью вообще Для этого надо узнать ее адрес и по адресу читать - писать А можно как с памятью процессора, для этого надо линкеру про нее рассказать, и тогда все остальное будет происходить само. переменные в ней создадутся, куча там будет и так далее.. Можно комбинировать, часть разметить и отдать процу, а часть использовать самому по указателю. Неужели альтера не дает примеров с тестом памяти? посмотрите его, там же все очевидно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x66 0 20 января, 2015 Опубликовано 20 января, 2015 · Жалоба Не совсем понял, что Вы этим хотели сказать. Если к Ниосу прикручен 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; Правильная ли такая запись? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 20 января, 2015 Опубликовано 20 января, 2015 · Жалоба нет потому что нужно адрес не int addr_on_chip=0x4008000 а int *addr_on_chip = (int *)0x4008000; записать туда *addr_on_chip = 10; считать оттуда int Temp = *addr_on_chip; при условии что 0x4008000 - это адрес в ДДР Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 20 января, 2015 Опубликовано 20 января, 2015 · Жалоба В моем случае надо так вводить строки? 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться