Автор: 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 лет 11 месяцев назад

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

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

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

anthony_k

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

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

anthony_k

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

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

i8088

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

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

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

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

anthony_k

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

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

i8088

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

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

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

anthony_k

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

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

i8088

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

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

anthony_k

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

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

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