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

📄 usbproto.src

📁 Comlete files for fullfile the slave USB function!
💻 SRC
📖 第 1 页 / 共 3 页
字号:
; 
; code USB_ENDPOINT_DESCRIPTOR EP1_TXDescr =
; {
;     sizeof(USB_ENDPOINT_DESCRIPTOR), //BYTE bLength
;     0x05, //BYTE bDescriptorType, assigned by USB
;     0x81, //BYTE bEndpointAddress, IN endpoint, endpoint 1
;     USB_ENDPOINT_TYPE_INTERRUPT, //BYTE bmAttributes, Interrupt endpoint
;     SWAP(EP1_PACKET_SIZE), //WORD wMaxPacketSize
;     100 //Polling Time, poll over 100 ms
; };
; */
; 
; struct CONFIG code sConfiguration= {
; 	sizeof(USB_CONFIGURATION_DESCRIPTOR), //BYTE bLength
;     	USB_CONFIGURATION_DESCRIPTOR_TYPE, //BYTE bDescriptorType //Assigned by USB
;     	SWAP(CONFIG_DESCRIPTOR_LENGTH), //WORD wTotalLength
;     	0x01, //BYTE bNumInterfaces
;     	0x01, //BYTE bConfigurationValue
;     	0x03, //BYTE iConfiguration
;     	0x80, //BYTE bmAttributes, Bus powered
;     	50, //BYTE MaxPower, 50x2=100mA
; 
; 	sizeof(USB_INTERFACE_DESCRIPTOR),//BYTE bLength
; 		USB_INTERFACE_DESCRIPTOR_TYPE,//BYTE bDescriptionType, assigned by USB
; 		0x00, //BYTE bInterfaceNumber
; 		0x00, //BYTE bAlternateSetting, no alternate setting
; 		0x01, //BYTE bNumEndpoints, HID uses endpoint 1
; 	    0x03, //BYTE bInterfaceClass, HID Class - 0x03
; 	    0x00, //BYTE bInterfaceSubClass
; 	    0x00, //BYTE bInterfaceProtocol
; 	    0x04,  //BYTE iInterface, interface name
; 
; 	sizeof(USB_HID_DESCRIPTOR), //BYTE bLength;
; 		0x21, //BYTE bDescriptorType;
; 		0x0001, //WORD bcdHID;
; 		0x00, //BYTE bCountryCode, country localization = None;
; 		0x01, //BYTE bNumDescriptors, number of descriptor follow
; 		0x22, //BYTE bReportDescriptorType And it's a Report descriptor
; 		SWAP(REPORT_DESC_LENGTH), //WORD wItemLength, total length of report descriptor
; 
; 	sizeof(USB_ENDPOINT_DESCRIPTOR), //BYTE bLength
; 		0x05, //BYTE bDescriptorType, assigned by USB
; 		0x81, //BYTE bEndpointAddress, 0x80=IN endpoint, endpoint 1
; 		USB_ENDPOINT_TYPE_INTERRUPT, //BYTE bmAttributes, Interrupt
; 		SWAP(EP1_PACKET_SIZE), //WORD wMaxPacketSize
; 	    100 //Polling Time unit ms, poll over 100 ms
;  };
; 
; 
; code USB_ENDPOINT_DESCRIPTOR EP1_RXDescr =
; {
; 	sizeof(USB_ENDPOINT_DESCRIPTOR),
; 	USB_ENDPOINT_DESCRIPTOR_TYPE,
; 	0x1,
; 	USB_ENDPOINT_TYPE_INTERRUPT,
; 	SWAP(EP1_PACKET_SIZE),
; 	10
; };
; 
; code USB_ENDPOINT_DESCRIPTOR EP2_TXDescr =
; {
; 	sizeof(USB_ENDPOINT_DESCRIPTOR),
; 	USB_ENDPOINT_DESCRIPTOR_TYPE,
; 	0x82,
; 	USB_ENDPOINT_TYPE_BULK,
; 	SWAP(EP2_PACKET_SIZE),
; 	10
; };
; 
; code USB_ENDPOINT_DESCRIPTOR EP2_RXDescr =
; {
; 	sizeof(USB_ENDPOINT_DESCRIPTOR),
; 	USB_ENDPOINT_DESCRIPTOR_TYPE,
; 	0x2,
; 	USB_ENDPOINT_TYPE_BULK,
; 	SWAP(EP2_PACKET_SIZE),
; 	10
; };
; 
; 
; unsigned char code LANG_ID[4] = {
; 	0x04,  //4 bytes
; 	0x03,  //bDescriptorType = String Desc
; 	0x09,  //Lang ID for English = 0x0409
; 	0x04
; };
; 
; code csSTRING1[] = { //STRING1 Manumfacturer
; 'M',0,'y',0,'U',0,'S',0,'B',0};
; code csSTRING2[] = { //STRING2 Product Name
; 'D',0,'e',0,'c',0,'o',0,'d',0,'e',0,'r',0};
; code csSTRING3[] = { //STRING3 Configuration Name
; 'S',0,'i',0,'m',0,'p',0,'l',0,'e',0,'D',0,'e',0,'v',0,'c',0,'e',0};
; code csSTRING4[] = { //STRING4 Interface Name
; 'H',0,'I',0,'D',0,'e',0,'x',0,'a',0,'m',0,'p',0,'l',0,'e',0};
; 
; 
; struct STRING1 { 
;     UCHAR bLength;
; 	UCHAR bDescriptorType;
; 	char string1[sizeof(csSTRING1)];
; };
; struct STRING1 code sSTRING1 = {
; 	sizeof(csSTRING1)+2, //Size of String
; 	0x03, //STRING Descriptor Type
; 	csSTRING1};
; struct STRING2 { 
;     UCHAR bLength;
; 	UCHAR bDescriptorType;
; 	char string1[sizeof(csSTRING2)];
; };
; struct STRING2 code sSTRING2 = {
; 	sizeof(csSTRING2)+2, //Size of String
; 	0x03, //STRING Descriptor Type
; 	csSTRING2};
; struct STRING3 { 
;     UCHAR bLength;
; 	UCHAR bDescriptorType;
; 	char string1[sizeof(csSTRING3)];
; };
; struct STRING3 code sSTRING3 = {
; 	sizeof(csSTRING3)+2, //Size of String
; 	0x03, //STRING Descriptor Type
; 	csSTRING3};
; struct STRING4 { 
;     UCHAR bLength;
; 	UCHAR bDescriptorType;
; 	char string1[sizeof(csSTRING4)];
; };
; struct STRING4 code sSTRING4 = {
; 	sizeof(csSTRING4)+2, //Size of String
; 	0x03, //STRING Descriptor Type
; 	csSTRING4};
; 
; 
; //*************************************************************************
; // USB Protocol Layer
; //*************************************************************************
; 
; void reserved(void)

	RSEG  ?PR?reserved?USBPROTO
reserved:
	USING	0
			; SOURCE LINE # 264
; {
			; SOURCE LINE # 265
; 	stall_ep0();
			; SOURCE LINE # 266
	LJMP 	stall_ep0
; END OF reserved

; }
; 
; //*************************************************************************
; // USB standard device requests
; //*************************************************************************
; void get_status(void)

	RSEG  ?PR?get_status?USBPROTO
get_status:
	USING	0
			; SOURCE LINE # 272
; {
			; SOURCE LINE # 273
; 	unsigned char endp, txdat[2];
; 	unsigned char bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
			; SOURCE LINE # 275
	MOV  	A,ControlData
	ANL  	A,#01FH
	MOV  	bRecipient?142,A
; 	unsigned char c;
; 
; 	if (bRecipient == USB_RECIPIENT_DEVICE) {
			; SOURCE LINE # 278
	JNZ  	?C0002
; 		if(bEPPflags.bits.remote_wakeup == 1)
			; SOURCE LINE # 279
	MOV  	R7,bEPPflags
	MOV  	A,R7
	SWAP 	A
	ANL  	A,#0FH
	JNB  	ACC.0,?C0003
; 			txdat[0] = 3;
			; SOURCE LINE # 280
	MOV  	txdat?141,#03H
	SJMP 	?C0074
?C0003:
; 		else
; 			txdat[0] = 1;
			; SOURCE LINE # 282
	MOV  	txdat?141,#01H
?C0004:
; 		txdat[1]=0;
			; SOURCE LINE # 283
; 		single_transmit(txdat, 2);
			; SOURCE LINE # 284
; 	} else if (bRecipient == USB_RECIPIENT_INTERFACE) {
			; SOURCE LINE # 285
	SJMP 	?C0074
?C0002:
	MOV  	A,bRecipient?142
	CJNE 	A,#01H,?C0006
; 		txdat[0]=0;
			; SOURCE LINE # 286
	CLR  	A
	MOV  	txdat?141,A
; 		txdat[1]=0;
			; SOURCE LINE # 287
; 		single_transmit(txdat, 2);
			; SOURCE LINE # 288
; 	} else if (bRecipient == USB_RECIPIENT_ENDPOINT) {
			; SOURCE LINE # 289
	SJMP 	?C0075
?C0006:
	MOV  	A,bRecipient?142
	XRL  	A,#02H
	JNZ  	?C0008
; 		endp = (unsigned char)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
			; SOURCE LINE # 290
	MOV  	A,ControlData+05H
	ANL  	A,#03H
	MOV  	endp?140,A
; 		if (ControlData.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
			; SOURCE LINE # 291
	MOV  	A,ControlData+05H
	JNB  	ACC.7,?C0009
; 			c = D12_SelectEndpoint(endp*2 + 1);	/* Control-in */
			; SOURCE LINE # 292
	MOV  	A,endp?140
	ADD  	A,ACC
	INC  	A
	SJMP 	?C0073
?C0009:
; 		else
; 			c = D12_SelectEndpoint(endp*2);	/* Control-out */
			; SOURCE LINE # 294
	MOV  	A,endp?140
	ADD  	A,ACC
?C0073:
	MOV  	R7,A
	LCALL	_D12_SelectEndpoint
	MOV  	c?143,R7
?C0010:
; 		if(c & D12_STALL)
			; SOURCE LINE # 295
	MOV  	A,c?143
	JNB  	ACC.1,?C0011
; 			txdat[0] = 1;
			; SOURCE LINE # 296
	MOV  	txdat?141,#01H
	SJMP 	?C0012
?C0011:
; 		else
; 			txdat[0] = 0;
			; SOURCE LINE # 298
	CLR  	A
	MOV  	txdat?141,A
?C0012:
; 		txdat[1] = 0;
			; SOURCE LINE # 299
?C0074:
	CLR  	A
?C0075:
	MOV  	txdat?141+01H,A
; 		single_transmit(txdat, 2);
			; SOURCE LINE # 300
	MOV  	R3,A
	MOV  	R2,#HIGH (txdat?141)
	MOV  	R1,#LOW (txdat?141)
	MOV  	R5,#02H
	LJMP 	_single_transmit
; 	} else
			; SOURCE LINE # 301
?C0008:
; 		stall_ep0();
			; SOURCE LINE # 302
	LCALL	stall_ep0
; }
			; SOURCE LINE # 303
?C0014:
	RET  	
; END OF get_status

; 
; void clear_feature(void)

	RSEG  ?PR?clear_feature?USBPROTO
clear_feature:
	USING	0
			; SOURCE LINE # 305
; {
			; SOURCE LINE # 306
; 	unsigned char endp;
; 	unsigned char bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
			; SOURCE LINE # 308
	MOV  	A,ControlData
	ANL  	A,#01FH
	MOV  	bRecipient?245,A
; 
; 	if (bRecipient == USB_RECIPIENT_DEVICE
			; SOURCE LINE # 310
	JNZ  	?C0015
	MOV  	A,ControlData+03H
	XRL  	A,#01H
	ORL  	A,ControlData+02H
	JNZ  	?C0015
; 		&& ControlData.DeviceRequest.wValue == USB_FEATURE_REMOTE_WAKEUP) {
			; SOURCE LINE # 311
; 		DISABLE;
			; SOURCE LINE # 312
	CLR  	EA
; 		bEPPflags.bits.remote_wakeup = 0;
			; SOURCE LINE # 313
	MOV  	R7,bEPPflags
	MOV  	A,R7
	ANL  	A,#0EFH
	MOV  	bEPPflags,A
; 		ENABLE;
			; SOURCE LINE # 314
	SETB 	EA
; 		single_transmit(0, 0);
			; SOURCE LINE # 315
; 	}
			; SOURCE LINE # 316
	SJMP 	?C0077
?C0015:
; 	else if (bRecipient == USB_RECIPIENT_ENDPOINT
			; SOURCE LINE # 317
	MOV  	A,bRecipient?245
	XRL  	A,#02H
	JNZ  	?C0017
	MOV  	A,ControlData+03H
	ORL  	A,ControlData+02H
	JNZ  	?C0017
; 		&& ControlData.DeviceRequest.wValue == USB_FEATURE_ENDPOINT_STALL) {
			; SOURCE LINE # 318
; 		endp = (unsigned char)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
			; SOURCE LINE # 319
	MOV  	A,ControlData+05H
	ANL  	A,#03H
	MOV  	endp?244,A
; 		if (ControlData.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
			; SOURCE LINE # 320
	MOV  	A,ControlData+05H
	JNB  	ACC.7,?C0018
; 			/* clear TX stall for IN on EPn. */
; 			D12_SetEndpointStatus(endp*2 + 1, 0);
			; SOURCE LINE # 322
	MOV  	A,endp?244
	ADD  	A,ACC
	INC  	A
	SJMP 	?C0076
?C0018:
; 		else
; 			/* clear RX stall for OUT on EPn. */
; 			D12_SetEndpointStatus(endp*2, 0);
			; SOURCE LINE # 325
	MOV  	A,endp?244
	ADD  	A,ACC
?C0076:
	MOV  	R7,A
	CLR  	A
	MOV  	R5,A
	LCALL	_D12_SetEndpointStatus
?C0019:
; 		single_transmit(0, 0);
			; SOURCE LINE # 326
?C0077:
	MOV  	R3,#00H
	MOV  	R2,#00H
	MOV  	R1,#00H
	CLR  	A
	MOV  	R5,A
	LJMP 	_single_transmit
; 	} else
			; SOURCE LINE # 327
?C0017:
; 		stall_ep0();
			; SOURCE LINE # 328
	LCALL	stall_ep0
; }
			; SOURCE LINE # 329
?C0021:
	RET  	
; END OF clear_feature

; 
; void set_feature(void)

	RSEG  ?PR?set_feature?USBPROTO
set_feature:
	USING	0
			; SOURCE LINE # 331
; {
			; SOURCE LINE # 332
; 	unsigned char endp;
; 	unsigned char bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
			; SOURCE LINE # 334
	MOV  	A,ControlData
	ANL  	A,#01FH
	MOV  	bRecipient?347,A
; 
; 	if (bRecipient == USB_RECIPIENT_DEVICE
			; SOURCE LINE # 336
	JNZ  	?C0022
	MOV  	A,ControlData+03H
	XRL  	A,#01H
	ORL  	A,ControlData+02H
	JNZ  	?C0022
; 		&& ControlData.DeviceRequest.wValue == USB_FEATURE_REMOTE_WAKEUP) {
			; SOURCE LINE # 337
; 		DISABLE;
			; SOURCE LINE # 338
	CLR  	EA
; 		bEPPflags.bits.remote_wakeup = 1;
			; SOURCE LINE # 339
	MOV  	R7,bEPPflags
	MOV  	A,R7
	ORL  	A,#010H
	MOV  	bEPPflags,A
; 		ENABLE;
			; SOURCE LINE # 340
	SETB 	EA
; 		single_transmit(0, 0);
			; SOURCE LINE # 341
; 	}
			; SOURCE LINE # 342
	SJMP 	?C0079
?C0022:
; 	else if (bRecipient == USB_RECIPIENT_ENDPOINT
			; SOURCE LINE # 343
	MOV  	A,bRecipient?347
	XRL  	A,#02H
	JNZ  	?C0024
	MOV  	A,ControlData+03H
	ORL  	A,ControlData+02H
	JNZ  	?C0024
; 		&& ControlData.DeviceRequest.wValue == USB_FEATURE_ENDPOINT_STALL) {
			; SOURCE LINE # 344
; 		endp = (unsigned char)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
			; SOURCE LINE # 345
	MOV  	A,ControlData+05H
	ANL  	A,#03H
	MOV  	endp?346,A
; 		if (ControlData.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
			; SOURCE LINE # 346
	MOV  	A,ControlData+05H
	JNB  	ACC.7,?C0025
; 			/* clear TX stall for IN on EPn. */
; 			D12_SetEndpointStatus(endp*2 + 1, 1);
			; SOURCE LINE # 348
	MOV  	A,endp?346
	ADD  	A,ACC
	INC  	A
	SJMP 	?C0078
?C0025:
; 		else
; 			/* clear RX stall for OUT on EPn. */
; 			D12_SetEndpointStatus(endp*2, 1);
			; SOURCE LINE # 351
	MOV  	A,endp?346
	ADD  	A,ACC
?C0078:
	MOV  	R7,A
	MOV  	R5,#01H
	LCALL	_D12_SetEndpointStatus
?C0026:
; 		single_transmit(0, 0);
			; SOURCE LINE # 352
?C0079:
	MOV  	R3,#00H
	MOV  	R2,#00H
	MOV  	R1,#00H
	CLR  	A
	MOV  	R5,A
	LJMP 	_single_transmit
; 	} else
			; SOURCE LINE # 353
?C0024:
; 		stall_ep0();
			; SOURCE LINE # 354
	LCALL	stall_ep0
; }
			; SOURCE LINE # 355
?C0028:
	RET  	
; END OF set_feature

; 
; void set_address(void)

	RSEG  ?PR?set_address?USBPROTO
set_address:
	USING	0
			; SOURCE LINE # 357
; {
			; SOURCE LINE # 358
; 	D12_SetAddressEnable((unsigned char)(ControlData.DeviceRequest.wValue &
			; SOURCE LINE # 359
	MOV  	A,ControlData+03H
	ANL  	A,#07FH
	MOV  	R7,A
	MOV  	R5,#01H
	LCALL	_D12_SetAddressEnable
; 		DEVICE_ADDRESS_MASK), 1);
; 	single_transmit(0, 0);
			; SOURCE LINE # 361
	MOV  	R3,#00H
	MOV  	R2,#00H
	MOV  	R1,#00H
	CLR  	A
	MOV  	R5,A
	LJMP 	_single_transmit
; END OF set_address

; }
; 
; extern void blinkLED(unsigned char num);
; 
; void get_descriptor(void)

	RSEG  ?PR?get_descriptor?USBPROTO
get_descriptor:
	USING	0
			; SOURCE LINE # 366
; {
			; SOURCE LINE # 367
; 	unsigned char strIndex;
; 	unsigned char bDescriptor = MSB(ControlData.DeviceRequest.wValue);
			; SOURCE LINE # 369
	MOV  	A,ControlData+02H
	MOV  	bDescriptor?549,A
; 
; 	if (bDescriptor == USB_DEVICE_DESCRIPTOR_TYPE) {
			; SOURCE LINE # 371
	MOV  	A,bDescriptor?549
	CJNE 	A,#01H,?C0030

⌨️ 快捷键说明

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