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

📄 fw.src

📁 提供了usb接口fx2芯片的编程。从io输入到后来的差分信号输出。都给了详细的例子
💻 SRC
📖 第 1 页 / 共 3 页
字号:
?C0032:
;                   EZUSB_STALL_EP0();      // Stall End Point 0
			; SOURCE LINE # 258
?C0076:
;             }
			; SOURCE LINE # 259
;          break;
			; SOURCE LINE # 260
	LJMP 	?C0083
;       case SC_GET_INTERFACE:                  // *** Get Interface
			; SOURCE LINE # 261
?C0033:
;          DR_GetInterface();
			; SOURCE LINE # 262
	LCALL	DR_GetInterface
;          break;
			; SOURCE LINE # 263
	LJMP 	?C0021
;       case SC_SET_INTERFACE:                  // *** Set Interface
			; SOURCE LINE # 264
?C0034:
;          DR_SetInterface();
			; SOURCE LINE # 265
	LCALL	DR_SetInterface
;          break;
			; SOURCE LINE # 266
	LJMP 	?C0021
;       case SC_SET_CONFIGURATION:               // *** Set Configuration
			; SOURCE LINE # 267
?C0035:
;          DR_SetConfiguration();
			; SOURCE LINE # 268
	LCALL	DR_SetConfiguration
;          break;
			; SOURCE LINE # 269
	LJMP 	?C0021
;       case SC_GET_CONFIGURATION:               // *** Get Configuration
			; SOURCE LINE # 270
?C0036:
;          DR_GetConfiguration();
			; SOURCE LINE # 271
	LCALL	DR_GetConfiguration
;          break;
			; SOURCE LINE # 272
	LJMP 	?C0021
;       case SC_GET_STATUS:                  // *** Get Status
			; SOURCE LINE # 273
?C0037:
;          if(DR_GetStatus())
			; SOURCE LINE # 274
	LCALL	DR_GetStatus
	JC   	$ + 5H
	LJMP 	?C0021
;             switch(SETUPDAT[0])
			; SOURCE LINE # 275
	MOV  	DPTR,#SETUPDAT
	MOVX 	A,@DPTR
	ADD  	A,#07FH
	JZ   	?C0041
	DEC  	A
	JZ   	?C0042
	ADD  	A,#02H
	JNZ  	?C0045
;             {
			; SOURCE LINE # 276
;                case GS_DEVICE:            // Device
			; SOURCE LINE # 277
?C0040:
;                   EP0BUF[0] = ((BYTE)Rwuen << 1) | (BYTE)Selfpwr;
			; SOURCE LINE # 278
	MOV  	C,Rwuen
	CLR  	A
	RLC  	A
	ADD  	A,ACC
	MOV  	R7,A
	MOV  	C,Selfpwr
	CLR  	A
	RLC  	A
	ORL  	A,R7
;                   EP0BUF[1] = 0;
			; SOURCE LINE # 279
;                   EP0BCH = 0;
			; SOURCE LINE # 280
;                   EP0BCL = 2;
			; SOURCE LINE # 281
;                   break;
			; SOURCE LINE # 282
	SJMP 	?C0078
;                case GS_INTERFACE:         // Interface
			; SOURCE LINE # 283
?C0041:
;                   EP0BUF[0] = 0;
			; SOURCE LINE # 284
	CLR  	A
	MOV  	DPTR,#EP0BUF
	MOVX 	@DPTR,A
;                   EP0BUF[1] = 0;
			; SOURCE LINE # 285
;                   EP0BCH = 0;
			; SOURCE LINE # 286
;                   EP0BCL = 2;
			; SOURCE LINE # 287
;                   break;
			; SOURCE LINE # 288
	SJMP 	?C0079
;                case GS_ENDPOINT:         // End Point
			; SOURCE LINE # 289
?C0042:
;                   EP0BUF[0] = *(BYTE xdata *) epcs(SETUPDAT[4]) & bmEPSTALL;
			; SOURCE LINE # 290
	MOV  	DPTR,#SETUPDAT+04H
	MOVX 	A,@DPTR
	ANL  	A,#07EH
	MOV  	R7,A
	MOV  	R6,#00H
	MOVX 	A,@DPTR
	SETB 	C
	SUBB 	A,#080H
	MOV  	R4,#00H
	JC   	?C0043
	MOV  	R5,#01H
	SJMP 	?C0044
?C0043:
	MOV  	R5,#00H
?C0044:
	MOV  	A,R4
	ORL  	A,R6
	MOV  	R6,A
	MOV  	A,R5
	ORL  	A,R7
	ADD  	A,#LOW (EPCS_Offset_Lookup_Table)
	MOV  	DPL,A
	MOV  	A,#HIGH (EPCS_Offset_Lookup_Table)
	ADDC 	A,R6
	MOV  	DPH,A
	CLR  	A
	MOVC 	A,@A+DPTR
	MOV  	R7,A
	RLC  	A
	SUBB 	A,ACC
	MOV  	R6,A
	MOV  	A,R7
	ADD  	A,#0A1H
	MOV  	R7,A
	MOV  	A,R6
	ADDC 	A,#0E6H
	MOV  	DPL,R7
	MOV  	DPH,A
	MOVX 	A,@DPTR
	ANL  	A,#01H
?C0078:
	MOV  	DPTR,#EP0BUF
	MOVX 	@DPTR,A
;                   EP0BUF[1] = 0;
			; SOURCE LINE # 291
	CLR  	A
?C0079:
	INC  	DPTR
	MOVX 	@DPTR,A
;                   EP0BCH = 0;
			; SOURCE LINE # 292
	MOV  	DPTR,#EP0BCH
	MOVX 	@DPTR,A
;                   EP0BCL = 2;
			; SOURCE LINE # 293
	MOV  	DPTR,#EP0BCL
	MOV  	A,#02H
	MOVX 	@DPTR,A
;                   break;
			; SOURCE LINE # 294
	LJMP 	?C0021
;                default:            // Invalid Command
			; SOURCE LINE # 295
?C0045:
;                   EZUSB_STALL_EP0();      // Stall End Point 0
			; SOURCE LINE # 296
?C0077:
;             }
			; SOURCE LINE # 297
;          break;
			; SOURCE LINE # 298
	LJMP 	?C0083
;       case SC_CLEAR_FEATURE:                  // *** Clear Feature
			; SOURCE LINE # 299
?C0046:
;          if(DR_ClearFeature())
			; SOURCE LINE # 300
	LCALL	DR_ClearFeature
	JC   	$ + 5H
	LJMP 	?C0021
;             switch(SETUPDAT[0])
			; SOURCE LINE # 301
	MOV  	DPTR,#SETUPDAT
	MOVX 	A,@DPTR
	ADD  	A,#0FEH
	JZ   	?C0052
	ADD  	A,#02H
	JZ   	$ + 5H
	LJMP 	?C0021
;             {
			; SOURCE LINE # 302
;                case FT_DEVICE:            // Device
			; SOURCE LINE # 303
?C0049:
;                   if(SETUPDAT[2] == 1)
			; SOURCE LINE # 304
	MOV  	DPTR,#SETUPDAT+02H
	MOVX 	A,@DPTR
	CJNE 	A,#01H,?C0050
;                      Rwuen = FALSE;       // Disable Remote Wakeup
			; SOURCE LINE # 305
	CLR  	Rwuen
	LJMP 	?C0021
?C0050:
;                   else
;                      EZUSB_STALL_EP0();   // Stall End Point 0
			; SOURCE LINE # 307
?C0080:
;                   break;
			; SOURCE LINE # 308
	LJMP 	?C0083
;                case FT_ENDPOINT:         // End Point
			; SOURCE LINE # 309
?C0052:
;                   if(SETUPDAT[2] == 0)
			; SOURCE LINE # 310
	MOV  	DPTR,#SETUPDAT+02H
	MOVX 	A,@DPTR
	JNZ  	?C0053
;                   {
			; SOURCE LINE # 311
;                      *(BYTE xdata *) epcs(SETUPDAT[4]) &= ~bmEPSTALL;
			; SOURCE LINE # 312
	MOV  	DPTR,#SETUPDAT+04H
	MOVX 	A,@DPTR
	ANL  	A,#07EH
	MOV  	R7,A
	MOV  	R6,#00H
	MOVX 	A,@DPTR
	SETB 	C
	SUBB 	A,#080H
	MOV  	R4,#00H
	JC   	?C0054
	MOV  	R5,#01H
	SJMP 	?C0055
?C0054:
	MOV  	R5,#00H
?C0055:
	MOV  	A,R4
	ORL  	A,R6
	MOV  	R6,A
	MOV  	A,R5
	ORL  	A,R7
	ADD  	A,#LOW (EPCS_Offset_Lookup_Table)
	MOV  	DPL,A
	MOV  	A,#HIGH (EPCS_Offset_Lookup_Table)
	ADDC 	A,R6
	MOV  	DPH,A
	CLR  	A
	MOVC 	A,@A+DPTR
	MOV  	R7,A
	RLC  	A
	SUBB 	A,ACC
	MOV  	R6,A
	MOV  	A,R7
	ADD  	A,#0A1H
	MOV  	R7,A
	MOV  	A,R6
	ADDC 	A,#0E6H
	MOV  	DPL,R7
	MOV  	DPH,A
	MOVX 	A,@DPTR
	ANL  	A,#0FEH
	MOVX 	@DPTR,A
;                      EZUSB_RESET_DATA_TOGGLE( SETUPDAT[4] );
			; SOURCE LINE # 313
	MOV  	DPTR,#SETUPDAT+04H
	MOVX 	A,@DPTR
	ANL  	A,#080H
	RRC  	A
	RRC  	A
	RRC  	A
	ANL  	A,#01FH
	MOV  	R7,A
	MOVX 	A,@DPTR
	ANL  	A,#0FH
	ADD  	A,R7
	MOV  	DPTR,#TOGCTL
	MOVX 	@DPTR,A
	MOVX 	A,@DPTR
	ORL  	A,#020H
	MOVX 	@DPTR,A
;                   }
			; SOURCE LINE # 314
	SJMP 	?C0021
?C0053:
;                   else
;                      EZUSB_STALL_EP0();   // Stall End Point 0
			; SOURCE LINE # 316
?C0081:
;                   break;
			; SOURCE LINE # 317
	SJMP 	?C0083
;             }
			; SOURCE LINE # 318
;          break;
			; SOURCE LINE # 319
;       case SC_SET_FEATURE:                  // *** Set Feature
			; SOURCE LINE # 320
?C0057:
;          if(DR_SetFeature())
			; SOURCE LINE # 321
	LCALL	DR_SetFeature
	JNC  	?C0021
;             switch(SETUPDAT[0])
			; SOURCE LINE # 322
	MOV  	DPTR,#SETUPDAT
	MOVX 	A,@DPTR
	ADD  	A,#0FEH
	JZ   	?C0065
	ADD  	A,#02H
	JNZ  	?C0021
;             {
			; SOURCE LINE # 323
;                case FT_DEVICE:            // Device
			; SOURCE LINE # 324
?C0060:
;                   if(SETUPDAT[2] == 1)
			; SOURCE LINE # 325
	MOV  	DPTR,#SETUPDAT+02H
	MOVX 	A,@DPTR
	CJNE 	A,#01H,?C0061
;                      Rwuen = TRUE;      // Enable Remote Wakeup
			; SOURCE LINE # 326
	SETB 	Rwuen
	SJMP 	?C0021
?C0061:
;                   else if(SETUPDAT[2] == 2)
			; SOURCE LINE # 327
	MOV  	DPTR,#SETUPDAT+02H
	MOVX 	A,@DPTR
	XRL  	A,#02H
	JZ   	?C0021
;                      // Set Feature Test Mode.  The core handles this request.  However, it is
;                      // necessary for the firmware to complete the handshake phase of the
;                      // control transfer before the chip will enter test mode.  It is also
;                      // necessary for FX2 to be physically disconnected (D+ and D-)
;                      // from the host before it will enter test mode.
;                      break;
			; SOURCE LINE # 333
?C0063:
;                   else
;                      EZUSB_STALL_EP0();   // Stall End Point 0
			; SOURCE LINE # 335
?C0082:
;                   break;
			; SOURCE LINE # 336
	SJMP 	?C0083
;                case FT_ENDPOINT:         // End Point
			; SOURCE LINE # 337
?C0065:
;                   *(BYTE xdata *) epcs(SETUPDAT[4]) |= bmEPSTALL;
			; SOURCE LINE # 338
	MOV  	DPTR,#SETUPDAT+04H
	MOVX 	A,@DPTR
	ANL  	A,#07EH
	MOV  	R7,A
	MOV  	R6,#00H
	MOVX 	A,@DPTR
	SETB 	C
	SUBB 	A,#080H
	MOV  	R4,#00H
	JC   	?C0066
	MOV  	R5,#01H
	SJMP 	?C0067
?C0066:
	MOV  	R5,#00H
?C0067:
	MOV  	A,R4
	ORL  	A,R6
	MOV  	R6,A
	MOV  	A,R5
	ORL  	A,R7
	ADD  	A,#LOW (EPCS_Offset_Lookup_Table)
	MOV  	DPL,A
	MOV  	A,#HIGH (EPCS_Offset_Lookup_Table)
	ADDC 	A,R6
	MOV  	DPH,A
	CLR  	A
	MOVC 	A,@A+DPTR
	MOV  	R7,A
	RLC  	A
	SUBB 	A,ACC
	MOV  	R6,A
	MOV  	A,R7
	ADD  	A,#0A1H
	MOV  	R7,A
	MOV  	A,R6
	ADDC 	A,#0E6H
	MOV  	DPL,R7
	MOV  	DPH,A
;                   break;
			; SOURCE LINE # 339
	SJMP 	?C0084
;             }
			; SOURCE LINE # 340
;          break;
			; SOURCE LINE # 341
;       default:                     // *** Invalid Command
			; SOURCE LINE # 342
?C0068:
;          if(DR_VendorCmnd())
			; SOURCE LINE # 343
	LCALL	DR_VendorCmnd
	JNC  	?C0021
;             EZUSB_STALL_EP0();            // Stall End Point 0
			; SOURCE LINE # 344
?C0083:
	MOV  	DPTR,#EP0CS
?C0084:
	MOVX 	A,@DPTR
	ORL  	A,#01H
	MOVX 	@DPTR,A
;    }
			; SOURCE LINE # 345
?C0021:
; 
;    // Acknowledge handshake phase of device request
;    EP0CS |= bmHSNAK;
			; SOURCE LINE # 348
	MOV  	DPTR,#EP0CS
	MOVX 	A,@DPTR
	ORL  	A,#080H
	MOVX 	@DPTR,A
; }
			; SOURCE LINE # 349
	RET  	
; END OF SetupCommand

CSEG	AT	00033H
	LJMP	resume_isr

; 
; // Wake-up interrupt handler
; void resume_isr(void) interrupt WKUP_VECT

	RSEG  ?PR?resume_isr?FW
	USING	0
resume_isr:
			; SOURCE LINE # 352
; {
;    EZUSB_CLEAR_RSMIRQ();
			; SOURCE LINE # 354
	ANL  	EICON,#0EFH
; }
			; SOURCE LINE # 355
	RETI 	
; END OF resume_isr

	END

⌨️ 快捷键说明

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