ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
27 сентября
3697 Топик полностью
=mse= (09.01.2004 12:34, просмотров: 1) ответил =AK= на Я в асме для AVR не силен, опиши своими словами
здеся 

clr mac_ll
movw mac_lm,r2
movw mac_hm,r2 ;очистка МАС


ldi zl,low(FIR_coeff_25*2)
ldi zh,high(FIR_coeff_25*2) ;загрузка индекса коэффициентов
ldi temporary2,200 ;кол-во tap`s

FIR_loop:

cpi yl,low(circular_buffer) 1
brne test_by_load_pointer 2
cpi yh,high(circular_buffer)
brne test_by_load_pointer ;проверка на выход за кольцевой буффер выборок АЦП

ldi yl,low(circular_buffer+circular_buffer_depth) 1
ldi yh,high(circular_buffer+circular_buffer_depth) 1
; если вышли - становимся на начало
test_by_load_pointer:

ld sy_s_h,-y ;берём выборку сигнала 2
ld sy_s_l,-y 2

lpm coff_s_h,z+ ;берём коэффициент фильтра 3
lpm coff_s_m,z+ 3
lpm coff_s_l,z+ 3
adiw zl,1 1 ;выравниваю индекс коэффициентов на границу 4 байт (можно выкинуть, если сделать массив коэфф. из 3-х байтных чисел)
;ld temporary1,z+

mul coff_s_l,sy_s_l ;signed 24x16 2
movw mres_0,r0 1

mulsu sy_s_h,coff_s_m 2
movw mres_2,r0 1

muls sy_s_h,coff_s_h 2
add mres_3,r0 1

mul coff_s_m,sy_s_l 2
add mres_1,r0 1
adc mres_2,r1 1
adc mres_3,zero_reg 1

mulsu sy_s_h,coff_s_l 2
sbc mres_3,zero_reg 1
add mres_1,r0 1
adc mres_2,r1
adc mres_3,zero_reg 1

mulsu coff_s_h,sy_s_l 2
add mres_2,r0 1
adc mres_3,r1 1

adition_mac:
add mac_ll,mres_0 1 ;суммирование signed
adc mac_lm,mres_1 1
adc mac_mm,mres_2 1
adc mac_hm,mres_3 1

ldi temporary1,0 1 ;sign propagate
sbrc mres_3,7 2
ldi temporary1,$ff

adc mac_hh,temporary1 1

;movw r0,xl
;sub r0,yl
;sbc r1,yh
;or r0,r1
dec temporary2 1
brne FIR_loop 2 ;цикл, если не уже ;О)

fir_exit: