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

 
 
 
Reply to this topicStart new topic
> Как определить, когда завершена транзакция чтения?
Dvorkin
сообщение May 30 2014, 10:24
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 5-03-05
Из: Воронеж
Пользователь №: 3 094



Устройство (endpoint) подключено к шине PCI Express. Оно посылает последовательность TLP WrMem, данные записываются в память хоста. Как драйвер, выполняющийся на хосте, может узнать, что данные уже записаны в память?

- pci_map_single()
- старт операции чтения, опрос состояния устройства
- pci_unmap_single()

Можно опрашивать регистр состояния устройства или получить от него прерывание, но все-таки нужно знать, когда полностью завершена транзакция и можно делать pci_unmap_single().
Хост работает под Linux Ubuntu. Устройство сделано на основе Xilinx XAPP1171.
Go to the top of the page
 
+Quote Post
Dvorkin
сообщение Jun 5 2014, 09:03
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 5-03-05
Из: Воронеж
Пользователь №: 3 094



Цитата(Dvorkin @ May 30 2014, 18:34) *
Устройство (endpoint) подключено к шине PCI Express. Оно посылает последовательность TLP WrMem, данные записываются в память хоста. Как драйвер, выполняющийся на хосте, может узнать, что данные уже записаны в память?

- pci_map_single()
- старт операции чтения, опрос состояния устройства
- pci_unmap_single()

Можно опрашивать регистр состояния устройства или получить от него прерывание, но все-таки нужно знать, когда полностью завершена транзакция и можно делать pci_unmap_single().
Хост работает под Linux Ubuntu. Устройство сделано на основе Xilinx XAPP1171.


Решено.
Сначала я опрашивал регистр состояния CDMA, установленного на endpoint устройстве. Это есть неправильно. После того, как я сделал ожидание прерывания, все проблемы устранились.
Go to the top of the page
 
+Quote Post
novartis
сообщение Jun 5 2014, 13:21
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-09
Из: Свердловский регион
Пользователь №: 52 845



Не понятно, а регистр состояния CDMA намного раньше выставляется, чем кидается прерывание?
Не знаком с XAPP1171, но у нас сделано так:
драйвер дает задание для DMA,
DMA выставляет в регистр состояния "выполняю работу",
после окончания выполнения задания (пересылки всех данных) DMA выставляет в регистр состояния "выполнил работу" и кидает прерывание.
То есть вот в нашей системе абсолютно без разницы - читать регистр состояния или ожидать прерывание.
Наш программист даже опцию такую сделал (для отладочных целей): работать только по регистру состояния или работать по прерываниям.
Go to the top of the page
 
+Quote Post
Dvorkin
сообщение Jun 6 2014, 06:10
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 5-03-05
Из: Воронеж
Пользователь №: 3 094



Цитата(novartis @ Jun 5 2014, 21:31) *
Не понятно, а регистр состояния CDMA намного раньше выставляется, чем кидается прерывание?
Не знаком с XAPP1171, но у нас сделано так:
драйвер дает задание для DMA,
DMA выставляет в регистр состояния "выполняю работу",
после окончания выполнения задания (пересылки всех данных) DMA выставляет в регистр состояния "выполнил работу" и кидает прерывание.
То есть вот в нашей системе абсолютно без разницы - читать регистр состояния или ожидать прерывание.
Наш программист даже опцию такую сделал (для отладочных целей): работать только по регистру состояния или работать по прерываниям.


Цитата(novartis @ Jun 5 2014, 21:31) *
Не понятно, а регистр состояния CDMA намного раньше выставляется, чем кидается прерывание?

Нет. Можно сделать задержку, но я не делал.

Чтение регистра состояния выполняется по шине PCIe. Может, это мешало? Хотя ведь передача по шине дуплексная.

Но раньше при чтении больших блоков памяти (4 МБ) были ошибки - некоторые фрагменты приемного буфера не заполнялись данными. . Теперь ошибок нет.

Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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