не, ребята, ну я вас умоляю ;О), вот ядро 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: