📄 ad_sample.asm
字号:
************************************
* File name:ad_sample.asm
************************************
.include "F2407REGS.H"
.def INIT_AD,AD_SAMPLE ;Function call
.def Ia,Ib,Udc ;outputs
.ref IA,IB,DATA_CACHE ;FOR TEST
Ia .usect "sample",1
Ib .usect "sample",1
Udc .usect "sample",1
temp_a .usect "sample",1
temp_b .usect "sample",1
temp_u .usect "sample",1
K_c .usect "sample",1
offset_c .usect "sample",1
K_u .usect "sample",1
offset_u .usect "sample",1
T_u .usect "sample",1 ;FOR TEST
************************************
* AD采样初始化
************************************
INIT_AD:
NOP
LDP #ADCTRL1>>7 ;装载ADC控制寄存器页地址
SPLK #4000H,ADCTRL1 ;复位ADC模块
NOP
SPLK #1350H,ADCTRL1 ;ADC工作在连续,级连模式,高优先级中断
SPLK #8302H,ADCTRL2 ;由EVA启动排序器SEQ1
SPLK #0FH,MAXCONV ;设置最大转换通道为3
SPLK #0210H,CHSELSEQ1 ;设置出入通道选择排序控制寄存器
SPLK #0101H,CHSELSEQ2
SPLK #1021H,CHSELSEQ3
SPLK #1010H,CHSELSEQ4
LDP #temp_a
SPLK #4000H,temp_a ; Q3
SPLK #4000H,temp_b ; Q3
SPLK #4000H,temp_u ; Q3
SPLK #4800H,Udc ; Q6
SPLK #0A50H,K_c ; Q15 (100*3.3/4/1024)
SPLK #14AH,offset_c ; Q3 41.25A对应1.65v (1.65*100/4)
SPLK #6489H,K_u ; Q16 1024*10*30.77*10^3/25/101/3.3=0.3927 ;/6489
NOP
RET
***************************************
***AD采样
***************************************
AD_SAMPLE:
NOP
LDP #ADCTRL2>>7
WAIT:
BIT ADCTRL2,BIT12
BCND WAIT,TC
LACL ADCTRL2
OR #4000H
AND #0FFDFH
SACL ADCTRL2
CLRC SXM
LACC RESULT0,10
SUB RESULT1,10 ;FOR TEST
LDP #Ia ;for test
sach Ia ;for test
lacl Ia ;for test
call DATA_CACHE ;for test
ADD RESULT3,10
ADD RESULT5,10
ADD RESULT7,10
ADD RESULT10,10
ADD RESULT12,10
ADD RESULT14,10
LDP #Ia
ADD temp_a,13
SACH temp_a ;最高有效位位12 Q3
BLDD #IA,temp_a ;for test
LDP #ADCTRL2>>7
LACC RESULT1,10
ADD RESULT4,10
ADD RESULT6,10
ADD RESULT8,10
ADD RESULT11,10
ADD RESULT13,10
ADD RESULT15,10
LDP #Ia
ADD temp_b,13
SACH temp_b ;最高有效位位12 Q3 10位取8次等于左移3位
BLDD #IA,temp_b ;for test
LDP #ADCTRL2>>7
LACC RESULT2,10
ADD RESULT9,10
ADD RESULT2,10
LDP #Ia
ADD temp_u,14
SACH temp_u ;最高有效位位11 Q2
splk #0,temp_u ;for test
*********************************************
****采样值到实际值的转换
*********************************************
LT K_c ; Q15
MPY temp_a ; Q15*Q3
PAC ; Q19
SUB offset_c,16
SACH Ia,5 ; 19-16+5+1=9,Q9
MPY temp_b ; Q15*Q3
LTP K_u
SUB offset_c,16 ; Q19
SACH Ib,5 ; 19-16+5+1=9,Q9
MPY temp_u ; Q16*Q2
PAC ; Q19(ACC)
SACH Udc,3 ; Q6 通过判断Q6的整数与小数范围来判断能否达到要求
SACH T_u,4 ;FOR TEST
LACL Ib ;FOR TEST
LACL Udc ;FOR TEST
CALL DATA_CACHE ;FOR TEST
SPLK #0C80H,Udc ;FOR TEST 40*2^6
SETC SXM
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -