救火。。。。。。ch375對cp2101

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,$

USB轉(zhuǎn)串口芯片沒有USB規(guī)范,所以各家芯片采用各自定義的行為, 我認(rèn)為,CP2101的83H端點平時是無數(shù)據(jù)可讀的,除非你確定其串口已經(jīng)收到數(shù)據(jù),那么該端點才能被讀出數(shù)據(jù),否則一直等待(返回NAK引起CH375等待,可以ABORT-NAK取消)


CH375的CMD_ISSUE_TOKEN 向03口發(fā)送成功后,就應(yīng)當(dāng)表示CP2101成功接收了吧。它一旦收到就應(yīng)一定有返回的。在電腦上測試成功。


請問,對于CH375來說,對端點0和端點2的控制方式一樣嗎? 都用下面這兩個子程序可以嗎?

*********向從設(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,$ 等待CH375操作完成 MOV DATAIN_OUT,#CMD_GET_STATUS CALL WRITEADDRESS 查詢CH375中斷并更新中斷狀態(tài) NOP NOP 用于至少延時2uS MOV USBDATA,#0FFH CALL READDATA ; 返回操作狀態(tài) MOV A,DATAIN_OUT XRL A,#USB_INT_SUCCESS JZ ISSUE_OUT_SUCCESS 成功,可以繼續(xù)進(jìn)行數(shù)據(jù)傳輸了。 LCALL CLR_SEND_STALL JMP $ 不成功 ISSUE_OUT_SUCCESS: RET

*********由從設(shè)備讀取數(shù)據(jù)子程序*********

RECV_DATA: MOV R1,#TOGGLE_FLAG MOV A,@R1 JZ ISSUE_TOKEN_IN CALL TOGGLE_RECV ISSUE_TOKEN_IN: MOV DATAIN_OUT,#CMD_ISSUE_TOKEN CALL WRITEADDRESS NOP MOV DATAIN_OUT,R6 高4位目的端點號, 低4位令牌PID: DEF_USB_PID_IN CALL WRITEDATA JB CH375_INT_WIRE,$ 等待CH375操作完成 MOV DATAIN_OUT,#CMD_GET_STATUS CALL WRITEADDRESS 查詢CH375中斷并更新中斷狀態(tài) NOP NOP 用于至少延時2uS MOV USBDATA,#0FFH CALL READDATA ; 返回操作狀態(tài) MOV A,DATAIN_OUT XRL A,#USB_INT_SUCCESS JZ ISSUE_IN_SUCCESS 成功,可以繼續(xù)進(jìn)行數(shù)據(jù)傳輸了。 LCALL CLR_RECV_STALL JMP $ 不成功 ISSUE_IN_SUCCESS: NOP MOV DATAIN_OUT,#CMD_RD_USB_DATA CALL WRITEADDRESS 讀取U盤中的64個字節(jié) NOP MOV USBDATA,#0FFH CALL READDATA ; 返回 MOV R4,DATAIN_OUT MOV A,R4 JZ EXIT_RECV MOV R0,#RECV_ADDR 接收緩存地址 SAVE_RECV_CONTENT: MOV USBDATA,#0FFH CALL READDATA ; 返回 MOV @R0,DATAIN_OUT INC R0 DJNZ R4,SAVE_RECV_CONTENT NOP EXIT_RECV: RET


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频