ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
27 сентября
3690 Топик полностью
=mse= (09.01.2004 11:32, просмотров: 1) ответил =AK= на Вот еще один бенчмарк
не, ребята, ну я вас умоляю ;О), вот ядро FIR, исполняется 53 такта в среднем, напишите на 51, Н8, и посчитайте результат... это не отвлечённые цифры, это конкретная задача, можно использовать в изделии. И она определяет область применения МК. Однозначно и жёстко. И тут не катят рассказы про компилятор, пмехоустойчивость и прочее. Если не сделать на АВРе, значит надо ставить более скоростной и более "восприимчивый к помехам" МК. Дальше только хуже. ;О)

clr mac_ll
movw mac_lm,r2
movw mac_hm,r2
clr mac_hu

ldi zl,low(FIR_coeff_25*2)
ldi zh,high(FIR_coeff_25*2)
ldi temporary2,200

FIR_loop:

cpi yl,low(circular_buffer)
brne test_by_load_pointer
cpi yh,high(circular_buffer)
brne test_by_load_pointer

ldi yl,low(circular_buffer+circular_buffer_depth)
ldi yh,high(circular_buffer+circular_buffer_depth)

test_by_load_pointer:

ld sy_s_h,-y
ld sy_s_l,-y

lpm coff_s_h,z+
lpm coff_s_m,z+
lpm coff_s_l,z+
adiw zl,1
;ld temporary1,z+

mul coff_s_l,sy_s_l
movw mres_0,r0

mulsu sy_s_h,coff_s_m
movw mres_2,r0

muls sy_s_h,coff_s_h
add mres_3,r0

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

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

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

adition_mac:
add mac_ll,mres_0
adc mac_lm,mres_1
adc mac_mm,mres_2
adc mac_hm,mres_3

ldi temporary1,0
sbrc mres_3,7
ldi temporary1,$ff

adc mac_hh,temporary1

dec temporary2
brne FIR_loop

fir_exit: