реклама на сайте
подробности

 
 
26 страниц V  « < 6 7 8 9 10 > »   
Reply to this topicStart new topic
> Ethernet + Cyclone + Nios
dim99
сообщение Nov 26 2009, 10:05
Сообщение #106


Частый гость
**

Группа: Свой
Сообщений: 120
Регистрация: 8-02-09
Из: Мытищи
Пользователь №: 44 580



Проще выложить то, что есть все и сразу:
Прикрепленный файл  hello_world.rar ( 4.77 килобайт ) Кол-во скачиваний: 281
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Nov 26 2009, 10:15
Сообщение #107


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



для полноты картины еще содержимое регистров MAC/PHY после инициализации. ну и контроллеров dma после сброса.
да, еще чему равно (IORD_ALTERA_AVALON_SGDMA_STATUS(SGDMA_TX_BASE/*mi->tx_sgdma->base*/) в
Код
  while ( (IORD_ALTERA_AVALON_SGDMA_STATUS(SGDMA_TX_BASE/*mi->tx_sgdma->base*/) & ALTERA_AVALON_SGDMA_STATUS_BUSY_MSK) ) {
           if(timeout++ == ALTERA_TSE_SGDMA_BUSY_TIME_OUT_CNT) {
            //tse_dprintf(4, "WARNING : TX SGDMA Timeout\n");
            return 0;//error//ENP_RESOURCE;  // avoid being stuck here
           }
  }
Go to the top of the page
 
+Quote Post
dim99
сообщение Nov 26 2009, 10:42
Сообщение #108


Частый гость
**

Группа: Свой
Сообщений: 120
Регистрация: 8-02-09
Из: Мытищи
Пользователь №: 44 580



Так, микросхему не настраиваю и только читаюб регистры:
0 - контрольный - 0х1140
1 - статус - 0х7969

После мас инициализации следующие данные:
контрольного регистра 0х00008213

По дма:
контроль - 0
IORD_ALTERA_AVALON_SGDMA_STATUS(SGDMA_TX_BASE/*mi->tx_sgdma->base*/) - 0
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Nov 26 2009, 13:46
Сообщение #109


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(dim99 @ Nov 26 2009, 16:42) *
После мас инициализации следующие данные:
контрольного регистра 0х00008213

1. включена опция замены MAC-адреса в пакете, нужно сконфигурировать mac0 и mac1
2. включен loopback - зачем?
Go to the top of the page
 
+Quote Post
dim99
сообщение Nov 26 2009, 13:51
Сообщение #110


Частый гость
**

Группа: Свой
Сообщений: 120
Регистрация: 8-02-09
Из: Мытищи
Пользователь №: 44 580



Цитата(vadimuzzz @ Nov 26 2009, 16:46) *
1. включена опция замены MAC-адреса в пакете, нужно сконфигурировать mac0 и mac1
2. включен loopback - зачем?


mac0 и mac1 вроде правильно настроены, потому чот пакет принимаемый на компе содержит mac адрес правильный.

loopback уже от нечего делать включал, вдруг заработает )

пытался вручную HW_OWN_BY выставить на 0 чтобы не формировалась ошибка дескриптора, в итоге пакет не отправился.
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Nov 26 2009, 14:11
Сообщение #111


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(dim99 @ Nov 26 2009, 16:42) *
1 - статус - 0х7969

бит 2 не установлен - линк отсутствует

Цитата(dim99 @ Nov 26 2009, 16:42) *
По дма:
контроль - 0
IORD_ALTERA_AVALON_SGDMA_STATUS(SGDMA_TX_BASE/*mi->tx_sgdma->base*/) - 0

странно, а в какой момент взводится сигнал BUSY? изначально ведь 0. и еще про сброс dma:
Цитата
Software can reset the core by writing to this bit twice. Upon the
second write, the core is reset. The logic which sequences the
software reset process then resets itself automatically.

обратите внимание на слово twice (это из мана по dma)
Go to the top of the page
 
+Quote Post
dim99
сообщение Nov 26 2009, 14:23
Сообщение #112


Частый гость
**

Группа: Свой
Сообщений: 120
Регистрация: 8-02-09
Из: Мытищи
Пользователь №: 44 580



Цитата(vadimuzzz @ Nov 26 2009, 17:11) *
обратите внимание на слово twice (это из мана по dma)


Так вроде использую SGdma или он использует ядро dma?
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Nov 26 2009, 14:43
Сообщение #113


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(dim99 @ Nov 26 2009, 20:23) *
Так вроде использую SGdma или он использует ядро dma?

sgdma, конечно. 5-й том, глава 21
Go to the top of the page
 
+Quote Post
dim99
сообщение Nov 27 2009, 06:08
Сообщение #114


Частый гость
**

Группа: Свой
Сообщений: 120
Регистрация: 8-02-09
Из: Мытищи
Пользователь №: 44 580



Может вручную попробовать создать дескриптор?
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Nov 27 2009, 06:42
Сообщение #115


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



ошибку со сбросом sgdma исправили? что сейчас в регистрах после сброса? в какой момент взводится сигнал BUSY в контроллере sgdma? линк появился в PHY Status? код последний выложите.

Цитата(dim99 @ Nov 27 2009, 12:08) *
Может вручную попробовать создать дескриптор?

дело не в дескрипторе, а в том, что устройство занято. вопрос в том, в какой момент после сброса это происходит. в отладчике пускаете?
Go to the top of the page
 
+Quote Post
dim99
сообщение Nov 27 2009, 11:29
Сообщение #116


Частый гость
**

Группа: Свой
Сообщений: 120
Регистрация: 8-02-09
Из: Мытищи
Пользователь №: 44 580



Цитата(vadimuzzz @ Nov 27 2009, 09:42) *
ошибку со сбросом sgdma исправили? что сейчас в регистрах после сброса? в какой момент взводится сигнал BUSY в контроллере sgdma? линк появился в PHY Status? код последний выложите.
дело не в дескрипторе, а в том, что устройство занято. вопрос в том, в какой момент после сброса это происходит. в отладчике пускаете?


что-то не могу понять смысл установки этого бита.
Цитата
4 BUSY R/C (1)(3)) Indicates that descriptors are being processed;
the linked list of descriptors is not yet completed.

(1) This bit must be cleared after a read is performed. Write one to clear this bit.
(3) This bit is continuously updated by the hardware.


Этот бит показывает, что дескрипторы обрабатываются или создаются
список дескрипторов еще не готов.

1) бит должен быть очищен после того, как операция чтения выполнена. для очистки запишите 1
3) этот бит постоянно обновляется железом.

то есть 0 это занятое устройство?
как тогда его освободить?

Сообщение отредактировал dim99 - Nov 27 2009, 11:50
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Nov 27 2009, 13:24
Сообщение #117


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



этот бит взводит функция alt_avalon_sgdma_construct_mem_to_stream_desc()
Цитата
This function constructs a single SG-DMA descriptor in the memory specified in
alt_avalon_sgdma-descriptor *desc for an Avalon-MM to Avalon-ST transfer. The
destination (write) data for the transfer goes to the Avalon-ST interface connected to the SG-DMA
controller's streaming write port. The function sets the OWNED_BY_HW bit in the descriptor's control
field, marking the completed descriptor as ready to run. The descriptor is processed when the
SG-DMA controller receives the descriptor and the RUN bit is 1.

пожалуй, плохая идея вызывать функцию так
Код
        alt_avalon_sgdma_construct_mem_to_stream_desc(
           (alt_sgdma_descriptor *) desc, // descriptor I want to work with
           (alt_sgdma_descriptor *) desc,// pointer to "next"
           (alt_u32 *) ActualData,                     // starting read address
           (length),                                  // # bytes
           0,                                        // don't read from constant address
           1,                                        // generate sop
           1,                                        // generate endofpacket signal
           0);                                       // atlantic channel (don't know/don't care: set to 0)

указатель на "next" д.б. другим (нужен еще один дескриптор).
вот почему:
Цитата
The function sets the OWNED_BY_HW bit in the descriptor's control field, marking the completed
descriptor as ready to run. The descriptor is processed when the SG-DMA controller receives the
descriptor and the RUN bit is 1.
The next field of the descriptor being constructed is set to the address in *next. The
OWNED_BY_HW bit of the descriptor at *next is explicitly cleared. Once the SG-DMA completes
processing of the *desc, it does not process the descriptor at *next until its OWNED_BY_HW bit is
set. To create a descriptor chain, you can repeatedly call this function using the previous call's
*next pointer in the *desc parameter.

OWNED_BY_HW =1 значит, что дескриптор готов к обработке устройством и можно вызывать, например, alt_avalon_sgdma_do_sync_transfer(). второй дескриптор смысловой нагрузки не несет, затычка, но память под него выделить надо.
Цитата
This bit determines whether hardware or software has write access
to the current register.
When this bit is set to 1, the core can update the descriptor and
software should not access the descriptor due to the possibility of
race conditions. Otherwise, it is safe for software to update the
descriptor.
Go to the top of the page
 
+Quote Post
dim99
сообщение Nov 27 2009, 15:18
Сообщение #118


Частый гость
**

Группа: Свой
Сообщений: 120
Регистрация: 8-02-09
Из: Мытищи
Пользователь №: 44 580



Попробую сделать нормальный next descriptor и отправить.
Go to the top of the page
 
+Quote Post
dim99
сообщение Nov 30 2009, 07:59
Сообщение #119


Частый гость
**

Группа: Свой
Сообщений: 120
Регистрация: 8-02-09
Из: Мытищи
Пользователь №: 44 580



Попробовал сделать второй нормальный дескриптор:
определил его:
alt_sgdma_descriptor *desc = (alt_sgdma_descriptor *) DESCRIPTOR_MEMORY_BASE;
alt_sgdma_descriptor *currdescriptor_ptr = (alt_sgdma_descriptor *) DESCRIPTOR_MEMORY_BASE + 10;

и запустил debug:
дошел до
alt_avalon_sgdma_construct_mem_to_stream_desc( //&transmit_descriptors[buffer_counter]
/*(alt_sgdma_descriptor *)*/ &desc[0], // descriptor I want to work with
/*(alt_sgdma_descriptor *)*/ &currdescriptor_ptr[0],// pointer to "next"
(alt_u32 *) ActualData, // starting read address
(length), // # bytes
0, // don't read from constant address
1, // generate sop
1, // generate endofpacket signal
0); // atlantic channel (don't know/don't care: set to
Прикрепленное изображение


int desc_stat=1;
desc_stat = alt_avalon_sgdma_check_descriptor_status(desc);//if 0 then packet is good

Прикрепленное изображение


понятное дело пакет пошел нулевым.
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Nov 30 2009, 08:05
Сообщение #120


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата
alt_sgdma_descriptor *desc = (alt_sgdma_descriptor *) DESCRIPTOR_MEMORY_BASE;
alt_sgdma_descriptor *currdescriptor_ptr = (alt_sgdma_descriptor *) DESCRIPTOR_MEMORY_BASE + 10;

а смещение не маловато будет? сколько размер дескриптора? код еще выложите с последними правками, в памяти освежить. да, еще перед вызовом alt_avalon_sgdma_construct_mem_to_stream_desc поставьте чтение статус-регистров в sgdma, что там?
upd: лучше писать вот так:
Код
alt_sgdma_descriptor *currdescriptor_ptr = (alt_sgdma_descriptor *) DESCRIPTOR_MEMORY_BASE + sizeof(alt_sgdma_descriptor);
Go to the top of the page
 
+Quote Post

26 страниц V  « < 6 7 8 9 10 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 10:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.0147 секунд с 7
ELECTRONIX ©2004-2016