Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос новичка
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
niktagor
Здравствуте. Пытаюсь тут научиться работать c BF535 EZ-KIT Lite. Поигрался немножко с лампочками и кнопками, теперь нужно переходить к сигналам. Да вот загвоздка, не могу понять принцип работы стандартного примера Talkthrough. Не ясно, где хранятся сами данные, полученные от кодека. Вот кусок кода, в котором все должно быть:
CODE

Check_AD1885_ADC_Left:

CC = BITTST (R5, M_Left_ADC); /* Check Left ADC valid bit */
IF !CC JUMP Check_AD1885_ADC_Right; /* If valid data then save ADC sample */
p0.l = rx_buf;
p0.h = rx_buf;
p0 += LEFT; /* Get AD1885 Left channel input sample */
nop;
nop;
nop;
R1 = W[P0];
P1.l = Left_Channel; /* Save to data holder for processing */
p1.h = Left_Channel;
nop;
nop;
nop;
W[P1] = R1;

Check_AD1885_ADC_Right:
CC = BITTST (R5, M_Right_ADC); /* Check Right ADC valid bit */
IF !CC JUMP Valid_Frame; /* If valid data then save ADC sample */
p0.l = rx_buf;
p0.h = rx_buf;
p0 += RIGHT; /* Get AD1885 Right channel input sample */
nop;
nop;
nop;
R1 = W[P0];
P0.l = Right_Channel; /* Save to data holder for processing */
p0.h = Right_Channel;
nop;
nop;
nop;
W[P0] = R1;


user_dsp_applic:

/***** DSP processing is finished, now playback results to AD1885 *****/
Playback_Audio_Data:
R6 = W[P1]; /* Fetch Left Channel */
R7 = W[P0]; /* Fetch Right Channel */

/********************************************************************************
*********************
* Insert DSP Algorithms Here *
********************************************************************************
*********************/

p2.l = tx_buf;
p2.h = tx_buf;
p2 += LEFT;
W[P2] = R6; /* ...output Left data to Slot 3 */


p2 += -LEFT;
p2 += RIGHT; /* ...output Right data to Slot 4 */
W[P2] = R7;

/* ...house keeping prior to RTI */
Valid_Frame:
RTS;


Одна часть моего мозга из этого текста видит, что данные хранятся в двухбайтовых переменных Left_Channel и Right_Channel. А другая утверждает, что их должно быть явно больше. Помогите пожалуйста разобраться, что к чему. Пойму - отсюда уже буду крутиться. Я ни в асме, ни в си не силен. Может и зря взялся за это дело. Да, и кстати, что означают все эти 256 bit frame size, 16-bit words и 16 channels? Заранее спасибо. На всякий случай прикрепил весь текст программы.
hobgoblin
Цитата
Не ясно, где хранятся сами данные, полученные от кодека.


В файле processing_isr.asm вверху написано где хранятся принимаемые и передаваемые данные:
Код
rx_buf[16] - DSP SPORT recieve buffer
Slot # Description                             DSP Data Memory Address
------ --------------------------------------    -------------------------------------------------
0        AD1885 Tag Phase                        DM(rx_buf + 0) = DM(rx_buf + TAG_PHASE)
1      Status Address Port                       DM(rx_buf + 1) = DM(rx_buf + STATUS_ADDRESS_SLOT)
2      Status Data Port                           DM(rx_buf + 2) = DM(rx_buf + STATUS_DATA_SLOT)
3      Master PCM Capture (Record) Left Chan.    DM(rx_buf + 3) = DM(rx_buf + LEFT)
4      Master PCM Capture Right Channel        DM(rx_buf + 4) = DM(rx_buf + RIGHT)
5 - 15 NOT USED

tx_buf[16] - DSP SPORT transmit buffer
Slot # Description                                   DSP Data Memory Address
------ --------------------------------------  --------------------------------------------------
0        ADSP-219x Tag Phase                        DM(tx_buf + 0) = DM(tx_buf + TAG_PHASE)
1      Command Address Port                       DM(tx_buf + 1) = DM(rx_buf + COMMAND_ADDRESS_SLOT)
2      Command Data Port                          DM(tx_buf + 2) = DM(rx_buf + COMMAND_DATA_SLOT)
3      Master PCM Playback Left Channel        DM(tx_buf + 3) = DM(rx_buf + LEFT)
4      Master PCM Playback Right Channel        DM(tx_buf + 4) = DM(rx_buf + RIGHT)
5 - 15 NOT USED

********************************************************************************
*********************/

То есть в массивах rx_buf и tx_buf. А уже в процедуре обработки прерывания данные из нужных ячеек массива rx_buf копируются в Left_Channel и Right_Channel. Процедура обслуживания прерывания вызывается по каждому отсчету, поэтому двух байтов для каждого канала достаточно.

Цитата
Да, и кстати, что означают все эти 256 bit frame size, 16-bit words и 16 channels?

Это формат работы последовательного порта - он работает в многоканальном режиме с 16битными данными, потому что кодек выдает на кажом интервале дискретизации сразу данные левого канала, правого канала и служебную информацию. Почитайте подробнее даташит на кодек и главу руководства по процессору, где описывается последовательный порт.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.