📄 cmx_adc_chan_c.lis
字号:
0000 cpu LMM
.module cmx_adc_chan_c.c
.area text(rom, con, rel)
0000 .dbfile ./cmx_adc_chan_c.c
0000 .dbfunc e iGetChanMVolts _iGetChanMVolts fI
0000 ; lTemp -> X+0
0000 ; bChan -> X-4
0000 _iGetChanMVolts::
0000 .dbline -1
0000 10 push X
0001 4F mov X,SP
0002 3804 add SP,4
0004 .dbline 33
0004 ; //*****************************************************************************
0004 ; //*****************************************************************************
0004 ; // FILENAME: ADCMux8_LLD.h
0004 ; // @Version@
0004 ; //
0004 ; //
0004 ; // DESCRIPTION: This files contains the conversion from ADC counts to
0004 ; // mVolts. The driver will ALWAYS cal the " iGetChanMVolts()"
0004 ; // function to retrieve the mVolts result.
0004 ; //
0004 ; //-----------------------------------------------------------------------------
0004 ; // Copyright (c) Cypress MicroSystems 2004. All Rights Reserved.
0004 ; //*****************************************************************************
0004 ; //*****************************************************************************
0004 ;
0004 ; #include "m8c.h"
0004 ; #include "calibration.h"
0004 ; #include "CMX_ADC_CHAN.h"
0004 ;
0004 ; extern void * const DriverParams[];
0004 ;
0004 ; // *********************** iGetChanMVolts() *******************************
0004 ; //
0004 ; // Description:
0004 ; // This function returns the reading of a given channel in mVolts (int).
0004 ; //
0004 ; // Input:
0004 ; // BYTE bChan <= Voltage channel number
0004 ; //
0004 ; //
0004 ; //
0004 ; int iGetChanMVolts(BYTE bChan)
0004 ; {
0004 .dbline 36
0004 ; long lTemp; // Temp long variable
0004 ;
0004 ; lTemp = (long)(iGetAinChanCounts(bChan) + ADC_Offset) * 1000;
0004 10 push X
0005 52FC mov A,[X-4]
0007 7C0000 xcall _iGetAinChanCounts
000A 62D000 mov REG[0xd0],>__r0
000D 5300 mov [__r1],A
000F 5A00 mov [__r0],X
0011 20 pop X
0012 5000 mov A,>_ADC_Offset
0014 10 push X
0015 08 push A
0016 5700 mov X,<_ADC_Offset
0018 28 romx
0019 5300 mov [__r2],A
001B 18 pop A
001C 75 inc X
001D 0900 adc A,0
001F 28 romx
0020 20 pop X
0021 0400 add [__r1],A
0023 5100 mov A,[__r2]
0025 0C00 adc [__r0],A
0027 5100 mov A,[__r1]
0029 5300 mov [__r3],A
002B 5100 mov A,[__r0]
002D 5300 mov [__r2],A
002F 470080 tst [__r2],-128
0032 A009 jz X0
0034 5500FF mov [__r1],-1
0037 5500FF mov [__r0],-1
003A 800A jmp X1
003C X0:
003C 62D000 mov REG[0xd0],>__r0
003F 550000 mov [__r1],0
0042 550000 mov [__r0],0
0045 X1:
0045 62D000 mov REG[0xd0],>__r0
0048 5100 mov A,[__r0]
004A 08 push A
004B 5100 mov A,[__r1]
004D 08 push A
004E 5100 mov A,[__r2]
0050 08 push A
0051 5100 mov A,[__r3]
0053 08 push A
0054 5000 mov A,0
0056 08 push A
0057 08 push A
0058 5003 mov A,3
005A 08 push A
005B 50E8 mov A,-24
005D 08 push A
005E 7C0000 xcall __mul_32X32_32
0061 38FC add SP,-4
0063 18 pop A
0064 5403 mov [X+3],A
0066 18 pop A
0067 5402 mov [X+2],A
0069 18 pop A
006A 5401 mov [X+1],A
006C 18 pop A
006D 5400 mov [X+0],A
006F .dbline 39
006F ; // The COUNTS_PER_VOLT is a default value at this time. Later it
006F ; // will be set by a calibration sequence.
006F ; lTemp = lTemp/(CMX_ADC_CHAN_COUNTS16_PER_VOLT >> (16-CMX_ADC_CHAN_RESOLUTION));
006F 5000 mov A,0
0071 08 push A
0072 08 push A
0073 5001 mov A,1
0075 08 push A
0076 5089 mov A,-119
0078 08 push A
0079 5200 mov A,[X+0]
007B 08 push A
007C 5201 mov A,[X+1]
007E 08 push A
007F 5202 mov A,[X+2]
0081 08 push A
0082 5203 mov A,[X+3]
0084 08 push A
0085 7C0000 xcall __divmod_32X32_32
0088 18 pop A
0089 5403 mov [X+3],A
008B 18 pop A
008C 5402 mov [X+2],A
008E 18 pop A
008F 5401 mov [X+1],A
0091 18 pop A
0092 5400 mov [X+0],A
0094 38FC add SP,-4
0096 .dbline 41
0096 ;
0096 ; return ((int)lTemp);
0096 5203 mov A,[X+3]
0098 5300 mov [__r1],A
009A 5202 mov A,[X+2]
009C 5300 mov [__r0],A
009E .dbline -2
009E L1:
009E 38FC add SP,-4
00A0 20 pop X
00A1 .dbline 0 ; func end
00A1 7F ret
00A2 .dbsym l lTemp 0 L
00A2 .dbsym l bChan -4 c
00A2 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -