Знаковая арифметка (АВР) - торможу
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено Глупый пИнгвин 14 апреля 2005 г. 14:30

Пытаюсь сделать на АВР анолог инструкции FIRS. Нужно сложить два отсчета АЦП, сумму умножить на коэффициент и прибавить к аккумулятору. На мою беду АЦП 16-битный, так что сумма получается 17-битной. Для беззнаковых чисел написал функцию, код которой внизу (если хтмл не съест), все работает. Не догоняю, как ее переделать для отсчетов АЦП со знаком.


// Symmetric FIR tap
// R19:R18 - X1 (unsigned)
// R1:R0 - X2 (unsigned)
// R16:R17 - coefficient *2^15, signed
// R23:R22:R21:R20 - accumulator
firs_su:
lds r20, fir_acc
lds r21, fir_acc+1
lds r22, fir_acc+2
lds r23, fir_acc+3
add r18, r0
adc r19, r1 // 17-bit result in C:R19:R18
brcc firs_su_no_carry
add r22, r16
adc r23, r17
firs_su_no_carry:
clr r2
mul r16, r18
add r20, r0
adc r21, r1
adc r22, r2
adc r23, r2
mul r16, r19
add r21, r0
adc r22, r1
adc r23, r2
mulsu r17, r18
sbc r23, r2
add r21, r0
adc r22, r1
adc r23, r2
mulsu r17, r19
add r22, r0
adc r23, r1
sts fir_acc, r20
sts fir_acc+1, r21
sts fir_acc+2, r22
sts fir_acc+3, r23
ret

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

Ответы



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

E-mail: info@telesys.ru