~~NOTOC~~ \\ {{:b_mp3_dspic.png|MP3 Decoder for dsPIC}} ====== Программный MP3 декодер для dsPIC ====== ===== Скачать ===== ==== Актуальная версия ==== * **1.0.1042** (16 июля 2008) {{mp3_dspic:ref:mp3_dspic_c30_1_0_1042.rar|скачать}} @ 1 МБ * Первая версия на этом сайте. Архив содержит исходные коды декодера, проект для MPLAB и тестовые mp3 файлы. Файл ''..\doc\test_result.txt'' содержит отчеты о декодировании тестовых файлов. ---- ~~UP~~ ===== Описание ===== MP3 декодер для контроллеров Microchip DSC dsPIC основан на хорошо известном fixed-point MP3 декодере [[http://www.underbit.com/products/mad/|MAD]]. Вообше говоря, проект основан на порте MAD для TI TMS320C55xx, который можно найти в сети (автор: Grigory Abuladze). Мной были переписаны все асмовые функции, проверено выравнивание (компилятор CCS подразумевает что char = 16 бит), проверены все операции, критичные к порядку байт в слове (TMS320 - big-endian, а dsPIC - little-endian), все массивы выделяются статически на этапе компиляции. dsPIC33 MAD MP3 декодер распространяется на условиях [[http://www.underbit.com/resources/license/gpl/|GPL]] ~~UP~~ ===== Требования ===== ; Объем программной памяти : ~29 кБ исполняемого кода + ~17 кБ константы (18% от объема флэш-памяти dsPIC33FJ256GP710) ; Объем ОЗУ : ~25 кБ + ~1.5 кБ стек (88% от объема SRAM dsPIC33FJ256GP710) \\ Исходя из требований, понятно, что на сегодняшний день единственный контроллер,на котором можно запустить этот проект - это [[http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1335&dDocName=en024679|dsPIC33FJ256GP710]]. Это связано только с требованиями к ОЗУ, производительности 16-битных DSC от Microchip достаточно, чтобы реализовать декодер потоков с низким значением kbps на любом контроллере dsPIC30. ~~UP~~ ===== Производительность ===== Архив с исходными кодами содержит тестовые музыкальные фрагменты с различными битрейтами. Производительность оценивалась как время необходимое на декодирование фрагмента, при этом в оценку не входят функции считывания исходного файла в буфер потока и вывода результирующего raw потока в файл. Частота тактирования контроллера устанавливалась равной 80 МГц (40 MIPS). Результаты тестирования говорят о том, что текущая версия декодера способна декодировать в реальном времени (на 40 MIPS): * моно потоки с любым битрейтом * стерео потоки с частотой выборок до 32 кГц и битрейтом до 128 кбит/с При этом для декодирования стерео-потока 32 кГц @ 128 кбит/с необходимо 33.6 MIPS производительности, а для декодирования стерео-потока 8 кГц @ 20 кбит/с требуется 6.8 MIPS производительности. Полный отчет о тестировании приведен в файле ''..\doc\test_results.txt''. ~~UP~~ ===== Ограничения ===== Текущая версия декодера имеет следующие ограничения: * MPEG1 Layer 1 и Layer 2 не поддерживаются * Используется 16-битная арифметика * ошибка в функции ''mad_port_stereo_intensity_lsf()'' FIXME ~~UP~~