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

📄 fw.src

📁 提供了usb接口fx2芯片的编程。从io输入到后来的差分信号输出。都给了详细的例子
💻 SRC
📖 第 1 页 / 共 3 页
字号:
	CLR  	C
	LCALL	?C?ULCMP
	JNC  	?C0003
;          *((BYTE xdata *)IntDescrAddr+i) = 0xCD;
			; SOURCE LINE # 142
	MOV  	A,IntDescrAddr?044+01H
	ADD  	A,i?040+03H
	MOV  	DPL,A
	MOV  	A,IntDescrAddr?044
	ADDC 	A,i?040+02H
	MOV  	DPH,A
	MOV  	A,#0CDH
	MOVX 	@DPTR,A
	MOV  	A,i?040+03H
	ADD  	A,#01H
	MOV  	i?040+03H,A
	CLR  	A
	ADDC 	A,i?040+02H
	MOV  	i?040+02H,A
	CLR  	A
	ADDC 	A,i?040+01H
	MOV  	i?040+01H,A
	CLR  	A
	ADDC 	A,i?040
	MOV  	i?040,A
	SJMP 	?C0002
?C0003:
;       for (i = 0; i < DevDescrLen; i++)
			; SOURCE LINE # 143
	CLR  	A
	MOV  	i?040+03H,A
	MOV  	i?040+02H,A
	MOV  	i?040+01H,A
	MOV  	i?040,A
?C0005:
	MOV  	R7,DevDescrLen?042+03H
	MOV  	R6,DevDescrLen?042+02H
	MOV  	R5,DevDescrLen?042+01H
	MOV  	R4,DevDescrLen?042
	MOV  	R3,i?040+03H
	MOV  	R2,i?040+02H
	MOV  	R1,i?040+01H
	MOV  	R0,i?040
	CLR  	C
	LCALL	?C?ULCMP
	JNC  	?C0006
;          *((BYTE xdata *)IntDescrAddr+i) = *((BYTE xdata *)ExtDescrAddr+i);
			; SOURCE LINE # 144
	MOV  	A,ExtDescrAddr?045+01H
	ADD  	A,i?040+03H
	MOV  	DPL,A
	MOV  	A,ExtDescrAddr?045
	ADDC 	A,i?040+02H
	MOV  	DPH,A
	MOVX 	A,@DPTR
	MOV  	R7,A
	MOV  	A,IntDescrAddr?044+01H
	ADD  	A,i?040+03H
	MOV  	DPL,A
	MOV  	A,IntDescrAddr?044
	ADDC 	A,i?040+02H
	MOV  	DPH,A
	MOV  	A,R7
	MOVX 	@DPTR,A
	MOV  	A,i?040+03H
	ADD  	A,#01H
	MOV  	i?040+03H,A
	CLR  	A
	ADDC 	A,i?040+02H
	MOV  	i?040+02H,A
	CLR  	A
	ADDC 	A,i?040+01H
	MOV  	i?040+01H,A
	CLR  	A
	ADDC 	A,i?040
	MOV  	i?040,A
	SJMP 	?C0005
?C0006:
;       pDeviceDscr = IntDescrAddr;
			; SOURCE LINE # 145
	MOV  	pDeviceDscr,IntDescrAddr?044
	MOV  	pDeviceDscr+01H,IntDescrAddr?044+01H
;       offset = (WORD)&DeviceDscr - INTERNAL_DSCR_ADDR;
			; SOURCE LINE # 146
	MOV  	A,#LOW (DeviceDscr)
	ADD  	A,#080H
	MOV  	R7,A
	MOV  	A,#HIGH (DeviceDscr)
	ADDC 	A,#0FFH
	MOV  	R6,A
;---- Variable 'offset?041' assigned to Register 'R6/R7' ----
;       pDeviceQualDscr -= offset;
			; SOURCE LINE # 147
	CLR  	C
	MOV  	A,pDeviceQualDscr+01H
	SUBB 	A,R7
	MOV  	pDeviceQualDscr+01H,A
	MOV  	A,pDeviceQualDscr
	SUBB 	A,R6
	MOV  	pDeviceQualDscr,A
;       pConfigDscr -= offset;
			; SOURCE LINE # 148
	CLR  	C
	MOV  	A,pConfigDscr+01H
	SUBB 	A,R7
	MOV  	pConfigDscr+01H,A
	MOV  	A,pConfigDscr
	SUBB 	A,R6
	MOV  	pConfigDscr,A
;       pOtherConfigDscr -= offset;
			; SOURCE LINE # 149
	CLR  	C
	MOV  	A,pOtherConfigDscr+01H
	SUBB 	A,R7
	MOV  	pOtherConfigDscr+01H,A
	MOV  	A,pOtherConfigDscr
	SUBB 	A,R6
	MOV  	pOtherConfigDscr,A
;       pHighSpeedConfigDscr -= offset;
			; SOURCE LINE # 150
	CLR  	C
	MOV  	A,pHighSpeedConfigDscr+01H
	SUBB 	A,R7
	MOV  	pHighSpeedConfigDscr+01H,A
	MOV  	A,pHighSpeedConfigDscr
	SUBB 	A,R6
	MOV  	pHighSpeedConfigDscr,A
;       pFullSpeedConfigDscr -= offset;
			; SOURCE LINE # 151
	CLR  	C
	MOV  	A,pFullSpeedConfigDscr+01H
	SUBB 	A,R7
	MOV  	pFullSpeedConfigDscr+01H,A
	MOV  	A,pFullSpeedConfigDscr
	SUBB 	A,R6
	MOV  	pFullSpeedConfigDscr,A
;       pStringDscr -= offset;
			; SOURCE LINE # 152
	CLR  	C
	MOV  	A,pStringDscr+01H
	SUBB 	A,R7
	MOV  	pStringDscr+01H,A
	MOV  	A,pStringDscr
	SUBB 	A,R6
	MOV  	pStringDscr,A
;    }
			; SOURCE LINE # 153
?C0001:
; 
;    EZUSB_IRQ_ENABLE();            // Enable USB interrupt (INT2)
			; SOURCE LINE # 155
	SETB 	EUSB
;    EZUSB_ENABLE_RSMIRQ();            // Wake-up interrupt
			; SOURCE LINE # 156
	ORL  	EICON,#020H
; 
;    INTSETUP |= (bmAV2EN | bmAV4EN);     // Enable INT 2 & 4 autovectoring
			; SOURCE LINE # 158
	MOV  	DPTR,#INTSETUP
	MOVX 	A,@DPTR
	ORL  	A,#09H
	MOVX 	@DPTR,A
; 
;    USBIE |= bmSUDAV | bmSUTOK | bmSUSP | bmURES | bmHSGRANT;   // Enable selected interrupts
			; SOURCE LINE # 160
	MOV  	DPTR,#USBIE
	MOVX 	A,@DPTR
	ORL  	A,#03DH
	MOVX 	@DPTR,A
;    EA = 1;                  // Enable 8051 interrupts
			; SOURCE LINE # 161
	SETB 	EA
; 
; #ifndef NO_RENUM
;    // Renumerate if necessary.  Do this by checking the renum bit.  If it
;    // is already set, there is no need to renumerate.  The renum bit will
;    // already be set if this firmware was loaded from an eeprom.
;    if(!(USBCS & bmRENUM))
			; SOURCE LINE # 167
	MOV  	DPTR,#USBCS
	MOVX 	A,@DPTR
	JB   	ACC.1,?C0008
;    {
			; SOURCE LINE # 168
;        EZUSB_Discon(TRUE);   // renumerate
			; SOURCE LINE # 169
	SETB 	?EZUSB_Discon?BIT
	LCALL	EZUSB_Discon
;    }
			; SOURCE LINE # 170
?C0008:
; #endif
; 
;    // unconditionally re-connect.  If we loaded from eeprom we are
;    // disconnected and need to connect.  If we just renumerated this
;    // is not necessary but doesn't hurt anything
;    USBCS &=~bmDISCON;
			; SOURCE LINE # 176
	MOV  	DPTR,#USBCS
	MOVX 	A,@DPTR
	ANL  	A,#0F7H
	MOVX 	@DPTR,A
; 
;    CKCON = (CKCON&(~bmSTRETCH)) | FW_STRETCH_VALUE; // Set stretch to 0 (after renumeration)
			; SOURCE LINE # 178
	ANL  	CKCON,#0F8H
; 
;    // clear the Sleep flag.
;    Sleep = FALSE;
			; SOURCE LINE # 181
	CLR  	Sleep
?C0009:
; 
; 
; 
;    // Task Dispatcher
;    while(TRUE)               // Main Loop
			; SOURCE LINE # 186
;    {
			; SOURCE LINE # 187
;       if(GotSUD)            // Wait for SUDAV
			; SOURCE LINE # 188
	JNB  	GotSUD,?C0011
;       {
			; SOURCE LINE # 189
;          SetupCommand();          // Implement setup command
			; SOURCE LINE # 190
	LCALL	SetupCommand
;            GotSUD = FALSE;            // Clear SUDAV flag
			; SOURCE LINE # 191
	CLR  	GotSUD
;       }
			; SOURCE LINE # 192
?C0011:
; 
;       // Poll User Device
;       // NOTE: Idle mode stops the processor clock.  There are only two
;       // ways out of idle mode, the WAKEUP pin, and detection of the USB
;       // resume state on the USB bus.  The timers will stop and the
;       // processor will not wake up on any other interrupts.
;       if (Sleep)
			; SOURCE LINE # 199
	JNB  	Sleep,?C0012
;           {
			; SOURCE LINE # 200
;           if(TD_Suspend())
			; SOURCE LINE # 201
	LCALL	TD_Suspend
	JNC  	?C0012
;               { 
			; SOURCE LINE # 202
;               Sleep = FALSE;            // Clear the "go to sleep" flag.  Do it here to prevent any race condition between wakeup and the next sleep.
			; SOURCE LINE # 203
	CLR  	Sleep
?C0016:
;               do
;                   {
			; SOURCE LINE # 205
;                     EZUSB_Susp();         // Place processor in idle mode.
			; SOURCE LINE # 206
	LCALL	EZUSB_Susp
;                   }
			; SOURCE LINE # 207
;                 while(!Rwuen && EZUSB_EXTWAKEUP());
			; SOURCE LINE # 208
	JB   	Rwuen,?C0015
	MOV  	DPTR,#WAKEUPCS
	MOVX 	A,@DPTR
	JNB  	ACC.7,?C0018
	MOVX 	A,@DPTR
	JB   	ACC.1,?C0016
?C0018:
	MOV  	DPTR,#WAKEUPCS
	MOVX 	A,@DPTR
	JNB  	ACC.6,?C0015
	MOVX 	A,@DPTR
	JB   	ACC.0,?C0016
?C0015:
;                 // Must continue to go back into suspend if the host has disabled remote wakeup
;                 // *and* the wakeup was caused by the external wakeup pin.
;                 
;              // 8051 activity will resume here due to USB bus or Wakeup# pin activity.
;              EZUSB_Resume();   // If source is the Wakeup# pin, signal the host to Resume.      
			; SOURCE LINE # 213
	LCALL	EZUSB_Resume
;              TD_Resume();
			; SOURCE LINE # 214
	LCALL	TD_Resume
;               }   
			; SOURCE LINE # 215
;           }
			; SOURCE LINE # 216
?C0012:
;       TD_Poll();
			; SOURCE LINE # 217
	LCALL	TD_Poll
;    }
			; SOURCE LINE # 218
	SJMP 	?C0009
; END OF main

; }
; 
; // Device request parser
; void SetupCommand(void)

	RSEG  ?PR?SetupCommand?FW
SetupCommand:
	USING	0
			; SOURCE LINE # 222
; {
			; SOURCE LINE # 223
;    void   *dscr_ptr;
; 
;    switch(SETUPDAT[1])
			; SOURCE LINE # 226
	MOV  	DPTR,#SETUPDAT+01H
	MOVX 	A,@DPTR
	JNZ  	$ + 5H
	LJMP 	?C0037
	DEC  	A
	JNZ  	$ + 5H
	LJMP 	?C0046
	ADD  	A,#0FEH
	JNZ  	$ + 5H
	LJMP 	?C0057
	ADD  	A,#0FBH
	JNZ  	$ + 5H
	LJMP 	?C0036
	DEC  	A
	JNZ  	$ + 5H
	LJMP 	?C0035
	DEC  	A
	JZ   	?C0033
	DEC  	A
	JZ   	?C0034
	ADD  	A,#05H
	JZ   	$ + 5H
	LJMP 	?C0068
;    {
			; SOURCE LINE # 227
;       case SC_GET_DESCRIPTOR:                  // *** Get Descriptor
			; SOURCE LINE # 228
?C0022:
;          if(DR_GetDescriptor())
			; SOURCE LINE # 229
	LCALL	DR_GetDescriptor
	JC   	$ + 5H
	LJMP 	?C0021
;             switch(SETUPDAT[3])         
			; SOURCE LINE # 230
	MOV  	DPTR,#SETUPDAT+03H
	MOVX 	A,@DPTR
	ADD  	A,#0FEH
	JZ   	?C0027
	DEC  	A
	JZ   	?C0029
	ADD  	A,#0FDH
	JZ   	?C0026
	DEC  	A
	JZ   	?C0028
	ADD  	A,#06H
	JNZ  	?C0032
;             {
			; SOURCE LINE # 231
;                case GD_DEVICE:            // Device
			; SOURCE LINE # 232
?C0025:
;                   SUDPTRH = MSB(pDeviceDscr);
			; SOURCE LINE # 233
	MOV  	A,pDeviceDscr
	MOV  	DPTR,#SUDPTRH
	MOVX 	@DPTR,A
;                   SUDPTRL = LSB(pDeviceDscr);
			; SOURCE LINE # 234
	MOV  	A,pDeviceDscr+01H
;                   break;
			; SOURCE LINE # 235
	SJMP 	?C0075
;                case GD_DEVICE_QUALIFIER:            // Device Qualifier
			; SOURCE LINE # 236
?C0026:
;                   SUDPTRH = MSB(pDeviceQualDscr);
			; SOURCE LINE # 237
	MOV  	A,pDeviceQualDscr
	MOV  	DPTR,#SUDPTRH
	MOVX 	@DPTR,A
;                   SUDPTRL = LSB(pDeviceQualDscr);
			; SOURCE LINE # 238
	MOV  	A,pDeviceQualDscr+01H
?C0072:
;                   break;
			; SOURCE LINE # 239
	SJMP 	?C0075
;                case GD_CONFIGURATION:         // Configuration
			; SOURCE LINE # 240
?C0027:
;                   SUDPTRH = MSB(pConfigDscr);
			; SOURCE LINE # 241
	MOV  	A,pConfigDscr
	MOV  	DPTR,#SUDPTRH
	MOVX 	@DPTR,A
;                   SUDPTRL = LSB(pConfigDscr);
			; SOURCE LINE # 242
	MOV  	A,pConfigDscr+01H
?C0073:
;                   break;
			; SOURCE LINE # 243
	SJMP 	?C0075
;                case GD_OTHER_SPEED_CONFIGURATION:  // Other Speed Configuration
			; SOURCE LINE # 244
?C0028:
;                   SUDPTRH = MSB(pOtherConfigDscr);
			; SOURCE LINE # 245
	MOV  	A,pOtherConfigDscr
	MOV  	DPTR,#SUDPTRH
	MOVX 	@DPTR,A
;                   SUDPTRL = LSB(pOtherConfigDscr);
			; SOURCE LINE # 246
	MOV  	A,pOtherConfigDscr+01H
?C0074:
;                   break;
			; SOURCE LINE # 247
	SJMP 	?C0075
;                case GD_STRING:            // String
			; SOURCE LINE # 248
?C0029:
;                   if(dscr_ptr = (void *)EZUSB_GetStringDscr(SETUPDAT[2]))
			; SOURCE LINE # 249
	MOV  	DPTR,#SETUPDAT+02H
	MOVX 	A,@DPTR
	MOV  	R7,A
	LCALL	_EZUSB_GetStringDscr
	MOV  	R2,AR6
	MOV  	R1,AR7
	MOV  	R3,#01H
;---- Variable 'dscr_ptr?146' assigned to Register 'R1/R2/R3' ----
	MOV  	A,R2
	ORL  	A,R1
	ORL  	A,R3
	JZ   	?C0076
;                   {
			; SOURCE LINE # 250
;                      SUDPTRH = MSB(dscr_ptr);
			; SOURCE LINE # 251
	MOV  	A,R6
	MOV  	DPTR,#SUDPTRH
	MOVX 	@DPTR,A
;                      SUDPTRL = LSB(dscr_ptr);
			; SOURCE LINE # 252
	MOV  	A,R7
?C0075:
	MOV  	DPTR,#SUDPTRL
	MOVX 	@DPTR,A
;                   }
			; SOURCE LINE # 253
	LJMP 	?C0021
;                   else 
;                      EZUSB_STALL_EP0();   // Stall End Point 0
;                   break;
;                default:            // Invalid request
			; SOURCE LINE # 257

⌨️ 快捷键说明

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