[an error occurred while processing this directive]
Lexa5 - му!
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

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

Отправлено 432 09 января 2004 г. 15:13

Ещё раз просмотрел Ваш вариант программы от 31.12.03 г. Если Вы можете, то укажите источник,где такая программа написанна. Но это явно не рабочая программа. Программисты AD таких программ не пишут. Скорее всего это заготовка программиста, которая каким-то образом попала к Вам. Она не работает и не имеет смысла.
Теперь по поводу программы от 06.01.04 г.
2-я и 3-я строчка очень похожи на вычисления коэффициента масштабирования(при использовании 32-х битного числа). Так как они написанны - это не имеет логического смысла. Должно быть так:
1 MR=MX0*MY0 (SS);
2 SR=ASHIFT MR1 BY 4 (HI);
3 SR=SR OR LSHIFT MR0 BY (LO);
4 DM(I2,M1)=SR1;
По команде ASHIFT с положительным кодом биты операнда сдвигаются влево; по той же команде с отрицательным кодом биты операнда сдвигаются вправо. 32-х разрядная выходная группа дополняется влево по знаку (самый старший бит входного значения дублируется влево), а вправо - нулями. Биты, сдвигаемые влево от старшего бита [SR(31)] в 32-разрядном поле назначения,опускаются. Биты, сдвигаемые в право от младшего бита [SR(0)] в 32-разрядном поле назначения, также опускаются.
Теперь об умножении:
при сдвиге влево на один бит - получаем умножение на два;
при сдвиге влево на два бита - получаем умножение на четыре;
и так далее.
При сдвиге вправо на один бит - получаем деление на два;
при сдвиге вправо на два бита - получаем деление на четыре;
и так далее.
Эти сдвиги можно делать для целых беззнаковых чисел в пределах разрядной сетки числа.
Такое умножение позволяет использовать как делитель или множитель только целые числа,кратные 2-м.
Модуль МАС в процессоре позволяет умножать дробные числа (например:
0.456 * (-0.385).) Только для этого необходимо представить эти числа в определенном формате, например в самом распрастраннёном формате 1.15
Старший бит этого формата - это знак. Если он равен нулю, то число считается положительным.Если он равен единице , то число считается отрицательным. Остальные 15 бит числа используются для представления Вашего числа в разрядной сетке единицы. Например, Вам необходимо умножить 1234567 на 7654321. Принимаете 10000000 за 1, тогда 7654321 будет равно 7654321/10000000=0.7654321. А второе число будет равно
0.1234567. Теперь МАС может это перемножить. Ух, устал. УДАЧИ! 432-ой.


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

Ответы


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

Имя (обязательно): 
Пароль: 
E-mail: 

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

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

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


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

E-mail: info@telesys.ru