Объявление форума |
Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС. |
Полигон-2 » IBM PC-совместимое. До 2000 года включительно » Это не "дура", это FMonster |
<<Назад Вперед>> | Страницы: 1 2 3 4 5 6 * 7 8 9 | Печать |
justontime
Full Member
Откуда: СПб Всего сообщений: 236 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 10 сен. 2016 |
Fagear написал: Неплохое объяснение с примером - Может кто-нибудь быстро введёт "чайника" в курс дела?https://wiki.osdev.org/ISA_DMA |
rus
Advanced Member
Всего сообщений: 298 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 24 нояб. 2014 |
Ну а коли вопрос правильный, позволю себе некоторые разглагольствования на тему. )) Насколько я понимаю, все источники будут отдавать сигнал в формате I2S, так? Думаю, существуют в природе (специально вопрос не изучал) недорогие интегральные смесители сигнала I2S с опорной частотой 96кГц. Не лучше ли будет разместить на плате один такой сумматор с общей для всех источников линией MClock, которому все наводки в компе будут нипочём? Разместить его поближе к заднему брекету с разъёмами, и после него останется применить всего ОДИН, но качественный ЦАП, какой-нибудь 20-битный, SNR не менее 110 дБ. Ну и весь аналоговый тракт будет максимально коротким и максимально изолированным, бережно защищённым. Или всё-таки на каждый горшок своя крышка, т.е. свой ЦАП, перетяжка линий к одному месту, суммация всех ЦАПов обычным стереомикшером на плате? Вообще, например, с экономической точки зрения что выйдет дороже, несколько ЦАПов с аналоговым микшером, или I2S-микшер и один ЦАП? |
Fagear
Advanced Member
Откуда: Москва, САО Всего сообщений: 1228 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 22 янв. 2010 |
pahan, justontime спасибо большое за ликбез! Значит, в случае CSM всё примерно так: 1) ПО выделяет в ОЗУ кусок под данные для PCM DAC (не более 64 КБ) и пихает туда сэмплы. 2) ПО маскирует нужный DRQ (1 или 3). 3) ПО настраивает DMA контроллер (указание канала, адреса на буфер, размера и прочее). 4) ПО демаскирует DRQ. 5) ПО пишет в AY чип по адресу BASE+0x00 номер регистра "0xFF" (управление портом I/O B). 6) ПО пишет в AY чип по адресу BASE+0x01 данные для регистра 0xFF, чтобы дёрнуть пин 7, отключив аналоговый выход C от микшера и разрешив выдачу DRQ. 7) ПО пишет ряд байт в AY чип по адресу BASE+0x00 и BASE+0x01, чтобы заставить канал C чипа AY генерировать запрос DMA. 8) AY по таймеру выходом C дёргает DRQ. 9) DMA контроллер выдаёт DACK и начинает передачу данных для CSM. На последнем пункте вопрос - DMA контроллер выставляет какой-то адрес для CSM или в этом нет необходимости? Ведь канал DMA жёстко указывает на эту плату. rus написал: Вообще нет, даже не близко. Насколько я понимаю, все источники будут отдавать сигнал в формате I2S, так? Ни один из чипов не отдаёт I2S. В цифре вообще отдают только два - OPL2 и OPL3, и у тех свой проприетарный Ямаховский интерфейс к своим же ЦАПам. Остальные чипы отдают сразу аналог. |
rus
Advanced Member
Всего сообщений: 298 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 24 нояб. 2014 |
Нда, жаль. Тогда остаётся только защищать линии насколько это возможно. Любая ошибка, и вся работа с чистотой звучания насмарку будет. |
Fagear
Advanced Member
Откуда: Москва, САО Всего сообщений: 1228 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 22 янв. 2010 |
rus написал: Для этого и идёт многостадийная отладка. Сначала несколько вариантов отдельных мини-плат, затем будет полноразмерный образец. Тогда остаётся только защищать линии насколько это возможно. Любая ошибка, и вся работа с чистотой звучания насмарку будет. |
Кай
Гость
Divine Assassin Откуда: извне (from beyond) Всего сообщений: 13709 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 8 авг. 2010 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 1 декабря 2018 15:30 Сообщение отредактировано: 1 декабря 2018 15:31
Fagear, а поставить вертикальные заземлённые шины через все слои на все зоны? Высотой 6,3? |
Fagear
Advanced Member
Откуда: Москва, САО Всего сообщений: 1228 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 22 янв. 2010 |
Кай написал: Да там слоёв то будет 2... Во всяком случае я буду избегать 4-х до последнего. а поставить вертикальные заземлённые шины через все слои А так - для начала нужно уместить всё. А там видно будет. |
pahan
Advanced Member
Откуда: Химки, М.О. Всего сообщений: 1070 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 13 мар. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 4 декабря 2018 0:07 Сообщение отредактировано: 4 декабря 2018 0:08 Тут можно дополнить только, что буфер этот должен быть в пределах первого мегабайта, но при программировании под DOS это соблюдается почти автоматически 1) ПО выделяет в ОЗУ кусок под данные для PCM DAC (не более 64 КБ) и пихает туда сэмплы. Указывать канал на контроллере не нужно - просто у каждого из 4х каналов свои регистры адреса, размера, режима работы. Кроме этого, если выставить режим autoinitialize, по завершении передачи адрес и размер автоматически сбросятся на ранее заданные значения. Более того, если НЕ использовать autoinitialize, канал по завершении передачи автоматически будет замаскирован. 3) ПО настраивает DMA контроллер (указание канала Не знаю подробностей работы с AY, но в принципе возможен и другой режим - записью в request register DMA контроллера вы можете начать передачу по нужному каналу в любой момент, не дожидаясь, пока устройство физически дёрнет DRQ. 8) AY по таймеру выходом C дёргает DRQ. DMA контроллер выставляет адрес в памяти, с которого надо забрать данные и выставляет MEMR и IOW. DACK однозначно определяет какое устройство эти данные должно забрать с указанного адреса, отдельно выставлять адрес устройства (и вообще знать его) контроллеру не нужно. Собственно, возможная неправильная реакция какого-либо устройства в этот момент явно запрещена неактивным сигналом AEN. На последнем пункте вопрос - DMA контроллер выставляет какой-то адрес для CSM или в этом нет необходимости? Ведь канал DMA жёстко указывает на эту плату. |
Fagear
Advanced Member
Откуда: Москва, САО Всего сообщений: 1228 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 22 янв. 2010 |
pahan написал: Там очень замудрённый механизм запроса DRQ. Не знаю подробностей работы с AY pahan написал: Тогда, получается, CSM должен уметь работать двумя способами. DACK однозначно определяет какое устройство эти данные должно забрать с указанного адреса, отдельно выставлять адрес устройства (и вообще знать его) контроллеру не нужно. 1) Через DMA. 2) Прямой записью в порт. Потому что при работе через DMA от софта обращений по адресам CSM не будет (судя по кривому GAL - оно сработает просто при наличии DACK, IOW и разрешении, исходящего от AY). Однако некоторые игрушки явно пишут PCM данные просто в порт BASE+0x02: Что явно идёт в разрез с работой по DMA. [CSM] Write on port 222h, len 1, val 88h Надо пытаться запустить CSM на железе и смотреть на реальных железяках чего там куда обращается. |
pahan
Advanced Member
Откуда: Химки, М.О. Всего сообщений: 1070 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 13 мар. 2015 |
Конечно. И ещё в идеале выдавать прерывание. Повторюсь - для ПО (CPU) способа узнать, что передача по DMA данных конкретному устройству закончена, нет. Обычно делают так - устройство,увидев импульс TC, генерит IRQ. Тогда, получается, CSM должен уметь работать двумя способами. Да, этого абсолютно достаточно, чтобы принять данные. Потому что при работе через DMA от софта обращений по адресам CSM не будет (судя по кривому GAL - оно сработает просто при наличии DACK, IOW и разрешении, исходящего от AY). Думаю принципиальна здесь пересылка по одному байту за раз. Да, это можно реализовать через DMA, есть даже специальный режим у DMA-контроллера - single transfer, когда из всего буфера будет пересылаться 1 байт за раз, а в промежутках CPU будет позволено тоже что-то полезное сделать. Но всё это из серии - "но зачем???". DMA имеет смысл именно для довольно больших блоков (те самые килобайты). Однако некоторые игрушки явно пишут PCM данные просто в порт BASE+0x02:Что явно идёт в разрез с работой по DMA. [CSM] Write on port 222h, len 1, val 7eh Вообще утверждение, что DMA - самый быстрый режим передачи, заслуживает серьёзного расследования и разрушения мифа. Во времена всяких XT это действительно было так - частоты проца и DMA-контроллера (а у него не больше 4,77 МГц) близки, процы даже на элементарные команды тратили кучу тактов. Думаю, с 486х (а может даже 386х, считать надо) любая возня с DMA будет реально неоправдана - на простейшие команды не больше нескольких тактов, да ещё на в разы более высокой частоте... |
<<Назад Вперед>> | Страницы: 1 2 3 4 5 6 * 7 8 9 | Печать |
Полигон-2 » IBM PC-совместимое. До 2000 года включительно » Это не "дура", это FMonster |
0 посетителей просмотрели эту тему за последние 15 минут |
В том числе: 0 гостей, 0 скрытых пользователей |
Последние | |
[Москва] LIQUID-Акция. Сливаются разъемы CF МС7004 и 7004А на AT и XT Пайка термотрубок Проммать s478 PEAK 715VL2-HT ( Full-Size SBC) Подскажите по 386 материке по джамперам. |
Самые активные 5 тем | |