ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
25 ноября
362439 Топик полностью
Гудвин, волшебник (17.10.2012 08:06 - 12:04, просмотров: 182) ответил Vladimir Ljaschko на Звучит интересно.
Право не верить дано каждому :) Тем не менее в LPC17 это работает. Лично пробовал I2S на 96/192 кГц. А на 8-48 это штатно работает уже около 3 лет в пепелаце. Да еще и scatter/gather заюзан - в памяти размещена таблица дескрипторов DMA для двух буферов. Буферы последовательно выводятся посредством DMA в I2S, используя FIFO I2S. Триггер запроса пересылки установлен на половину глубины FIFO. И вся эта кухня работает полностью автономно - без всяческого участия ЦПУ. В момент окончания пересылки одного буфера генерится прерывание, в котором просто устанавливаю флажок. Основной цикл отслеживает это дело для подкачки в освободившийся буфер новой порции данных. Ну а в основном цикле производится чтение с usb флэшки, используя встроенный в usb DMA (один 512 байтный сектор передается тоже без участия ЦПУ), декодирование MP3/обработка WAV, обработка CAN протокола чейнджера и пр. На максимальном битрейте MP3 остается еще процентов 20-30 времени даже без совмещения процесса декодирования с чтением USB флэшки (лень было заморачиваться). LPC - гарный камешек, ибо все вышеописанное живет при тактовой частоте 72 МГц. Даже не пришлось пользовать максимальные 100... Ну встроенный в сам DMA контроллер FIFO на 4 слова работает вообще прозрачно и автономно... Scatter/gather вообще кульная штучка - при желании можно такие замысловатые автономные последовательности пересылок изображать... Ложка дегтя - встроенный в LPC17 DAC не поддерживает DMA Ну и до кучи: В I2S встроена фишка - если уж ничего не помогло (по каким то причинам не пришло новое значение в нужный момент), то выводится предыдущее значение, дабы избежать "щелчков" и пр. Насчет звуковых дел и джиттера в LPC: 1. Основной PLL для тактирования - вполне на уровне. 2. Тактирование I2S : для получения всего основного ряда семпл-рейтов 8000,11025...44100, 48000 Гц от тактовой частоты периферии приходится использовать "дробный" делитель I2S. На четных коэффициентах проблем нет. А вот на нечетных присутствует джиттер. Тактировать качественные DAC нельзя - влияние джиттера проявляется в виде довольно сильного шума (а вроде бы такая херня - всего 1 "лишний" импульс тактовой 72 МГц периодически). Поэтому для них только отдельное тактирование от внешнего кварцевого генератора. Я нашел приемлемое решение - применил DAC UDA1334ATS со встроенным PLL. Этот PLL тактируется от сигнала переключения I2S "левый-правый". Так как этот "левый-правый" получается делением сигнала с "дробного" делителя на довольно большой коэффициент N, джиттер уменьшается во столько же раз. А встроенный в DAC PLL его усредняет. На выходе получается вполне достойный результат...