📄 adc4udrv.asm
字号:
;===========================================================================
; File Name: Adc4udrv.asm
;
; Module Name: ADC04U_DRV
;
; Initialization Routine: ADC04U_DRV_INIT
;
; Originator: Digital Control Systems Group
; Texas Instruments
;
; Description: This module performs 4-channel AD conversion of unipolar signals.
;
; |~~~~~~~~~~~~~~~~~~|
; A4_ch_sel o------>| |
; C1_gain o------>|Q13 ADC04U_DRV |
; C2_gain o------>|Q13 |
; C3_gain o------>|Q13 Q15|----->o C1_out
; C4_gain o------>|Q13 Q15|----->o C2_out
; | Q15|----->o C3_out
; | Q15|----->o C4_out
; |__________________|
;
; Notes:
; 1. This is a Unipolor driver, i.e. expects the
; ADC input to be 0->Vcc with gnd referenced to 0v
; 2. Cx_gain has range of -3.999999 --> +3.99999 (i.e. Q13)
; 3. Cx_out has range 0 --> +0.99999 (i.e. Q15)
; with:
; 1.0 x (VrefHi - VrefLo) = +0.999999 (7FFFh)
; 0.5 x (VrefHi - VrefLo) = +0.5 (3FFFh)
; 0.0 x (VrefHi - VrefLo) = 0 (0000h)
;
; ADC_ch_sel HEX values vs Channels selected
; _________________________________________________________________
; | C4 select | C3 select | C2 select | C1 select |
; -----------------------------------------------------------------
;
; For x240
; C1/C3 select: 0,1,2...7 --> Ch0,1,2,...7
; C2/C4 select: 0,1,2...7 --> Ch8,9,10,...15
;
; For x243
; C1/C2/C3/C4 select: 0,1,2...7 --> Ch0,1,2,...7
;
; For x2407
; C1/C2/C3/C4 select: 0,1,2...F --> Ch0,1,2,...15
;
;
; Target dependency: x240/243/2407
; To Select the target device see x24x_app.h file.
;
;=====================================================================================
; History:
;-------------------------------------------------------------------------------------
; 9-15-2000 Release Rev 1.0
;===========================================================================
;(To use this Module, copy this section to main system file)
; .ref ADC04U_DRV, ADC04U_DRV_INIT ;function call
; .ref A4_ch_sel,C1_gain,C2_gain,C3_gain,C4_gain ;inputs
; .ref C1_out, C2_out, C3_out, C4_out ;Outputs
;===========================================================================
.def ADC04U_DRV, ADC04U_DRV_INIT ;function call
.def A4_ch_sel,C1_gain,C2_gain,C3_gain,C4_gain ;inputs
.def C1_out, C2_out, C3_out, C4_out ;Outputs
;===========================================================================
.include x24x_app.h
.ref GPR0
;Alias Variable declaration (to conserve .bss locations)
MASK .set GPR0
C1_gain .usect "adc4udrv",1
C2_gain .usect "adc4udrv",1
C3_gain .usect "adc4udrv",1
C4_gain .usect "adc4udrv",1
C1_out .usect "adc4udrv",1
C2_out .usect "adc4udrv",1
C3_out .usect "adc4udrv",1
C4_out .usect "adc4udrv",1
A4_ch_sel .usect "adc4udrv",1
GPR0adc .usect "adc4udrv",1
GPR1adc .usect "adc4udrv",1
;======================================================================
ADC04U_DRV_INIT:
;======================================================================
LDP #A4_ch_sel
SPLK #1FFFh, C1_gain ;Init with gain of 1
SPLK #1FFFh, C2_gain ;Init with gain of 1
SPLK #1FFFh, C3_gain ;Init with gain of 1
SPLK #1FFFh, C4_gain ;Init with gain of 1
;---target dependancy---------------
.if (x240|x243) ;target dependancy
POINT_PF1
;5432109876543210
;!!!!||||!!!!||||
; SPLK #0000000000000011b, ADC_CNTL2 ;
SPLK #0000000000000010b, ADC_CNTL2 ;Prescaler=4(for x243),8(for x240)
SPLK #1111100100010000b, ADC_CNTL1 ;
LDP #A4_ch_sel
SPLK #5432h, A4_ch_sel ;default to Ch 2,3,4,5
RET
.endif
;-----------------------------------
;---target dependancy---------------
.if (x2407) ;target dependancy
LDP #ADCL_CNTL1>>7
SPLK #0, CALIBRATION ;Zero the Cal reg.
SPLK #0100000000000000b,ADCL_CNTL1 ;Reset entire Module
; SPLK #0010000000010000b,ADCL_CNTL1 ;Acq = 2 x Clks
SPLK #0010000100010000b,ADCL_CNTL1 ;Acq = 4 x Clks
; SPLK #0010001000010000b,ADCL_CNTL1 ;Acq = 6 x Clks
; SPLK #0010001100010000b,ADCL_CNTL1 ;Acq = 8 x Clks
;||||!!!!||||!!!! ;Cascaded mode
;5432109876543210
SPLK #3, MAXCONV ;Setup for 4 conversions
LDP #A4_ch_sel
SPLK #3210h, A4_ch_sel ;default to Ch 1,0,2,3
RET
.endif
;-----------------------------------
;======================================================================================
ADC04U_DRV:
;======================================================================================
;---target dependancy---------------
.if (x240|x243) ;target dependancy
SETC SXM ; Sign extension mode on
;Read 1st converted value
POINT_PF1
LACC ADC_FIFO1
LDP #A4_ch_sel
SFR
AND #7FFFh
SACL C1_out
LT C1_gain ;Ia_gain in Q13
MPY C1_out ;Q13 x Q15 = Q28
PAC
SACH C1_out,3 ;Convert final result to Q15
;Read 2nd converted value
POINT_PF1
LACC ADC_FIFO2 ;
LDP #A4_ch_sel
SFR
AND #7FFFh
SACL C2_out
LT C2_gain ;Ib_gain in Q13
MPY C2_out ;Q13 x Q15 = Q28
PAC
SACH C2_out,3 ;Convert final result to Q15
;Read 3rd converted value
POINT_PF1
LACC ADC_FIFO1
LDP #A4_ch_sel
SFR
AND #7FFFh
SACL C3_out
LT C3_gain ;Ia_gain in Q13
MPY C3_out ;Q13 x Q15 = Q28
PAC
SACH C3_out,3 ;Convert final result to Q15
;Read 4th converted value
POINT_PF1
LACC ADC_FIFO2 ;
LDP #A4_ch_sel
SFR
AND #7FFFh
SACL C4_out
LT C4_gain ;Ib_gain in Q13
MPY C4_out ;Q13 x Q15 = Q28
PAC
SACH C4_out,3 ;Scale to Q15
CLRC SXM ;Sign extension mode off
;Start another conversion
START_NXT:
LACC A4_ch_sel,1
AND #000Eh
SACL MASK
LACC A4_ch_sel
AND #0070h
OR MASK
OR #1101100100000001b
;5432109876543210
POINT_PF1
SACL ADC_CNTL1 ;Start 1st Dual conversion
LDP #A4_ch_sel
LACC A4_ch_sel,9
AND #000Eh,16
SACH MASK
LACC A4_ch_sel,8
AND #0070h,16
SACH GPR1adc
LACC GPR1adc
OR MASK
OR #1101100100000001b
;5432109876543210
POINT_PF1
SACL ADC_CNTL1 ;Start 2nd Dual conversion
LDP #A4_ch_sel
RET
.endif
;-----------------------------------
;---target dependancy---------------
.if (x2407) ;target dependancy
;Read 1st converted value
LDP #ADCL_CNTL1>>7
LACC ADC_RESULT0
SFR
AND #7FFFh
LDP #A4_ch_sel
SACL C1_out
LT C1_gain ;Ia_gain in Q13
MPY C1_out ;Q13 x Q15 = Q28
PAC
SACH C1_out,3 ;Convert final result to Q15
;Read 2nd converted value
LDP #ADCL_CNTL1>>7
LACC ADC_RESULT1
SFR
AND #7FFFh
LDP #A4_ch_sel
SACL C2_out
LT C2_gain ;Ia_gain in Q13
MPY C2_out ;Q13 x Q15 = Q28
PAC
SACH C2_out,3 ;Convert final result to Q15
;Read 3rd converted value
LDP #ADCL_CNTL1>>7
LACC ADC_RESULT2
SFR
AND #7FFFh
LDP #A4_ch_sel
SACL C3_out
LT C3_gain ;Ia_gain in Q13
MPY C3_out ;Q13 x Q15 = Q28
PAC
SACH C3_out,3 ;Convert final result to Q15
;Read 4th converted value
LDP #ADCL_CNTL1>>7
LACC ADC_RESULT3
SFR
AND #7FFFh
LDP #A4_ch_sel
SACL C4_out
LT C4_gain ;Ia_gain in Q13
MPY C4_out ;Q13 x Q15 = Q28
PAC
SACH C4_out,3 ;Convert final result to Q15
;Start another conversion
START_NXT:
LACC A4_ch_sel
LDP #ADCL_CNTL1>>7
SACL CHSELSEQ1
SPLK #0110000000000000b,ADCL_CNTL2 ;Reset + SOC SEQ1
;||||!!!!||||!!!!
;5432109876543210
LDP #A4_ch_sel
RET
.endif
;-----------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -