[an error occurred while processing this directive]
А теперь давайте ту самую мою задачу (+)
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено SM 26 июля 2005 г. 12:17
В ответ на: Я кстати обманулся (+) отправлено SM 26 июля 2005 г. 11:39

Приходят 32-битные слова где в четных битах один канал, в нечетных другой. Надо из них собрать 16-битные слова (то есть из входных 32 бит получить два 16-битных), затем вызвать подпрограмму-обработчик два раза для каждого канала, на выходе она дает байт на канал, и собрать обратно из двух байт такой-же поток через бит 16-битных слов. У меня это вот так смотрится (12 татков без учета вызова подпрограмм):


; AR0 pointer to input data
; AR1 pointer to output data
.ref process_data

mov dbl(*ar0+),pair(LO(AC0)) ; read register pair from memory
bfxtr #05555h,AC0,AC2 ; extract low byte CH #1 from odd bits
bfxtr #0AAAAh,AC0,AC0 ; extract low byte CH #2 from even bits
bfxtr #05555h,AC1,AC3 ; extract high byte CH #1 from odd bits
bfxtr #0AAAAh,AC1,AC1 ; extract high byte CH #2 from even bits
or AC3 << #8, AC2 ; combine low & high CH#1
or AC1 << #8, AC0 ; combine low & high CH#2
call process_data ; AC0 input & output. CH#2
swap ac0,ac2 ; swap AC0 & AC2
call process_data ; AC0 input & output. CH#1
bfxpa #05555h,AC0,AC0 ; pack CH1 byte to odd bits
bfxpa #0AAAAh,AC2,AC2 ; pack CH1 byte to even bits
or AC2,AC0 ; combine odd & even bits
mov AC0,*ar1+ ; write to output buffer


Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru