📄 cmx_pwm_chan_c.lis
字号:
0000 cpu LMM
.module cmx_pwm_chan_c.c
.area text(rom, con, rel)
0000 .dbfile ./cmx_pwm_chan_c.c
0000 .dbfunc e PWMSetDutyCycle _PWMSetDutyCycle fV
0000 ; CompareValue -> X+1
0000 ; Period -> X+0
0000 ; bDutyCycle -> X-5
0000 ; bID -> X-4
0000 _PWMSetDutyCycle::
0000 .dbline -1
0000 10 push X
0001 4F mov X,SP
0002 3802 add SP,2
0004 .dbline 36
0004 ; //*****************************************************************************
0004 ; //*****************************************************************************
0004 ; // FILENAME: cmx_pwm_chan.c
0004 ; // @Version@
0004 ; // `@PSOC_VERSION`
0004 ; //
0004 ; // DESCRIPTION: C file for the PWM channel.
0004 ; //-----------------------------------------------------------------------------
0004 ; // Copyright (c) Cypress MicroSystems 2001-2005. All Rights Reserved.
0004 ; //*****************************************************************************
0004 ; //*****************************************************************************
0004 ;
0004 ; #include "cmx_pwm_chan.h"
0004 ;
0004 ; //-----------------------------------------------------------------------------
0004 ; // FUNCTION NAME: PWMSetDutyCycle(BYTE bID, BYTE bDutyCycle)
0004 ; //
0004 ; // DESCRIPTION:
0004 ; // Sets the duty cycle for the given channel.
0004 ; //
0004 ; //-----------------------------------------------------------------------------
0004 ; //
0004 ; // ARGUMENTS:
0004 ; // bID => Pointer to ParameterBlock for this instance.
0004 ; // bDutyCycle =>
0004 ; //
0004 ; // RETURNS: None
0004 ; //
0004 ; // SIDE EFFECTS:
0004 ; //
0004 ; // THEORY of OPERATION or PROCEDURE:
0004 ; //
0004 ; //
0004 ; //-----------------------------------------------------------------------------
0004 ; void PWMSetDutyCycle(BYTE bID, BYTE bDutyCycle)
0004 ; {
0004 .dbline 39
0004 ; BYTE Period;
0004 ; BYTE CompareValue;
0004 ; if (bDutyCycle > 100)
0004 5064 mov A,100
0006 3BFB cmp A,[X-5]
0008 D004 jnc L2
000A X0:
000A .dbline 40
000A ; {
000A .dbline 41
000A ; bDutyCycle = 100;
000A 56FB64 mov [X-5],100
000D .dbline 42
000D ; }
000D L2:
000D .dbline 43
000D ; Period = PWMGetPeriod(bID);
000D 10 push X
000E 52FC mov A,[X-4]
0010 7C0000 xcall _PWMGetPeriod
0013 62D000 mov REG[0xd0],>__r0
0016 20 pop X
0017 5400 mov [X+0],A
0019 .dbline 44
0019 ; CompareValue = ((int)(Period + 1) * (int)bDutyCycle)/100;
0019 52FB mov A,[X-5]
001B 5300 mov [__r1],A
001D 550000 mov [__r0],0
0020 5200 mov A,[X+0]
0022 5300 mov [__r3],A
0024 550000 mov [__r2],0
0027 060001 add [__r3],1
002A 0E0000 adc [__r2],0
002D 550000 mov [__rX],0
0030 550000 mov [__rY],0
0033 X1:
0033 3C0000 cmp [__r2],0
0036 B006 jnz X4
0038 3C0000 cmp [__r3],0
003B A01A jz X3
003D X4:
003D 70FB and F,-5
003F 6E00 rrc [__r2]
0041 6E00 rrc [__r3]
0043 D00C jnc X2
0045 62D000 mov REG[0xd0],>__r0
0048 5100 mov A,[__r1]
004A 0400 add [__rX],A
004C 5100 mov A,[__r0]
004E 0C00 adc [__rY],A
0050 X2:
0050 6500 asl [__r1]
0052 6B00 rlc [__r0]
0054 8FDE jmp X1
0056 X3:
0056 5F0000 mov [__r1],[__rX]
0059 5F0000 mov [__r0],[__rY]
005C 62D000 mov REG[0xd0],>__r0
005F 5000 mov A,0
0061 08 push A
0062 5064 mov A,100
0064 08 push A
0065 5100 mov A,[__r0]
0067 08 push A
0068 5100 mov A,[__r1]
006A 08 push A
006B 7C0000 xcall __divmod_16X16_16
006E 18 pop A
006F 5300 mov [__r1],A
0071 18 pop A
0072 38FE add SP,-2
0074 5100 mov A,[__r1]
0076 5401 mov [X+1],A
0078 .dbline 45
0078 ; PWMSetPulseWidth(bID, CompareValue);
0078 10 push X
0079 5201 mov A,[X+1]
007B 08 push A
007C 52FC mov A,[X-4]
007E 20 pop X
007F 7C0000 xcall _PWMSetPulseWidth
0082 20 pop X
0083 .dbline -2
0083 .dbline 46
0083 ; }
0083 L1:
0083 38FE add SP,-2
0085 20 pop X
0086 .dbline 0 ; func end
0086 7F ret
0087 .dbsym l CompareValue 1 c
0087 .dbsym l Period 0 c
0087 .dbsym l bDutyCycle -5 c
0087 .dbsym l bID -4 c
0087 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -