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

📄 isr.src

📁 Comlete files for fullfile the slave USB function!
💻 SRC
📖 第 1 页 / 共 2 页
字号:

; 
; void bus_reset(void)

	RSEG  ?PR?bus_reset?ISR
bus_reset:
			; SOURCE LINE # 114
; {
			; SOURCE LINE # 115
; }
			; SOURCE LINE # 116
	RET  	
; END OF bus_reset

; 
; // Control OUT handler
; void ProcessCtrlOutEP(void)

	RSEG  ?PR?ProcessCtrlOutEP?ISR
ProcessCtrlOutEP:
	USING	0
			; SOURCE LINE # 119
; {
			; SOURCE LINE # 120
; 	unsigned char ep_last, i;
; 
; 	/* Clear corresponding endpoint interrupt flag */
; 	ep_last = D12_ReadLastTransactionStatus(0); 
			; SOURCE LINE # 124
	CLR  	A
	MOV  	R7,A
	LCALL	_D12_ReadLastTransactionStatus
;---- Variable 'ep_last?442' assigned to Register 'R7' ----
; 
; 	/* check to see if the current received status is a SETUP package,
; 	   if so, SETUP endpoints have to be 'ACK'ed. */
; 	if (ep_last & D12_SETUPPACKET) {	/* SETUP package ? */
			; SOURCE LINE # 128
	MOV  	A,R7
	JB   	ACC.5,$ + 6H
	LJMP 	?C0014
; 		ControlData.wLength = 0;
			; SOURCE LINE # 129
	CLR  	A
	MOV  	ControlData+08H,A
	MOV  	ControlData+09H,A
; 		ControlData.wCount = 0;
			; SOURCE LINE # 130
	MOV  	ControlData+0AH,A
	MOV  	ControlData+0BH,A
; 
; 		/* Select control OUT endpoint, readbuffer, if validate device request,
; 		   save to deviceRequest clear buffer */
; 		if( D12_ReadEndpoint(0, (unsigned char *)(&(ControlData.DeviceRequest)),
			; SOURCE LINE # 134
	MOV  	R3,A
	MOV  	R2,#HIGH (ControlData)
	MOV  	R1,#LOW (ControlData)
	MOV  	?_D12_ReadEndpoint?BYTE+04H,#08H
	MOV  	R7,A
	LCALL	_D12_ReadEndpoint
	MOV  	A,R7
	XRL  	A,#08H
	JZ   	?C0015
; 			sizeof(ControlData.DeviceRequest)) != sizeof(DEVICE_REQUEST) ) {
			; SOURCE LINE # 135
; 			
; 			stall_ep0;	/* stall control endpoints */
			; SOURCE LINE # 137
; 			bEPPflags.bits.control_state = USB_IDLE;
			; SOURCE LINE # 138
	LJMP 	?C0035
; 			
; 			return;
; 		}
			; SOURCE LINE # 141
?C0015:
; 		
; 		/* swap data low byte and high byte, for USB data structure is different
; 		   from C51 data structure */
; 		ControlData.DeviceRequest.wValue  = SWAP(ControlData.DeviceRequest.wValue);
			; SOURCE LINE # 145
	MOV  	A,ControlData+02H
	MOV  	R5,A
	MOV  	A,ControlData+03H
	MOV  	ControlData+02H,A
	MOV  	A,R5
	MOV  	ControlData+03H,A
; 		ControlData.DeviceRequest.wIndex  = SWAP(ControlData.DeviceRequest.wIndex);
			; SOURCE LINE # 146
	MOV  	A,ControlData+04H
	MOV  	R5,A
	MOV  	A,ControlData+05H
	MOV  	ControlData+04H,A
	MOV  	A,R5
	MOV  	ControlData+05H,A
; 		ControlData.DeviceRequest.wLength = SWAP(ControlData.DeviceRequest.wLength);
			; SOURCE LINE # 147
	MOV  	A,ControlData+06H
	MOV  	R5,A
	MOV  	A,ControlData+07H
	MOV  	ControlData+06H,A
	MOV  	A,R5
	MOV  	ControlData+07H,A
; 
; 		/* Acknowledge SETUP command to both IN and OUT endpoints, to reanable validate
; 	       and ClearBuffer commands. */
; 		D12_AcknowledgeEndpoint(0);
			; SOURCE LINE # 151
	CLR  	A
	MOV  	R7,A
	LCALL	_D12_AcknowledgeEndpoint
; 		D12_AcknowledgeEndpoint(1);
			; SOURCE LINE # 152
	MOV  	R7,#01H
	LCALL	_D12_AcknowledgeEndpoint
; 
; 		/* If ControlRead, wLength means the number of bytes to be sent to host;
; 		   if ControlWrite,wLength means the number of bytes to be got from host. */
; 		ControlData.wLength = ControlData.DeviceRequest.wLength;
			; SOURCE LINE # 156
	MOV  	ControlData+08H,ControlData+06H
	MOV  	ControlData+09H,ControlData+07H
; 		ControlData.wCount = 0;
			; SOURCE LINE # 157
	CLR  	A
	MOV  	ControlData+0AH,A
	MOV  	ControlData+0BH,A
; 
; 		/* Verify whether the contro transfer is Control READ/WRITE ? */
; 		if (ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK) {
			; SOURCE LINE # 160
	MOV  	A,ControlData
	JNB  	ACC.7,?C0017
; 			/* Control Read (get command, device will need to send data packet back to host) */
; 			bEPPflags.bits.setup_packet = 1;	// set event SETUP packet 
			; SOURCE LINE # 162
	MOV  	R7,bEPPflags
	MOV  	A,R7
	ORL  	A,#08H
	MOV  	bEPPflags,A
; 			bEPPflags.bits.control_state = USB_TRANSMIT;		
			; SOURCE LINE # 163
	MOV  	R7,bEPPflags
	MOV  	A,R7
	ANL  	A,#03FH
	ORL  	A,#040H
	MOV  	bEPPflags,A
; 		}
			; SOURCE LINE # 164
	RET  	
?C0017:
; 		else {	/* Control Write (set command) */
			; SOURCE LINE # 165
; 			if (ControlData.DeviceRequest.wLength == 0) {
			; SOURCE LINE # 166
	MOV  	A,ControlData+07H
	ORL  	A,ControlData+06H
	JNZ  	?C0019
; 			    /* Control Write without data */
; 				bEPPflags.bits.setup_packet = 1;	// set event SETUP packet 
			; SOURCE LINE # 168
; 				bEPPflags.bits.control_state = USB_IDLE;	
			; SOURCE LINE # 169
; 			}
			; SOURCE LINE # 170
	SJMP 	?C0036
?C0019:
; 			else {	/*Control Write with data */
			; SOURCE LINE # 171
; 				if(ControlData.DeviceRequest.wLength > MAX_CONTROLDATA_SIZE) {
			; SOURCE LINE # 172
	SETB 	C
	MOV  	A,ControlData+07H
	SUBB 	A,#08H
	MOV  	A,ControlData+06H
	SUBB 	A,#00H
	MOV  	R7,bEPPflags
	MOV  	A,R7
	ANL  	A,#03FH
	JC   	?C0021
; 					/* data length not acceptable */
; 					bEPPflags.bits.control_state = USB_IDLE;
			; SOURCE LINE # 174
	MOV  	bEPPflags,A
; 				stall_ep0;	/* stall control endpoints */
			; SOURCE LINE # 175
; 				}
			; SOURCE LINE # 176
	RET  	
?C0021:
; 				else {
			; SOURCE LINE # 177
; 					/* Device need to be received number of wLength bytes of data from host */
; 					bEPPflags.bits.control_state = USB_RECEIVE;	/* set command with OUT token */
			; SOURCE LINE # 179
	ORL  	A,#080H
	MOV  	bEPPflags,A
; 				}
			; SOURCE LINE # 180
; 			} // set command with data
			; SOURCE LINE # 181
; 		} // else set command
			; SOURCE LINE # 182
; 	} // if setup packet
			; SOURCE LINE # 183
	RET  	
?C0014:
; 
; 	else if (bEPPflags.bits.control_state == USB_RECEIVE) {
			; SOURCE LINE # 185
	MOV  	R7,bEPPflags
	MOV  	A,R7
	SWAP 	A
	RRC  	A
	RRC  	A
	ANL  	A,#03H
	XRL  	A,#02H
	JNZ  	?C0024
; 		i =	D12_ReadEndpoint(0, ControlData.dataBuffer + ControlData.wCount,
			; SOURCE LINE # 186
	MOV  	A,#LOW (ControlData+0FH)
	ADD  	A,ControlData+0BH
	MOV  	R1,A
	CLR  	A
	MOV  	R2,A
	MOV  	R3,A
	MOV  	?_D12_ReadEndpoint?BYTE+04H,#010H
	MOV  	R7,A
	LCALL	_D12_ReadEndpoint
;---- Variable 'i?443' assigned to Register 'R7' ----
; 			EP0_PACKET_SIZE);
; 
; 		ControlData.wCount += i;
			; SOURCE LINE # 189
	MOV  	A,R7
	ADD  	A,ControlData+0BH
	MOV  	ControlData+0BH,A
	CLR  	A
	ADDC 	A,ControlData+0AH
	MOV  	ControlData+0AH,A
; 		if( i != EP0_PACKET_SIZE || ControlData.wCount >= ControlData.wLength) {
			; SOURCE LINE # 190
	CJNE 	R7,#010H,?C0026
	CLR  	C
	MOV  	A,ControlData+0BH
	SUBB 	A,ControlData+09H
	MOV  	A,ControlData+0AH
	SUBB 	A,ControlData+08H
	JC   	?C0016
?C0026:
; 			bEPPflags.bits.setup_packet = 1;
			; SOURCE LINE # 191
?C0036:
	MOV  	R7,bEPPflags
	MOV  	A,R7
	ORL  	A,#08H
	MOV  	bEPPflags,A
; 			bEPPflags.bits.control_state = USB_IDLE;
			; SOURCE LINE # 192
; 		}
			; SOURCE LINE # 193
; 	}
			; SOURCE LINE # 194
	SJMP 	?C0037
?C0024:
; 
; 	else {
			; SOURCE LINE # 196
; 		bEPPflags.bits.control_state = USB_IDLE;
			; SOURCE LINE # 197
?C0035:
?C0037:
	MOV  	R7,bEPPflags
	MOV  	A,R7
	ANL  	A,#03FH
	MOV  	bEPPflags,A
; 	}
			; SOURCE LINE # 198
; }
			; SOURCE LINE # 199
?C0016:
	RET  	
; END OF ProcessCtrlOutEP

; 
; // Control IN handler
; void ProcessCtrlInEP(void)

	RSEG  ?PR?ProcessCtrlInEP?ISR
ProcessCtrlInEP:
	USING	0
			; SOURCE LINE # 202
; {
			; SOURCE LINE # 203
; 	short i = ControlData.wLength - ControlData.wCount;
			; SOURCE LINE # 204
	CLR  	C
	MOV  	A,ControlData+09H
	SUBB 	A,ControlData+0BH
	MOV  	i?544+01H,A
	MOV  	A,ControlData+08H
	SUBB 	A,ControlData+0AH
	MOV  	i?544,A
; 
; 	D12_ReadLastTransactionStatus(1); /* Clear interrupt flag */
			; SOURCE LINE # 206
	MOV  	R7,#01H
	LCALL	_D12_ReadLastTransactionStatus
; 
; 	/* if not in transmit status, return */
; 	if (bEPPflags.bits.control_state != USB_TRANSMIT) 
			; SOURCE LINE # 209
	MOV  	R7,bEPPflags
	MOV  	A,R7
	SWAP 	A
	RRC  	A
	RRC  	A
	ANL  	A,#03H
	XRL  	A,#01H
	JNZ  	?C0029
?C0028:
; 		return;
; 
; 	/* number of rest bytes to be sent is more then EP0_PACKET_SIZE bytes, send EP0_PACKET_SIZE bytes */
; 	if( i >= EP0_PACKET_SIZE) { 
			; SOURCE LINE # 213
	CLR  	C
	MOV  	A,i?544+01H
	SUBB 	A,#010H
	MOV  	A,i?544
	XRL  	A,#080H
	SUBB 	A,#080H
	JC   	?C0030
; 		D12_WriteEndpoint(1, ControlData.pData + ControlData.wCount, EP0_PACKET_SIZE);
			; SOURCE LINE # 214
	MOV  	R3,ControlData+0CH
	MOV  	A,ControlData+0EH
	ADD  	A,ControlData+0BH
	MOV  	R1,A
	MOV  	A,ControlData+0DH
	ADDC 	A,ControlData+0AH
	MOV  	R2,A
	MOV  	?_D12_WriteEndpoint?BYTE+04H,#010H
	MOV  	R7,#01H
	LCALL	_D12_WriteEndpoint
; 		ControlData.wCount += EP0_PACKET_SIZE;
			; SOURCE LINE # 215
	MOV  	A,#010H
	ADD  	A,ControlData+0BH
	MOV  	ControlData+0BH,A
	CLR  	A
	ADDC 	A,ControlData+0AH
	MOV  	ControlData+0AH,A
; 
; 		bEPPflags.bits.control_state = USB_TRANSMIT;
			; SOURCE LINE # 217
	MOV  	R7,bEPPflags
	MOV  	A,R7
	ANL  	A,#03FH
	ORL  	A,#040H
	MOV  	bEPPflags,A
; 	}
			; SOURCE LINE # 218
	RET  	
?C0030:
; 	/* send rest of bytes (number of bytes is less than EP0_PACKET_SIZE bytes) */
; 	else if( i != 0) {
			; SOURCE LINE # 220
	MOV  	A,i?544+01H
	ORL  	A,i?544
	JZ   	?C0032
; 		D12_WriteEndpoint(1, ControlData.pData + ControlData.wCount, i);
			; SOURCE LINE # 221
	MOV  	R3,ControlData+0CH
	MOV  	A,ControlData+0EH
	ADD  	A,ControlData+0BH
	MOV  	R1,A
	MOV  	A,ControlData+0DH
	ADDC 	A,ControlData+0AH
	MOV  	R2,A
	MOV  	?_D12_WriteEndpoint?BYTE+04H,i?544+01H
	MOV  	R7,#01H
	LCALL	_D12_WriteEndpoint
; 		ControlData.wCount += i;
			; SOURCE LINE # 222
	MOV  	A,i?544+01H
	ADD  	A,ControlData+0BH
	MOV  	ControlData+0BH,A
	MOV  	A,i?544
	ADDC 	A,ControlData+0AH
	MOV  	ControlData+0AH,A
; 
; 		bEPPflags.bits.control_state = USB_IDLE;
			; SOURCE LINE # 224
; 	}
			; SOURCE LINE # 225
	SJMP 	?C0038
?C0032:
; 	/* Send zero packet at the end, if no data phase, 
; 	   IO device acknowledging receipt of setup phase (status phanse) */
; 	else if (i == 0){
			; SOURCE LINE # 228
	MOV  	A,i?544+01H
	ORL  	A,i?544
	JNZ  	?C0029
; 		D12_WriteEndpoint(1, 0, 0); 
			; SOURCE LINE # 229
	MOV  	R3,A
	MOV  	R2,A
	MOV  	R1,A
	MOV  	?_D12_WriteEndpoint?BYTE+04H,A
	MOV  	R7,#01H
	LCALL	_D12_WriteEndpoint
; 
; 		bEPPflags.bits.control_state = USB_IDLE;
			; SOURCE LINE # 231
?C0038:
	MOV  	R7,bEPPflags
	MOV  	A,R7
	ANL  	A,#03FH
	MOV  	bEPPflags,A
; 	}
			; SOURCE LINE # 232
; }
			; SOURCE LINE # 233
?C0029:
	RET  	
; END OF ProcessCtrlInEP

	END

⌨️ 快捷键说明

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