⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ps2d.lis

📁 Cypress cy7c63318 鼠标开发板的源代码
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 000A               JC      .mdelay_exit ; exit if carry set, time has already expired
 000A           
 000A               call        PS2D_Delay
 000A           
 000A           .mdelay_exit:
 000A           
 000A               pop    A
 000A               MACRO CLEARC
 000A               and    f,~(FLAG_CARRY)
 000A               MACRO SETC
 000A               or    f,FLAG_CARRY
                AREA UserModules (ROM, REL)
                ;-----------------------------------------------------------------------------
                ;  FUNCTION NAME: PS2D_Start
                ;
                ;  DESCRIPTION:
                ;
                ;-----------------------------------------------------------------------------
                ;
                ;  ARGUMENTS:
                ;
                ;  RETURNS:
                ;
                ;  SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
                ;
                ;  THEORY of OPERATION or PROCEDURE:
                ;
 0000           .SECTION
 0000            PS2D_Start:
 0000           _PS2D_Start:
 0000           
 0000               ; Set PS2_SCLK and PS2_SDATA to Resistive Pull Up
 0000 909A          CALL PS2D_Release
 0002           
                IF   PS2D_IO_CONFIG_TYPE
 0002 620D03        MOV  REG[P10CR], (PS2_PULLUP_ENABLE | OUTPUT_ENABLE)   ; Enable the pullups
 0005 620E05        MOV  REG[P11CR], (OPEN_DRAIN | OUTPUT_ENABLE)          ; Enable the pullups
 0008           
                ELSE
                    or    F, FLAG_XIO_MASK
                    OR   REG[PS2D_DM1],(PS2D_SCLK | PS2D_SDATA)   ; Set the clock and data 
                    OR   REG[PS2D_DM0],(PS2D_SCLK | PS2D_SDATA)   ; Set the clock and data 
                
                    and   F, ~FLAG_XIO_MASK
                    AND  REG[PS2D_DM2],~(PS2D_SCLK | PS2D_SDATA)  ; clear the clock and data 
                ENDIF
                
 0008 9002          CALL PS2D_BAT
 000A           
 000A 7F            RET
 000B           .ENDSECTION
 000B           ;-----------------------------------------------------------------------------
 000B           ;  FUNCTION NAME: PS2D_Stop
 000B           ;
 000B           ;  DESCRIPTION:
 000B           ;
 000B           ;-----------------------------------------------------------------------------
 000B           ;
 000B           ;  ARGUMENTS:
 000B           ;
 000B           ;  RETURNS:
 000B           ;
 000B           ;  SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
 000B           ;
 000B           ;  THEORY of OPERATION or PROCEDURE:
 000B           ;
 000B           .SECTION
 000B            PS2D_Stop:
 000B           _PS2D_Stop:
 000B 7F           ret
 000C           .ENDSECTION
 000C           ;-----------------------------------------------------------------------------
 000C           ;  FUNCTION NAME: PS2D_BAT
 000C           ;
 000C           ;  DESCRIPTION:
 000C           ;
 000C           ;-----------------------------------------------------------------------------
 000C           ;
 000C           ;  ARGUMENTS:
 000C           ;
 000C           ;  RETURNS:
 000C           ;
 000C           ;  SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
 000C           ;
 000C           ;  THEORY of OPERATION or PROCEDURE:
 000C           ;
 000C           .SECTION
 000C            PS2D_BAT:
 000C           _PS2D_BAT:
 000C           
 000C 9000          CALL PS2D_StartDevice              ; Device specific start
 000E           
 000E           ; Delay for ~500 mSec 
 000E 57FA          MOV   X, 250                       ; 250 * 20 * 100 uSec = 500 mSec
 0010           .wait_loop_o:
 0010 5014          MOV   A, 20                        ; Inner loop
 0012           .wait_loop_i:
 0012           
 0012 08            push    A
 0013           
                IF (100)
                ELSE
                PSOC_ERROR  PS2D User Module - Delay value must be greater than zero
                ENDIF
                
                IF CPU_CLOCK_SPEED - OSC_CR0_CPU_24MHz
                IF CPU_CLOCK_SPEED - OSC_CR0_CPU_12MHz
                IF CPU_CLOCK_SPEED - OSC_CR0_CPU_6MHz
                PSOC_ERROR  PS2D User Module - Only supports 6, 12, or 24 Mhz
                ELSE
                
                ; 6 Mhz
 0013 5042          MOV     A, ((100*2)/3) ; convert uSec to number of delay loops required
 0015 1102          SUB     A, ((((((0+21)*167)/1000)+1)*2)/3) ; subtract cpu cycles plus current overhead
 0017               
                ENDIF
                ELSE
                
                ; 12 Mhz
                    MOV     A, ((100*4)/7) ; convert uSec to number of delay loops required
                    SUB     A, (((((0+21)*83)/1000)*4)/7) ; subtract cpu cycles plus current overhead
                
                ENDIF
                ELSE
                
                ; 24 Mhz
                    MOV     A, ((100*8)/11) ; convert uSec to number of delay loops required
                    SUB     A, (((((0+21)*42)/1000)*8)/11) ; subtract cpu cycles plus current overhead
                
                ENDIF
                
 0017 C003          JC      .mdelay_exit ; exit if carry set, time has already expired
 0019           
 0019 9089          call        PS2D_Delay
 001B           
 001B           .mdelay_exit:
 001B           
 001B 18            pop    A
 001C 62E300        mov   reg[RES_WDT], 00h
 001F           
 001F 78            DEC   A                            ; Are we done with inner loop?
 0020 BFF1          JNZ   .wait_loop_i
 0022           
 0022 79            DEC  X                             ; Are we done with outer loop??
 0023 BFEC          JNZ   .wait_loop_o
 0025           
 0025 50AA          mov    a, PS2_CMD_PASS_BAT              ; Completion
 0027 9069          call   PS2D_SendResponseByte            ; Send it
 0029           
 0029           ; Mouse only
                IF (PS2D_DEVICE_TYPE & PS2D_DEVICE_TYPE_MOUSE)
 0029 3901          cmp    a, PS2D_CLKH_DATAL               ; Was the host in RTS
 002B A005          jz     .exit                            ; Exit if RTS
 002D 5100          mov    a, [PS2D_bDeviceID]              ; Device ID
 002F 9061          call   PS2D_SendResponseByte            ; Send it
                ENDIF
                
 0031           .exit:
 0031 7F            ret
 0032           .ENDSECTION
 0032           ;-----------------------------------------------------------------------------
 0032           ;  FUNCTION NAME: PS2D_IsEnabled
 0032           ;
 0032           ;  DESCRIPTION:    API Function returns the current enable status of the UM
 0032           ;
 0032           ;-----------------------------------------------------------------------------
 0032           ;
 0032           ;  ARGUMENTS:	   None
 0032           ;
 0032           ;  RETURNS:		   A: 0 Disabled
 0032           ;                             1 Enabled
 0032           ;
 0032           ;  SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
 0032           ;
 0032           ;  THEORY of OPERATION or PROCEDURE:
 0032           ;
 0032           ;-----------------------------------------------------------------------------
 0032           .SECTION
 0032            PS2D_IsEnabled:
 0032           _PS2D_IsEnabled:
 0032 5100         mov    a, [PS2D_bIsEnabled]         ; Simply return the enabled status
 0034 7F           ret
 0035           .ENDSECTION
 0035           ;-----------------------------------------------------------------------------
 0035           ;  FUNCTION NAME: PS2D_TransferInProgress
 0035           ;
 0035           ;  DESCRIPTION:    API Function returns the current transfer status of the UM
 0035           ;
 0035           ;-----------------------------------------------------------------------------
 0035           ;
 0035           ;  ARGUMENTS:     None
 0035           ;
 0035           ;  RETURNS:       A: 0 if no transfer is in progress
 0035           ;                    1 if a transfer is in progress
 0035           ;
 0035           ;  SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
 0035           ;
 0035           ;  THEORY of OPERATION or PROCEDURE:
 0035           ;
 0035           ;-----------------------------------------------------------------------------
 0035           .SECTION
 0035            PS2D_TransferInProgress:
 0035           _PS2D_TransferInProgress:
 0035 5103          mov    a,[PS2D_bTxPktIndex]        ; Compare the current index
 0037 3A04          cmp    a,[PS2D_bTxPktSize]         ; verses the packet size
 0039 A005          jz     .no_more
 003B               
 003B           ; Flow here with more to transfer 
 003B 5001          mov    a,0x01                   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -