Цитата(Andrew Su @ Jan 22 2011, 16:37)

Если вы выполняете байтное обращение к четному адресу, то
BHE# = 1 BLE# = 0 и данные на LAD[7:0]
Если вы выполняете байтное обращение к нечетному адресу, то
BHE# = 0 BLE# = 1 и данные на LAD[15:8]
Если вы выполняете словное обращение к четному адресу, то
BHE# = 0 BLE# = 0 и данные на LAD[15:8] и LAD[7:0]
Если вы выполняете словное обращение к нечетному адресу, то точный
порядок выполнения операции я не воспроизведу, но по моему, она выполняется
за два цикла, сначала один байт, а потом другой.
Если приведенная вами схема точна, то, по всей видимости, вам не удастся реализовать 16-битный
обмен без корректировки схемы.
Кстати, а каким образом старший байт шины LAD[15:8] предполагается завести в NEC? Или он туда заходит?
Удачи.
Спасибо за помощь!
На старшем байте LAD[15:8] - перемычки, чтобы можно было "снаружи" руками выставить нужный байт (номер платы, например), и затем его прочитать вместе с рабочей информацией на LAD[7:0]. Запись, соответственно в него не ведётся.
С чтением, собственно, проблем нет, наверно потому, что, как я прочитал на википедии, при чтении Byte Enable'ы можно игнорировать:
Цитата
For reads, it is always legal to ignore the byte enable signals and simply return all 32 bits; cacheable memory resources are required to always return 32 valid bits. The byte enables are mainly useful for I/O space accesses where reads have side effects.
http://en.wikipedia.org/wiki/Conventional_PCI я и читаю всё кучей, потом уже распределю какой байт куда.
А запись при работе происходит во второй и третий порты ( БАЗОВЫЙ АДРЕС+2 и БАЗОВЫЙ АДРЕС+3), по одному байту. Т.е. мне надо выставлять нужный байт на LAD[7:0], чтобы при этом на A[1:0] было 10 и 11 соответственно (кстати, сейчас понял, что непонятно есть ли инверсия на А[1:0], вроде на схеме не обозначенно, но в 8 битном режиме всё обменивается правильно, наверно есть, в понедельник проверю).
Если я правильно понял, то:
При записи байта в порт BASE+2 (чётный):
LBE0#/BLE# = 0
LBE1#/LA1 = 1 (в этом режиме он не инвертирован, судя по датащиту)
LBE2# -
LBE3#/HBE# = 1
и фактически происходит запись в первый (BASE+1) порт NEC'а ? (A1=1 A0=0 , + инверсия) И записывается туда байт как раз выставленный на LAD[7:0].
При записи байта в порт BASE+3:
LBE0#/BLE# = 1
LBE1#/LA1 = 1
LBE2# -
LBE3#/HBE# = 0
и фактически происходит запись в нулевой (BASE+0) порт NEC'а ? (A1=1 A0=1 , + инверсия) Причём для записи данные выставляются на LAD[15:8], и тут проблема

А получится ли у меня в принципе записать в нечётный порт данные с LAD[7:0]?
(несовпадение адресов можно программно подправить, как я понял, для записи в BASE+2 - писать в BASE+1, для записи в BASE+3 - в BASE+0)
Сообщение отредактировал Белый пони - Jan 22 2011, 18:24