Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Возможно ли записать 1 байт в регистр PCI платы  (Прочитано 8681 раз)
0 Пользователей и 1 Гость смотрят эту тему.
MikePol
Постоялец

ru
Offline Offline

« : 29-08-2006 05:31 » 

У меня есть плата PCI. Она использует 4 байта в пространстве ввода - вывода.
Вопрос : могу ли я записать один байт (например второй), не затирая остальные 3.
в общем например ситуация такая. в 0 байте записан 0 , в 1-м   -  1 , во 2-м - 2 , в 3-м - 3.
Я хочу переписать второй байт на 9 , чтобы получилось  0, 1, 9, 3.
Возможно ли это сделать используя конструкцию WRITE_PORT_UCHAR((PUCHAR) (pdx->portaddr + 2) , 9) ?
(вопрос задаю , потому что слышал что pci устройства работают только с двойными словами , то есть в моей ситуации будет ситуация 0,0,9,0).
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 29-08-2006 08:02 » 

Шина PCI - 32 разрядная, и действительно при записи одного байта в порт - все равно погонится 32 бита по шине.
но вот поддержка "возможности" записи одного байта (если не ошибаюсь) только в случае поддержки ее со стороны контролелера на плате PCI...  то есть по шине ей придет адрес не выровненный на границу двойного слова, и длинна меньше двойного слова. но вот от платы зависит - правильно ее декодер адреса интерпретирует или нет.
точно уверен, наш железячник(мы сами PCI контроллер ваяли) - такое не делал, скорее всего просто отбросил младшие два бита адреса - ибо бессмысленно. в противном случае ему там целый хитрый декодер ставить пришлось бы, а так - сумматором обойтись можно.
более точную информацию можете получить от ваших разработчиков.

PS такое имеет смысл делать только в том случае если память/регистры у вас 8-и битные.
« Последнее редактирование: 29-08-2006 08:04 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
MikePol
Постоялец

ru
Offline Offline

« Ответ #2 : 29-08-2006 08:41 » 

Большое спасибо. Наш железячник разобрался похоже.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #3 : 29-08-2006 15:20 » 

Странно - а прочесть содержимое байт и поменяв только третий записать туда все 4 не подошло?
Записан

А птичку нашу прошу не обижать!!!
MikePol
Постоялец

ru
Offline Offline

« Ответ #4 : 30-08-2006 04:12 » 

Да подошло бы конечно. Тут интересно просто было , как должно это работать.
Записан
maaaaaad
Гость
« Ответ #5 : 01-09-2006 20:38 » 

Вне зависимости от того сколько битов на шине PCI читать, писать можно и байтами и словами и т.д.
А как это будет работать - вопрос железа. Есть у шины каналы CBE. На 32 разрядной есть 4 канала CBE (на каждый байт). Это сигнал разрешения работы с каждым байтом. При записи на устройство 1 байта в устройство проскакивает 4байта и например накой CBE - 0100, и записывает себе устройство в свой регистр только второй байт. Я делал именно так. Возможен вариант, когда забили на CBE, тогда будет перезаписываться дворд. Жаль я не на работе - кинул бы кусок железного кода было бы наглядней.
« Последнее редактирование: 01-09-2006 20:41 от maaaaaad » Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 03-09-2006 09:23 » 

Мад, так ты и PCI контроллер сам писал?
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
maaaaaad
Гость
« Ответ #7 : 03-09-2006 22:44 » 

не весь, конечно, один человек вряд ли быстро с этим справился, verlog логика для предоставления configuration space и логика обработки кадров была, так сказать, взята в безвоздмездное пользование Улыбаюсь
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines