Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по алгоритму отправки пакета UDP в W5100
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Fast Ethernet/Gigabit Ethernet/FibreChannel
DSIoffe
Здравствуйте все!
При отправке пакета UDP через W5100 в datasheet предлагают сделать следующее (упоминаю только то, о чём хочу спросить):
1.Прочитать указатель передающего буфера Sn_TX_WR.
2.Сделать из него физический адрес для буферной памяти W5100.
3.Отправить send_size байтов данных в буферную память.
4.Записать в Sn_TX_WR новое число, равное сумме его исходного (прочитанного) значения и размера блока передаваемых данных send_size.
5.Передать в W5100 команду Send.
Если при передаче блока данных в W5100 не переполнится адресный счётчик, то вопросов нет.
Если же он переполнится, то в datasheet велят его обнулить и продолжать запись данных в W5100 с базового адреса буфера передатчика. Это тоже понятно. А вот что записывать после этого в Sn_TX_WR? В псевдокоде из datasheet написано Sn_TX_WR += send_size, то есть если делать это в лоб, то в Sn_TX_WR окажется число, превышающее максимально допустимый адрес. Я подозреваю, что надо просто записать туда последнее значение адресного счётчика. Или как?
Осознать тексты драйвера для AVR я не могу, не настолько знаю C.
Заранее признателен.
uriy
Исходники от визнета, мы их использовали.
Код
void send_data_processing(SOCKET s, uint8 *data, uint16 len)
{
    uint16 ptr;
    ptr = IINCHIP_READ(Sn_TX_WR0(s));
    ptr = ((ptr & 0x00ff) << 8) + IINCHIP_READ(Sn_TX_WR0(s) + 1);
    write_data(s, data, (uint8 *)(ptr), len);
    ptr += len;
    IINCHIP_WRITE(Sn_TX_WR0(s),(uint8)((ptr & 0xff00) >> 8));
    IINCHIP_WRITE((Sn_TX_WR0(s) + 1),(uint8)(ptr & 0x00ff));
}


ptr+=len; просто складывается.
Сергей Борщ
Цитата(DSIoffe @ Feb 15 2010, 14:05) *
1.Прочитать указатель передающего буфера Sn_TX_WR.
2.Сделать из него физический адрес для буферной памяти W5100.
...
то есть если делать это в лоб, то в Sn_TX_WR окажется число, превышающее максимально допустимый адрес. Я подозреваю, что надо просто записать туда последнее значение адресного счётчика. Или как?
Или как. W5100 тоже сделает из этого указателя адрес.
DSIoffe
Ага. Спасибо большое.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.