📄 usbproto.src
字号:
;
; 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 + -