Цитата
Начинаю пинговать свое устройство, читаю регистр статуса RxEvent,
Тогда 0 в RxLength - ожидаемый результат, т.к. после чтения этого регистра emac выбрасывает текущий фрейм.
Reading the RxEvent register signals to the CS8900A that the host is finished with the current frame, and wants to start processing the next frame.Поэтому читать надо
RxStatus - потом
RxLength и
только после того как фрейм вычитан и обработан -
прочитать RxEvent чтобы мак перешел к следующему фрейму.
PS: В вашей функции задержки в 10-100us не нужны, ну максимум вставить 1 NOP или продублировать обращение к порту. Мега дрыгает ногами медленнее сигналов ISA шины, так что задержки - лишние.
Ну и подключить CS89 к внешней шине не судьба была?
Чтение регистров было бы много проще:
Код
#define nic_ReadReg( addr )\
(*(V8 *)(NIC_BASE + (addr)))
#define nic_WriteReg(addr, val)\
(*(V8 *)(NIC_BASE + (addr)) = (val))