Hi All! Помогите разобраться с непосредственным програмированием регистров PLX PCI9030! Что не так? Регистры прописываются (те которые в документации указаны как перезаписываемые без проблем кроме: - регистр состояния PCISR. Мануал говорит, что биты можно сбросить записью единиц в сбрасываемые позиции. Биты не сбрасываются ни записью единиц, ни записью нулей; - регистры PCIBAR2 и PCIBAR3 всегда равны нулю, чего бы в них не писалось.) Осталось только указать рабочую зону портов и драйвер готов, а никак! Может необходима определённая последовательность записи регистров в локальной зоне? Но мануал ничего не оговаривает. Да, печатность ещё раз проверена - всё впорядке. Подробности: 1 - надо скачать поток данных для анализа и обработки в одном исследовании. Чисто вспомогательная функция; 2 - наша группа больше hard чем soft - программеры. Поэтому драйвер пишется на Delphi 7 - простота языка позволяет работать всей группе как програмисты; 3 - доступ к регистрам осуществляется путём редактирования таблицы разрешения доступа к портам методом указаным во 2-й или 3-й статье из цикла "Драйверы режима ядра" на примере программы CurrentDataTime Four-F. Спасибо автору! Да, данная методика работает и в Win2000 и в WinXP. 4 - вычитывание данных доступом через адресное пространство портов; 5 - поиски в Linux исходников пока не привели к положительным результатам, всё больше огрызки высокого уровневого доступа. Устраивают исходники непосредственной работы с регистрами микросхемы на любом языке (MASM, C, C++, Delphi); 6 - Jungo и прочее требует лицензии, а обойти не могу (см. 2). Заплатить за неё нереально - нам второй месяц зарплаты не платят; 7 - ниже приводятся состояния регистров микросхемы после того как я в ней покопался: Registr 00 - PCIIDR : 903010B5h Registr 04 - PCICR(RD/WR)+PCISR(only RD?) : 02800001h Registr 08: 00000000h Registr 0C: 00000008h Registr 10 - PCIBAR0(RD/WR) : FEAFFC00h Registr 14 - PCIBAR1(RD/WR) : 0000BC01h Registr 18 - PCIBAR2(?) : 00000000h Registr 1C - PCIBAR3(?) : 00000000h Registr 20: 00000000h Registr 24: 00000000h Registr 28: 00000000h Registr 2C: 00000000h Registr 30: 00000000h Registr 34: 00000000h Registr 38: 00000000h Registr 3C: 000000FFh Registr 40: 00000000h Registr 44: 00000000h Registr 48: 00800000h Registr 4C: 00000000h Registr 50: 00000000h Registr 54: 00000000h Registr 58: 00000000h Registr 5C: 00000000h Registr 60: 00000000h Registr 64: 00000000h Registr 68: 00000000h Registr 6C: 00000000h Registr 70: 00000000h Registr 74: 00000000h Registr 78: 00000000h Registr 7C: 00000000h Registr 80: 00000000h Registr 84: 00000000h Registr 88: 00000000h Registr 8C: 00000000h Registr 90: 00000000h Registr 94: 00000000h Registr 98: 00000000h Registr 9C: 00000000h Registr A0: 00000000h Registr A4: 00000000h Registr A8: 00000000h Registr AC: 00000000h Registr B0: 00000000h Registr B4: 00000000h Registr B8: 00000000h Registr BC: 00000000h Registr C0: 00000000h Registr C4: 00000000h Registr C8: 00000000h Registr CC: 00000000h Registr D0: 00000000h Registr D4: 00000000h Registr D8: 00000000h Registr DC: 00000000h Registr E0: 00000000h Registr E4: 00000000h Registr E8: 00000000h Registr EC: 00000000h Registr F0: 00000000h Registr F4: 00000000h Registr F8: 00000000h Registr FC: 00000000h Local registr 00 - LAS0RR(RD/WR) : 0FFFFF01h Local registr 04: 00000000h Local registr 08: 00000000h Local registr 0C: 00000000h Local registr 10: 00000000h Local registr 14: 00000000h Local registr 18: 00000000h Local registr 1C: 00000000h Local registr 20: 00000000h Local registr 24: 00000000h Local registr 28: 00000000h Local registr 2C: 00000000h Local registr 30: 00000000h Local registr 34: 00000000h Local registr 38: 00000000h Local registr 3C: 00000000h Local registr 40: 00000000h Local registr 44: 00000000h Local registr 48: 00000000h Local registr 4C: 00000024h Local registr 50: 10000000h Local registr 54: 00000000h Local registr 58: 00000000h Local registr 5C: 00000000h Local registr 60: 00000000h Local registr 64: 00000000h Local registr 68: 00000000h Local registr 6C: 00000000h Local registr 70: 00000000h Local registr 74: 00000000h Local registr 78: 00000000h Local registr 7C: 00000000h Local registr 80: FFFFFFFFh Local registr 84: FFFFFFFFh Local registr 88: FFFFFFFFh Local registr 8C: FFFFFFFFh Local registr 90: FFFFFFFFh Local registr 94: FFFFFFFFh Local registr 98: FFFFFFFFh Local registr 9C: FFFFFFFFh Local registr A0: FFFFFFFFh Local registr A4: FFFFFFFFh Local registr A8: FFFFFFFFh Local registr AC: FFFFFFFFh Local registr B0: FFFFFFFFh Local registr B4: FFFFFFFFh Local registr B8: FFFFFFFFh Local registr BC: FFFFFFFFh Local registr C0: FFFFFFFFh Local registr C4: FFFFFFFFh Local registr C8: FFFFFFFFh Local registr CC: FFFFFFFFh Local registr D0: FFFFFFFFh Local registr D4: FFFFFFFFh Local registr D8: FFFFFFFFh Local registr DC: FFFFFFFFh Local registr E0: FFFFFFFFh Local registr E4: FFFFFFFFh Local registr E8: FFFFFFFFh Local registr EC: FFFFFFFFh Local registr F0: FFFFFFFFh Local registr F4: FFFFFFFFh Local registr F8: FFFFFFFFh Local registr FC: FFFFFFFFh Work registr 00: FFFFFFFFh Work registr 04: FFFFFFFFh Work registr 08: FFFFFFFFh Work registr 0C: FFFFFFFFh Work registr 10: FFFFFFFFh Work registr 14: FFFFFFFFh Work registr 18: FFFFFFFFh Work registr 1C: FFFFFFFFh Work registr 20: FFFFFFFFh Work registr 24: FFFFFFFFh Work registr 28: FFFFFFFFh Work registr 2C: FFFFFFFFh Work registr 30: FFFFFFFFh Work registr 34: FFFFFFFFh Work registr 38: FFFFFFFFh Work registr 3C: FFFFFFFFh Work registr 40: FFFFFFFFh Work registr 44: FFFFFFFFh Work registr 48: FFFFFFFFh Work registr 4C: FFFFFFFFh Work registr 50: FFFFFFFFh Work registr 54: FFFFFFFFh Work registr 58: FFFFFFFFh Work registr 5C: FFFFFFFFh Work registr 60: FFFFFFFFh Work registr 64: FFFFFFFFh Work registr 68: FFFFFFFFh Work registr 6C: FFFFFFFFh Work registr 70: FFFFFFFFh Work registr 74: FFFFFFFFh Work registr 78: FFFFFFFFh Work registr 7C: FFFFFFFFh Work registr 80: FFFFFFFFh Work registr 84: FFFFFFFFh Work registr 88: FFFFFFFFh Work registr 8C: FFFFFFFFh Work registr 90: FFFFFFFFh Work registr 94: FFFFFFFFh Work registr 98: FFFFFFFFh Work registr 9C: FFFFFFFFh Work registr A0: FFFFFFFFh Work registr A4: FFFFFFFFh Work registr A8: FFFFFFFFh Work registr AC: FFFFFFFFh Work registr B0: FFFFFFFFh Work registr B4: FFFFFFFFh Work registr B8: FFFFFFFFh Work registr BC: FFFFFFFFh Work registr C0: FFFFFFFFh Work registr C4: FFFFFFFFh Work registr C8: FFFFFFFFh Work registr CC: FFFFFFFFh Work registr D0: FFFFFFFFh Work registr D4: FFFFFFFFh Work registr D8: FFFFFFFFh Work registr DC: FFFFFFFFh Work registr E0: FFFFFFFFh Work registr E4: FFFFFFFFh Work registr E8: FFFFFFFFh Work registr EC: FFFFFFFFh Work registr F0: FFFFFFFFh Work registr F4: FFFFFFFFh Work registr F8: FFFFFFFFh Work registr FC: FFFFFFFFh Ваше мнение? Списибо за ответы!
Мануал к PCI9030 говорит, что необходиму в регистры записывать -1 (FF...FF). Затем из них читать значения, которые используются при задании реальных адресов. Пробовал. При записи в любой из нижеперечисленных портов значения -1, они все сбрасываются в 0. Это имеет место и на уровне Ring3 и уровне Ring0 - то есть это аппаратное свойство микросхемы. Или это особенность протокола PCI? Но я нигде подобного не читал. Registr 10 - PCIBAR0(RD/WR) : FEAFFC00h Registr 14 - PCIBAR1(RD/WR) : 0000BC01h Registr 18 - PCIBAR2(?) : 00000000h Registr 1C - PCIBAR3(?) : 00000000h Накопал в Linux исходников и буду ваять wdm драйвер, а хотелось попроще. Тема закрыта.