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

 
 
> Как определить, когда завершена транзакция чтения?
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
 
Start new topic
Ответов
novartis
сообщение Jun 5 2014, 13:21
Сообщение #2


Местный
***

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



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



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

 


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


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