Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Nios Запись (Чтение) данных
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Acvarif
Пытаюсь на Nios настроить опенсоус корку Ethernet "eth_ocm"
В драйвере регистры MAC загружаются примерно так
Код
#define ETH_OCM_MODER       0x00
#define IOWR_ETH_OCM_MODER(base, dat)   IOWR(base, ETH_OCM_MODER, dat)

IOWR_ETH_OCM_MODER(ETH_OCM_0_BASE, 0);

Далее IOWR определяется в файле io.h как

#define __IO_CALC_ADDRESS_NATIVE(BASE, REGNUM) \
  ((void *)(((alt_u8*)BASE) + ((REGNUM) * (SYSTEM_BUS_WIDTH/8))))

#define IOWR(BASE, REGNUM, DATA) \
  __builtin_stwio (__IO_CALC_ADDRESS_NATIVE ((BASE), (REGNUM)), (DATA))


Чтобы убедиться, что это все работает попытался перевести такую операцию записи на регистр PIO c базовым адресом 00001000

Надеялся, что если выполнить например это
Код
#define ETH_TEST_ADDR       0x00000100
#define TEST_MODER          0x00

#define IOWR_TEST_MODER(base, dat)  IOWR(base, TEST_MODER, dat)
// Test    
IOWR_TEST_MODER(ETH_TEST_ADDR, 0x55);

то на выходе PIO, к которому подключены светодиоды будет наблюдаться нужный код - 0x55.
Но похоже ничего не работает.

Подскажите пожалуйста в чем загвоздка?
(Функцией типа IOWR_ALTERA_AVALON_PIO_DATA(0x00001000, 0x55) светодиоды управляются)

Я понимаю, что функция IOWR предназначена для записи данных во внутренний регистр и с PIO может не прокатить.
Но как тогда убедиться что она работает?
Пока не вижу, что MAC хоть как-то задышал. Поэтому и начал с самого хвоста.
barabek
Да нет, без разницы, что PIO что любая другая периферия - функции записи те же. Посмотрите файл altera_avalon_pio_regs.h. Там например, есть такое

Код
#define IOADDR_ALTERA_AVALON_PIO_DATA(base)           __IO_CALC_ADDRESS_NATIVE(base, 0)


#define IORD_ALTERA_AVALON_PIO_DATA(base)             IORD(base, 0)
#define IOWR_ALTERA_AVALON_PIO_DATA(base, data)       IOWR(base, 0, data)
Так что Ваш код на первый взгляд правильный и должен работать. Смущает только то, что ETH_TEST_ADDR равно 0x00000100 (сто), а при далее Вы пишите IOWR_ALTERA_AVALON_PIO_DATA(0x00001000(тысяча), 0x55)




Acvarif
Спасибо.
Действительно. Механическая ошибка.
Все пишется и читается как и во внешний PIO.
Дальше больше... теперь застряло запись-чтение в регистры PHY.
Пока не могу уяснить - чтобы что-то записать в какой либо регистр PHY, нужно ли для этого
полностью инициализировать нужными данными все нужные регистры MAC Ethernet "eth_ocm"
или связь MAC с PHY должна работать сразу и без инициализации регистров MAC?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.