Автор: anthony_k , 9 октября 2014
Имеется внешний мост pci-isa на it8888, есть желание запустить на нем имеющиеся звуковые платы. Процесс успешен на 66%, т.к. из 3 имеющихся, одна не заработала. Это гусь макс. Он не отвечает на команды по адресам своих командных регистров. Хотя в адресном пространстве виден. Есть плата с распаяным таким же мостом. На ней он работает. Для локализации поиска проблемы я сделал следующее:
http://www.naviburg.ru/tmp/3/6.jpg
отключил впаяный мост подняв на нем ножку идсел и линию ад22 прицепил на внешний мост, подняв на нем эту ногу тоже. еще прицепил необходимые линии serirq и ppdmareq ppdmagnt. мост заработал, биос прописал его конфигурацию. в результате ситуация повторилась, гусь не работает, остальные платы работают. при инициализации кодека сигнал SBHE становится высоким, но никакие биты говорящие о том, что произошла инициализация в адресном пространстве не появляются

буду признателен за идеи как его запустить.

п.с. гусь не пнп, остальные две платы пнп

п.п.с.
здесь успешный запуск одной из других плат
http://www.youtube.com/watch?v=nlYXbxQneG8&list=UULAp_q5UwwtJTYMRLuEtrvw

п.п.п.с.
здесь инит гуся, если кому интересно, но он бесполезен если устройство не отвечает на команды
#include <dos.h> #include <conio.h> #include "forte.h" #include "ultraerr.h" #include "gf1os.h" #include "extern16.h" #include "defs16.h" #include "codecos.h" #include "codec.h" #include "proto16.h" extern ULTRA16_DATA _codec_data; extern IMAGE16 _image_codec; extern ULTRA_DATA _gf1_data; static void waste_time(unsigned int val) { int i,j; for (i=0;i<val;i++) for (j=0;j<1000;j++) ; } int Ultra16Probe(gus_base,config) int gus_base; ULTRA16_CFG *config; { unsigned char version=0; unsigned int setup; unsigned char bits; unsigned int port; int enable_16; int temp; port = config->base_port; _codec_data.type = config->type; _codec_data.base_port = port; _codec_data.addr = port+CODEC_ADDR; _codec_data.data = port+CODEC_DATA; _codec_data.status = port+CODEC_STATUS; _codec_data.pio = port+CODEC_PIO; switch(config->type) { case 0: break; /* daughter card */ case 1: /* UltraMAX */ { setup = 0x00; /* default codec to disabled */ enable_16 = FALSE; if (port >= 0x300 && port <= 0x3f0) { enable_16 = TRUE; bits = (port - 0x30C) >> 4; /* isolate bits */ setup |= bits; } if (enable_16) setup |= 0x40; if (config->rec_dma >= 4) setup |= 0x10; /* record is 16 bit channel */ if (config->play_dma >= 4) setup |= 0x20; /* play is 16 bit channel */ _codec_data.setup = setup; /* save to toggle later */ outp(gus_base+0x106,setup); /* program the interface */ waste_time(100); /* probably not needed ... */ break; /* UltraMax */ } } /* clear any pending IRQs */ (void)inp(_codec_data.status); outp(_codec_data.status,0); for (temp=0;temp<1000;temp++) { if (inp(_codec_data.base_port) & CODEC_INIT) waste_time(1); /* probably not needed ... */ else { version = Ultra16Revision(); if ((version >= 1) && (version < 15)) { /* Don't combine if an UltraMax */ if ((config->play_dma == config->rec_dma) && (config->type != 1)) _image_codec.ic |= SINGLE_DMA; ENTER_CRITICAL; outp(_codec_data.addr,CODEC_MCE|IFACE_CTRL); outp(_codec_data.data,_image_codec.ic); outp(_codec_data.addr,IFACE_CTRL); LEAVE_CRITICAL; return(ULTRA_OK); } } } if ((version >= 1) && (version < 15)) { /* Don't combine if an UltraMax */ if ((config->play_dma == config->rec_dma) && (config->type != 1)) _image_codec.ic |= SINGLE_DMA; ENTER_CRITICAL; outp(_codec_data.addr,CODEC_MCE|IFACE_CTRL); outp(_codec_data.data,_image_codec.ic); outp(_codec_data.addr,IFACE_CTRL); LEAVE_CRITICAL; return(ULTRA_OK); } else return(NO_ULTRA); }
Содержимое данного поля является приватным и не предназначено для показа.

BBCode

  • HTML-теги не обрабатываются и показываются как обычный текст
  • You may use the following BBCode tags:
    • [align]
    • [b]
    • [code]
    • [color]
    • [font]
    • [hr]
    • [i]
    • [img]
    • [list]
    • [quote]
    • [s]
    • [size]
    • [spoiler]
    • [sub]
    • [sup]
    • [table]
    • [u]
    • [url]
  • Адреса веб-страниц и email-адреса преобразовываются в ссылки автоматически.

i8088

11 лет 5 месяцев назад

Нашел datasheet, мост довольно сложный, проблема интересная.
Пока только мысль относительно отличий содержимого EEPROM на плате и на карте
Сравните PCI регистры когда работает встроенный мост и когда внешний.
Другие non-PNP ISA card, например ISA-POST card работают?
init для какой OS Вы писали?

И мне кажется может быть IDSEL не брать с платы, использовать карту штатно.
А потом сравнить инициализацию регистров и при нахождении отличий модифицировать
драйвер моста или написать драйвер делающий необходимую инициализацию

Кстати как решается проблема ISA DMA штатно, если нет PC/PCI разъема?
Производитель припайку проводов вряд-ли предусматривал:)

anthony_k

11 лет 5 месяцев назад

производитель просто говорит подсоединяйте провода для прерываний и дма. к слову, гусь должен отвечать на команды и без дма. идсел пробовал по-всякому. к ад22 подключил из-за того, что на этот номер функции идет программирование регистров моста из биос. но можно и из епром взять конфиг, я туда то же самое прописал. думаю что дело не в регистрах, сравнивал уже миллион раз и регистры моста и lpc. драйвер для моста никакой не нужен. задание конфига там очень простое. у меня нет не пнп карт пока кроме гуся чтобы попробовать. но пост карта просто обязана работать, потому что даже на самом мосте есть место для распайки индикатора и можно его заказать уже с ним. инит гуся я скопировал из сдк к нему, просто чтобы показать как он происходит. я сейчас в ручном режиме команды прописываю команды в его ио пространство, вернее там всего пара бит нужна в его контрол регистр чтобы он заработал, но не хочет

anthony_k

11 лет 5 месяцев назад

обнаружил разный уровень сигнала на контакте iochrdy. там где гусь работает везде 5в, там, где не работает 2.2в. разными номиналами он подтянут к 5в как и другие сигналы. на внешнем мосту практически все сигналы через 5 ком, на плате с распяным большинство на 8.2ком, но на iochrdy и некоторые другие 1ком

i8088

11 лет 5 месяцев назад

Уровень IOCHRDY смотрели осциллографом?
Поскольку это выход со стороны звуковой карты для удлинения
шинного цикла(низким уровнем), следует тщательно
проверить осциллографом что там делается.
Может быть просто проблема с уровнями сигналов
(типа звуковоя карта пытается выставить "1", но из-за
повышеного входного тока ITE, это не удается).

Из широко распространенных non-PNP карт могу предложить
проверить с ISA модемом. Они в большинстве своем имеют
перемычки для отключения PNP и ручного выставления IRQ
и I/O port address.

Да и про DMA пока забудем, надо проверить простое read/write
I/O портов.

anthony_k

11 лет 5 месяцев назад

попробовал iochrdy через 1ком подтянуть, почти ничего не изменилось. стало 2.8 вместо 2.2. не могу понять почему так, на иса разъем этот сигнал идет прямо с 8888. измерял обычным мультиметром, с осциллографом пока проблема.

i8088

11 лет 5 месяцев назад

К сожалению без осциллографа трудно разобраться. Непонятно это заниженный уровень "1" , завышенный "0" или там нормальные TTL импульсы.
А с другими ISA картами, но с этим же мостом какой уровень?

Просто в порядке первого что пришло в голову : может быть звуковая карта
требует удлинения шинного цикла низким уровнем сигнала IOCHRDY, но ITE
почему-то этого не делает.

anthony_k

11 лет 5 месяцев назад

этот уровень на пине а10 всегда одинаковый. хоть стоит плата в слоте хоть нет. сам чип 8888 держит его каким-то образом на заниженном уровне. хотя тут же рядом на матери 5в на этом выводе

i8088

11 лет 5 месяцев назад

Посмотрел в datasheet, этот вход может быть и выходом
в режиме ISA-master(стр9).То есть когда ISA карта является
инициатором, а ITE исполнителем. Похоже у Вас так и есть.
Проверьте вход MASTER# N11, пересмотрите datasheet
(Я бегло смотрел и возможно что-то упустил).

anthony_k

11 лет 5 месяцев назад

в общем ты прав, надо смотреть осциллографом

удалось вернуть высокий урвень iochrdy на 5в (просаживал напряжение светодиод), но это не помогло