endp6_mode EQU 0F8H endp7_mode EQU 0F9H
SEND_ADDR EQU 070H RECV_ADDR EQU 030H
TOGGLE_FLAG EQU 0FAH ;數(shù)據(jù)緩沖區(qū),用于保存接收到的下傳數(shù)據(jù),長度為0到64字節(jié) VENDOR_CNT EQU 0FBH ;獲得VENDOR的執(zhí)行次數(shù) ;************************************************************************* ORG 0000H LJMP MAIN ; 主程序入口 ;*************************************************************************
;********************************************************* ; 主程序 ;**********************************************************
設(shè)備已經(jīng)插入。。。。。。
獲得設(shè)備的設(shè)備描述符。。。。。。
設(shè)置USB設(shè)備端的USB地址。。。。。。。
獲得設(shè)備的配置描述符。。。。。。
SET_CONFIG設(shè)置USB設(shè)備。。。。。。
DATA_TRANS: NOP ;************************ 數(shù)據(jù)傳輸打開
MOV R0,#endp7_mode MOV @R0,#080H MOV R0,#endp6_mode MOV @R0,#080H
MOV R1,#TOGGLE_FLAG MOV @R1,#01H
;*******************************
SET_INTF: MOV DPTR,#SET_INTERFACE ; 發(fā)送緩存地址 CLR A MOVC A,@A+DPTR MOV R7,A INC DPTR MOV R6,#00DH LCALL SEND_DATA ; 發(fā)送1字節(jié)數(shù)據(jù) NOP
MOV R1,#TOGGLE_FLAG MOV @R1,#00H
CALL TOGGLE_RECV CALL TOGGLE_RECV MOV R6,#009H LCALL RECV_DATA ; 由設(shè)備讀入64字節(jié)的數(shù)據(jù)
MOV DPTR,#CLT_STRUT3 ; 發(fā)送緩存地址 CLR A MOVC A,@A+DPTR MOV R7,A INC DPTR MOV R6,#00DH LCALL SEND_DATA ; 發(fā)送1字節(jié)數(shù)據(jù) NOP
MOV DPTR,#CLT_DATA1 ; 發(fā)送緩存地址 CLR A MOVC A,@A+DPTR MOV R7,A INC DPTR MOV R6,#001H LCALL SEND_DATA ; 發(fā)送1字節(jié)數(shù)據(jù) NOP
MOV DPTR,#CLT_DATA2 ; 發(fā)送緩存地址 CLR A MOVC A,@A+DPTR MOV R7,A INC DPTR MOV R6,#001H LCALL SEND_DATA ; 發(fā)送1字節(jié)數(shù)據(jù) NOP
CALL TOGGLE_RECV CALL TOGGLE_RECV MOV R6,#009H LCALL RECV_DATA ; 由設(shè)備讀入64字節(jié)的數(shù)據(jù)
MOV DPTR,#CLT_STRUT4 ; 發(fā)送緩存地址 CLR A MOVC A,@A+DPTR MOV R7,A INC DPTR MOV R6,#00DH LCALL SEND_DATA ; 發(fā)送1字節(jié)數(shù)據(jù) NOP
CALL TOGGLE_RECV CALL TOGGLE_RECV MOV R6,#009H LCALL RECV_DATA ; 由設(shè)備讀入64字節(jié)的數(shù)據(jù)
MOV DPTR,#CLT_STRUT9 ; 發(fā)送緩存地址 CLR A MOVC A,@A+DPTR MOV R7,A INC DPTR MOV R6,#00DH LCALL SEND_DATA ; 發(fā)送1字節(jié)數(shù)據(jù) NOP
MOV DPTR,#CLT_DATA3 ; 發(fā)送緩存地址 CLR A MOVC A,@A+DPTR MOV R7,A INC DPTR MOV R6,#001H LCALL SEND_DATA ; 發(fā)送1字節(jié)數(shù)據(jù) NOP
CALL TOGGLE_RECV CALL TOGGLE_RECV MOV R6,#009H LCALL RECV_DATA ; 由設(shè)備讀入64字節(jié)的數(shù)據(jù)
GET_VENDOR: MOV R1,#VENDOR_CNT MOV @R1,#0BH
GET_VENDOR0: MOV R1,#VENDOR_CNT DEC @R1 MOV A,@R1 JNZ GET_VENDOR0
;******************************* GET: MOV R1,#TOGGLE_FLAG MOV @R1,#00H
CALL CLR_SEND_STALL CALL CLR_RECV_STALL MOV DPTR,#SOURCE_PRI ; 發(fā)送緩存地址 CLR A MOVC A,@A+DPTR MOV R7,A INC DPTR MOV R6,#031H CALL TOGGLE_SEND LCALL SEND_DATA ; 發(fā)送1字節(jié)數(shù)據(jù)
MOV DPTR,#SOURCE_PRI ; 發(fā)送緩存地址 CLR A MOVC A,@A+DPTR MOV R7,A INC DPTR MOV R6,#031H ;CALL TOGGLE_SEND LCALL SEND_DATA ; 發(fā)送1字節(jié)數(shù)據(jù)
ISSUE_REQ_SUCCESS: CALL TOGGLE_RECV CALL TOGGLE_RECV MOV R6,#039H LCALL RECV_DATA ; 由設(shè)備讀入64字節(jié)的數(shù)據(jù) NOP
SUCCESS_READ: MOV R1,#TOGGLE_FLAG MOV @R1,#00H
JMP GET_VENDOR ; 可以再次繼續(xù)發(fā)送數(shù)據(jù)或者接收數(shù)據(jù)
;********************************************************* ; 子程序
;*********向從設(shè)備發(fā)送數(shù)據(jù)子程序*********
SEND_DATA: MOV DATAIN_OUT,#CMD_WR_USB_DATA7 CALL WRITEADDRESS ; 向從設(shè)備發(fā)送數(shù)據(jù) MOV DATAIN_OUT,R7 ; 發(fā)送1個字節(jié),要多發(fā)可以循還設(shè)置 CALL WRITEDATA MOV A,R7 JZ WR_NONE MOV R4,A WR_A_BYTE: CLR A MOVC A,@A+DPTR MOV DATAIN_OUT,A CALL WRITEDATA INC DPTR NOP DJNZ R4,WR_A_BYTE NOP
MOV R1,#TOGGLE_FLAG MOV A,@R1 JZ ISSUE_TOKEN_OUT WR_NONE: CALL TOGGLE_SEND NOP ISSUE_TOKEN_OUT: MOV DATAIN_OUT,#CMD_ISSUE_TOKEN CALL WRITEADDRESS MOV DATAIN_OUT,R6 ; 高4位目的端點號, 低4位令牌PID: DEF_USB_PID_OUT CALL WRITEDATA JB CH375_INT_WIRE,$