Аудиопорт
Процессорная система «DЕ2-70 Media Computer» включает аудиопорт, который соединён с микросхемой аудиокодека (Coder/Decoder) на плате DE2-70. По умолчанию аудиокодек настроен на скорость оцифровки 48К образцов в секунду. Аудиопорт обеспечивает возможность ввода аудиоинформации через разъём микрофона на стенде DE2-70 и возможность вывода аудиоинформации через выходной разъём. Аудиопорт включает 4 буфера FIFO, которые используются для хранения вводимых и выводимых данных. Вводимые данные сохраняются в левом и правом каналах читаемых буферов FIFO, а выводимые данные хранятся в левом и правом каналах записываемых буферов FIFO. Все буферы FIFO имеют максимальную глубину 128 32-битных слов.
Программируемый интерфейс аудиопорта состоит из четырех 32-битных регистров, как показано на рис. 3.16. Регистр управления имеет адрес 0x10003040. Для получения информации о состоянии аудиопорта его необходимо прочитать, а для того, чтобы выполнить управляющие установки - записать. Бит RE этого регистра обеспечивает возможность прерывания процессорной системы для ввода данных. Установка этого бита в 1 позволит контроллеру аудиопорта сформировать прерывание процессора, когда читаемый буфер FIFO заполнится на 75% или более. Причем бит RI в этом случае установится в единицу, чтобы указать, что прерывание произошло. Сигнал прерывания снимется после извлечения данных из читаемых буферов FIFO до тех пор, пока их заполнение станет менее 75% процентов. Бит WE реализует возможность прерывания процессорной системы при выводе данных. Установка этого бита в 1 позволит аудио контроллеру сформировать сигнал прерывания, когда в записываемых буферах FIFO останется менее 25% свободного места. При этом бит WI установится в 1, чтобы указать, что прерывание произошло. Потом он может быть очищен путём освобождения записываемых буферов более, чем на 25%. Биты CR и СW, показанные на рис. 3.16, предназначены для очистки буферов записи и чтения, соответственно. Функция очистки активируется посредством установки бит CR и СW в единицу. Функция остаётся активной до тех пор, пока соответствующие биты не будут сброшены в 0.
Рис. 3.16 – Регистры аудиопорта
Доступный по чтению регистр Fifospace показан на рис. 3.16. Он содержит четыре 8 - битных поля. Поля RARC и RALC отображают число слов, хранимых в настоящий момент времени в правом и левом входных буферах FIFO, соответственно. Поля WSRC и WSLC показывают число слов, доступных для заполнения в текущий момент времени, в правом и левом выходных буферах FIFO. После очистки всех буферов FIFO аудиопорта, величины, содержащиеся в Fifospace, станут следующими RARC=RALC=0 и WSRC=WSLC=128.
Информация из регистров Left data и Right data считывается процессором для выполнения записи аудиоинформации в буферы FIFO ввода, и записывается - для вывода аудио. Когда данные читаются из этих регистров, то они извлекаются из вершины читаемых буферов FIFO, и когда данные записываются в эти регистры, они загружаются в записываемые буфера FIFO.
Фрагмент кода на языке С, который использует аудиопорт, показан в листинге 16. Код проверяет, когда глубина правого или левого порта FIFO превысит 75% полноты и передаёт данные из этих FIFO в буферную память. Этот код входит в состав приложения AMP в раздел «Sample programs» под именем «Media».
Листинг 16. Пример кода, который использует аудиопорт
volatile int * audio_ptr = (int *) 0x10003040; //адрес аудиопорта
/* Используется для аудио записи/воспроизведения */
int fifospace, leftdata, rightdata;
int record = 0, play = 0, buffer_index = 0;
int left_buffer[BUF_SIZE];
int right_buffer[BUF_SIZE];
…
fifospace = *(audio_ptr + 1); // читаем fifospace регистр
if ( (fifospace & 0x000000FF) > 96 ) // проверяем значение поля RARC
{
// Сохраняем данные из аудио буферов
while ( (fifospace & 0x000000FF) && (buffer_index < BUF_SIZE) )
{
left_buffer[buffer_index] = *(audio_ptr + 2); //сохраняем аудиоданные
right_buffer[buffer_index] = *(audio_ptr + 3);
++buffer_index;
fifospace = *(audio_ptr + 1); // читаем fifospace регистр
}
}
…
Дата добавления: 2015-05-30; просмотров: 996;