_jisuanfudu: [url=home.php?mod=space&uid=72445]@[/url] 计算幅度
[url=home.php?mod=space&uid=72445]@[/url] 入r0= 实部,r1= 虚部
@ 出r0 = 幅度
@ Mag ~=Alpha * max(|I|, |Q|) + Beta * min(|I|, |Q|)
@ Alpha * Max + Beta * Min
push {r1-r3,lr}
movs r0, r0
bpl _shibubushifushu
mvns r0, r0 @ 是负数转成正数
adds r0, r0, # 1
_shibubushifushu: @ 实部不是负数
movs r1, r1
bpl _xububushifushu
mvns r1, r1 @ 是负数转成正数
adds r1, r1, # 1
_xububushifushu: @ 虚部不是负数
cmp r0, # 0
bne _panduanxubushibushi0
mov r0, r1
pop {r1-r3,pc}
_panduanxubushibushi0:
cmp r1, # 0
bne _jisuanfudu1
pop {r1-r3,pc}
_jisuanfudu1:
ldr r2, = 31066 @ Alpha q15 0.948059448969
ldr r3, = 12867 @ Beta q15 0.392699081699
cmp r1, r0
bhi _alpha_min_beta_max
_alpha_max_beta_min:
muls r0, r0, r2
muls r1, r1, r3
asrs r0, r0, # 15
asrs r1, r1, # 15
adds r0, r0, r1
movs r1, # 1
pop {r1-r3,pc}
_alpha_min_beta_max:
muls r0, r0, r3
muls r1, r1, r2
asrs r0, r0, # 15
asrs r1, r1, # 15
adds r0, r0, r1
movs r1, # 0
pop {r1-r3,pc}
_lvboqi:
@滤波器
@R0=地址,R1=长度,r2=表指针地址,r3=ADC数值
@出R0=结果
push {r1-r7,lr}
ldr r5, [r2] @读出表指针
lsls r6, r1, # 1
strh r3, [r0, r5] @数值写到滤波器缓冲区
adds r5, r5, # 2
cmp r5, r6
bne _lvboqimeidaohuanchongquding
movs r5, # 0
_lvboqimeidaohuanchongquding:
str r5, [r2]
movs r7, # 0
_lvboqixunhuan:
cmp r5, r6
bne _lvbozonghe
movs r5, # 0
_lvbozonghe:
<