|
这个Kmv=0x2000取得很奇怪,正好是2的倍数,是不是使用了PU值的方**<br />AD为正负512,程序里是GPR0_vinv,Q0<br />系数为Kmv,为Q22<br />最后的电压Vout=GPR0_Vinv*Kmv<br />为什么最后程序化成Q15呢?这个Q15和十进制的Vout是什么关系呢?<br />Invert_v:<br />SETC SXM<br />LDP #K0_vinv<br />spm 1<br />LACC Vo,10 ;<br />sach GPR0_vinv<br />lacc GPR0_vinv<br />and #03ffh<br />sub #512<br />neg<br />sub #1<br />sacl GPR0_vinv ;Q0<br />lt GPR0_vinv<br />mpy Kmv ;Q22 这里Vout = Kmv * GPR0_vinv <br />pac ;Q23<br />rpt #7<br />norm *<br />sach Vout ;Q15 为什么这里Vout变成Q15??Q15不是只能表示正负1的数吗,现在的Vout和原来的Vout是什么关系呢?<br />SPM 0<br />lacc Uq ;Q15<br />sub Vout ;Q15<br />SACL En0_vinv ;Store error(Q15)<br />lacc Un_vinv,15 ;ACC = Un_vinv(Q30,32-bit)<br />LT En0_vinv ;<br />MPY K0_vinv ;P<- K0*En0,Q15*Q15<br />APAC ;ACC <-- Un_vinv + K0*En-0, Q30<br />norm * ;Q31<br />sach Upi_v_o ;Q15 |
|