Могу предложить новый метод отладки всего этого хозяйства.
Я скрестил исходники telnet+uIP с моими исходниками эмуляции rtl8019as. И отлаживал уже в IDE. :)
Как и следовало ожидать, ничего не заработало. Кроме того, грузит процессор чуть ли не на 100%, но это, в принципе, понятно. Стал копать, выяснил, что в определённый момент отправка/приём деактивируется и больше не активируется. И момент этот - в самом конце приёма пакета. Если, однако, после приёма происходит отправка, то отправка/приём снова реанимируется. Получается, если приняли пакет, и ничего не отправили, то вилы.
А получается это, потому-что включение страницы регистров ты сделал так:
Код:
#define ETHERDEV_REG_PAGE(page) ETHERDEV_REG_WRITE(CR,(page << 6)|RD2|STP)
А в оригинале было так:
Код:
#define ETHERDEV_SELECT_REG_PAGE(page) \
do \
{ \
etherdev_reg_write(CR, etherdev_reg_read(CR) & ~(PS1 | PS0)); \
etherdev_reg_write(CR, etherdev_reg_read(CR) | (page << 6)); \
} while(0)
Поэтому, после того, как я сделал:
Код:
#define ETHERDEV_REG_PAGE(page) ETHERDEV_REG_WRITE(CR,(page << 6) | (ETHERDEV_REG_READ(CR) & 0x3F))
всё заработало и у меня.