ReadMe
Манифест
Электроника
Программное обеспечение:
ЖКИ
VLSI
Разные мелочи
Интерфейсы накопителей
Файловые системы
Элементы пользовательского интерфейса
Модули режимов
Координаторы
Отладочный координатор
Пользовательский интерфейс
Фотографии
 
==> Orfey2

Програмная часть: MP3-декодер VS1001

Файл модуля управления MP3-декодера называется VLSI.asm.inc.

Инициализация

Выполняется согласно документации, аппаратный сброс происходит только при включении плейера или смене режимов, программный (процедурой vlsi_Init, затем vlsi_Open) - перед воспроизведением каждого файла.

Иногда при включении плейера, после выполнения програмного сброса, декодер не выставляет готовность на линии DREQ. Почему - не понятно. Однако на повторный программный сброс поведение декодера нормализуется.

Воспроизведение файла

Начинается с вызова процедуры vlsi_Open; затем циклически вызывается vlsi_SendBuf, которая передает буфер, указанный в регистре Z, декодеру; в конце воспроизведения необходимо вызвать vlsi_Close - это процедура завершает воспроизведение файла в соответствии с документацией.

Рекомендованная проверка фактической скорости входного потока (позволяющая определить сбои в работе декодера) не предусмотрена. Практика не обнаружила здесь какой либо проблемы (но моя коллекция музыки периодически проверяется утилитой mp3_check...).

В случае, если нужно прервать воспроизведение текущего файла (инициированный пользователем переход на другую дорожку), vlsi_Close вызывать не обязательно. Специальной команды ПАУЗА у декодера нет, поэтому режим паузы в плейере реализован простой блокировкой потока данных. Таким образом, между нажатием кнопки ПАУЗА и фактическим прерыванием звучания может пройти пара секунд для файлов с очень низким битрейтом (16-32 кбит/с) - пока не иссякнет входной буфер декодера.

Параметры воспроизведения

Во время воспроизведения код управления может вызывать процедуру vlsi_SetTones. Она возвращает характеристики воспроизводимого файла (текущее время, битрейт, частоту семплирования, признак "Стерео"), а также устанавливает громкость и управляющие биты (SM_DIFF - инверсия левого, SM_BASS - удаление средних частот).

Следует отметить, что установка этих бит, на мой взгляд, не привносит особого улучшения в звук, но зато - особенно включение SM_BASS - подтормаживает декодер. Это приводит к явным заиканиям на 320 кбит/с-файлах.

Параметры воспроизведения хранятся в энергонезависимой памяти ATmega32, считываются при включении (процедурой vlsi_Init) и сохраняются в конце воспроизведения файла (процедурой vlsi_Close).

Изменение громкости выполняется внешним кодом через процедуру vlsi_ChVol - она модифицирует параметры Громкость и Балланс, учитывая верхнее и нижнее ограничение, затем вызывает процедуру vlsi_CalcVol, которая вычисляет из параметров Громкость и Балланс параметры Громкость Левого и Громкость Правого и заполняет соответствующие переменные для процедуры vlsi_SetTones.

Вычисление происходит примерно так: VolR = MainVol; VolL = MainVol; if Pan > 0 then VolL -= Pan else VolR += Pan;.

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

Владимир