|
发表于 2018-1-9 00:06:51
|
显示全部楼层
大佬你好,最近学习blheli的源码,有些是在是看不明白。想请大佬帮忙指点下,在这里先谢谢大佬了。
wait_for_comm:
; Update demag metric
mov Temp1, #0
jnb Flags0.DEMAG_ENABLED, ($+8); If demag disabled - branch
jnb Flags0.DEMAG_DETECTED, ($+5)
mov Temp1, #1
mov A, Demag_Detected_Metric ; Sliding average of 8, 256 when demag and 0 when not. Limited to minimum 120
mov B, #7
mul AB ; Multiply by 7
mov Temp2, A
mov A, B ; Add new value for current demag status
add A, Temp1
mov B, A
mov A, Temp2
mov C, B.0 ; Divide by 8
rrc A
mov C, B.1
rrc A
mov C, B.2
rrc A
mov Demag_Detected_Metric, A
clr C
subb A, #120 ; Limit to minimum 120
jnc ($+5)
mov Demag_Detected_Metric, #120
clr C
mov A, Demag_Detected_Metric ; Check demag metric
subb A, Demag_Pwr_Off_Thresh
jc wait_for_comm_wait ; Cut power if many consecutive demags. This will help retain sync during hard accelerations
setb Flags0.DEMAG_CUT_POWER ; Set demag power cut flag
IF NFETON_DELAY NE 0
All_nFETs_off
ELSE
En_Off ; For EN/PWM style drivers
ENDIF
wait_for_comm_wait:
jnb Flags0.T3_PENDING, ($+5)
ajmp wait_for_comm_wait
; Setup next wait time
mov TMR3RLL, Wt_Zc_Scan_Start_L
mov TMR3RLH, Wt_Zc_Scan_Start_H
setb Flags0.T3_PENDING
orl EIE1, #80h ; Enable timer3 interrupts
ret
在这个源码里面,Demag_Detected_Metric的计算为何里面有乘以7,然后和Demag_Pwr_Off_Thresh比较之后来判断是直接等待中断还是先关闭输出再等中断?这里不太明白,想请大佬解惑。谢谢大佬 |
|