Цитата(Methane @ Jan 20 2009, 19:46)

Не въеду. К примеру драйвер TV тюнера говорит что по адрессу 0x08b0000 находится видео ОЗУ. После этого устройство, может по этому адрессу тупа слать данные?
(PCI Express Compiler User Guide)
Я могу в tx_desc0[127:0] прописать что это 0x08b0000, длинну, что это ОЗУ, и просто выдавать данные? Просто по нажатию к примеру на кнопку на карточке, я поднимаю tx_req0, дожидаюсь tx_ack0, и начинаю последовательно слать данные в видео ОЗУ?
А может устройство само прочитать что-то из видоОЗУ? Я не понял как. Нужно послать запрос на чтение по какому-то адресу, и устройство должно как-то сообразить, что на этот запрос нужно ответить.
Проясните, пожалуйста, для какого PCI Вы собираетесь разрабатывать устройство.
Для прояснения вашего вопроса Вам необходимо ознакомиться со спецификацией PCI.
Если вы спрашиваете об обычном параллельном PCI, то идея такова:
1. Драйвер записывает во внутренний адрес своего устройства адрес памяти по которому это устройство должно произвести операцию.
2. Драйвер этого же устройства вписывает команду устройству начать пересылать данные.
3. Устройство выставляет запрос REQ (хочу порулить шиной), и получив GNT начинает само генерировать циклы передачи данных (Read/Write - без разницы).
4. По окончанию пересылки данных устройство выставляет прерывание.
5. Драйвер этого устройства убеждается, что все данные успешно добрались до адресата (очень важное место !!!) и только после этого сообщает программе вызвавшей драйвер об успешном завершении операции.
Вы это хотели узнать или что-то другое ?
P.S. Устройство не различает куда будет производиться запись (или чтение): в системное ОЗУ, в видео ОЗУ - устройство просто обращается к нужному адресу (тот который драйвер дал, а драйверу виднее куда/откуда, чего и сколько пересылать).
А вот с PCI-E я не работал пока еще, поэтому подсказать как на нем всё надо делать.