?? ileg2drv.asm
字號:
;*************************************************************
; 文件名: ileg2drv.asm
;
; 模塊名: ILEG2DRV
;
; 初始化程序名: ILEG2DRV_INIT
;
; 公司: 達(dá)盛科技
;
; 功能描述: 設(shè)置ADC選項,將采樣的兩路電流信號通過可變的增益和偏
; 移量進(jìn)行處理,獲得可用電流信號。
;
; |~~~~~~~~~~~~~~~~~~|
; I_ch_sel o------->| |
; Ia_gain o------->|Q13 ILEG2DRV Q15|----->o Ia_out
; Ib_gain o------->|Q13 Q15|----->o Ib_out
; Ia_offset o------->|Q15 |
; Ib_offset o------->|Q15 |
; |__________________|
;
; 目標(biāo)板cpu: x2407
;
;=====================================================================================
; 修改記錄:
;-------------------------------------------------------------------------------------
; 最后更新時間:2005.6.15 版本號: Ver 1.0
;======================================================================
; 設(shè)置說明
;-----------------------------------------------------------
; 1. Ix_gain 范圍 -3.999999 --> +3.99999 (i.e. Q13)
; 2. Ix_offset 范圍 -0.999999 --> +0.99999 (i.e. Q15)
; 3. Ix_out 范圍 -0.999999 --> +0.99999 (i.e. Q15)
; with:
; 1.0 x (VrefHi - VrefLo) = +0.999999 (7FFFh)
; 0.5 x (VrefHi - VrefLo) = 0 (0000/FFFFh)
; 0.0 x (VrefHi - VrefLo) = -0.999999 (8000h)
;
; I_ch_sel 16進(jìn)制值與 采樣通道的對應(yīng)關(guān)系:
; _________________________________________________
; | x | x | Ib select | Ia select |
; -------------------------------------------------
; Ia 選擇: 0,1,2...F --> Ch0,1,2,...15
; Ib 選擇: 0,1,2...F --> Ch0,1,2,...15
;-----------------------------------------------------------
; 變量聲明
;-----------------------------------------------------------
; .ref ILEG2DRV, ILEG2DRV_INIT ;子程序調(diào)用
; .ref Ia_gain,Ib_gain,Ia_offset,Ib_offset ;輸入
; .ref Ia_out, Ib_out,V_ref ;輸出
;-----------------------------------------------------------
; 變量聲明
;-----------------------------------------------------------
.def ILEG2DRV, ILEG2DRV_INIT ;子程序調(diào)用
.def Ia_gain,Ib_gain,Ia_offset,Ib_offset ;輸入
.def Ia_out, Ib_out, V_ref ;輸出
******************************************************
* 變量定義
******************************************************
.include "x24x_app.h"
******************************************************
I_ch_sel1 .usect "ileg2drv",1
I_ch_sel2 .usect "ileg2drv",1
Ia_gain .usect "ileg2drv",1
Ib_gain .usect "ileg2drv",1
Ia_offset .usect "ileg2drv",1
Ib_offset .usect "ileg2drv",1
Ia_out .usect "ileg2drv",1
Ib_out .usect "ileg2drv",1
V_ref .usect "ileg2drv",1
V_gain .usect "ileg2drv",1
V_offset .usect "ileg2drv",1
******************************************************
* 參數(shù)設(shè)置
******************************************************
I_ch_sel1_ .set 3311H;6CC6h;6886h
I_ch_sel2_ .set 1122H;6CC6h;6886h
; 實驗箱(6CC6h)或者'techv2407'(1331H)
ACQ_PS_ .set 0001b ; 采樣時鐘 p/s=1/2*(conv p/s)
CON_PS_ .set 0 ; 轉(zhuǎn)換時鐘 p/s=1/1
CAL_ .set 0 ; 自動校準(zhǔn)寄存器 = 0
Ia_offset_ .set 0;530h ; 通過 XOR 產(chǎn)生偏置
Ib_offset_ .set 0;430h ;
V_offset_ .set 1520;
Ia_gain_ .set 1fffh ; gain=1.0 (Q13)
Ib_gain_ .set 1fffh ; gain=1.0 (Q13)
V_gain_ .set 1fffh ; gain=1.0 (Q13)
ILEG2DRV_INIT
LDP #I_ch_sel1 ;
SPLK #I_ch_sel1_,I_ch_sel1 ; 設(shè)置通道選擇初始化
SPLK #I_ch_sel2_,I_ch_sel2 ;
SPLK #Ia_gain_,Ia_gain ; 增益設(shè)置初始化
SPLK #Ib_gain_,Ib_gain ;
SPLK #Ia_offset_,Ia_offset ; 偏置設(shè)置初始化
SPLK #Ib_offset_,Ib_offset ;
SPLK #V_offset_,V_offset ;
SPLK #V_gain_,V_gain ;
ldp #GPTCON>>7 ; 設(shè)置 T1下溢觸發(fā) ADC
lacc GPTCON
and #0FE7Fh ;
or #01b<<7
sacl GPTCON
LDP #CALIBRATION>>7 ;
SPLK #CAL_,CALIBRATION ; 初始化自動校準(zhǔn)寄存器
SPLK #4000h,ADCL_CNTL1 ; 復(fù)位AD模塊
SPLK #(03000h+ACQ_PS_<<8+CON_PS_<<7),ADCL_CNTL1 ; 設(shè)置 ADCL_CNTL1
SPLK #0342h,ADCL_CNTL2 ; 允許 EVA 啟動轉(zhuǎn)換
SPLK #7,MAXCONV ; 8 轉(zhuǎn)換通道
bldd #I_ch_sel1,CHSELSEQ1 ; 設(shè)置通道選擇
bldd #I_ch_sel2,CHSELSEQ2
ret
ILEG2DRV:
ldp #ADCL_CNTL2>>7 ; 檢查 SEQ_BSY 位,判斷轉(zhuǎn)換是否完成
Wait
bit ADCL_CNTL2,BIT12 ;
bcnd Wait,TC ;
LACC ADC_RESULT1 ; 讀取通道1轉(zhuǎn)換值
XOR #8000h ; 轉(zhuǎn)換成 Q15
ldp #Ia_out
SACL Ia_out
LT Ia_gain ; Ia_gain,Q13
MPY Ia_out ; Q13 x Q15 = Q28
PAC
ADD Ia_offset,13 ; 加偏置,Q28
; neg ; 正方向?qū)?yīng)流入電機(jī)的方向
SACH Ia_out,3 ; 最終結(jié)果轉(zhuǎn)換成 Q15
LDP #ADC_RESULT1>>7 ; 讀取通道2轉(zhuǎn)換值
LACC ADC_RESULT3
XOR #8000h ; 轉(zhuǎn)換成 Q15
ldp #Ib_out
SACL Ib_out
LT Ib_gain ; Ib_gain,Q13
MPY Ib_out ; Q13 x Q15 = Q28
PAC
ADD Ib_offset,13 ; 加偏置,Q28
; neg ; 正方向?qū)?yīng)流入電機(jī)的方向
SACH Ib_out,3 ; 最終結(jié)果轉(zhuǎn)換成 Q15
LDP #ADC_RESULT1>>7 ; 讀取通道3轉(zhuǎn)換值
LACC ADC_RESULT5
XOR #8000h ; 轉(zhuǎn)換成 Q15
ldp #V_ref
SACL V_ref
LT V_gain ; V_gain,Q13
MPY V_ref ; Q13 x Q15 = Q28
PAC
ADD V_offset,13 ; 加偏置,Q28
; neg ; 如果需要可以反向
SACH V_ref,3 ; 最終結(jié)果轉(zhuǎn)換成 Q15
bldd I_ch_sel1,#CHSELSEQ1 ; 重新設(shè)置通道選擇
bldd I_ch_sel2,#CHSELSEQ2
; ldp #ADCL_CNTL2>>7 ;通道清零
; lacl ADCL_CNTL2
; OR #4000h
; sacl ADCL_CNTL2 ;
RET
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -