📄 adc4udrv.asm
字号:
;===========================================================================
; File Name: Adc4udrv.asm
;
; Module Name: ADC04U_DRV
;
; Initialization Routine: ADC04U_DRV_INIT
;
; 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
;===========================================================================
.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
;------------------------------------------------------------
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
;-----------------------------------
;======================================================================================
ADC04U_DRV:
;======================================================================================
;---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
;-----------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -