?? descript.asm
字號:
; Software License Agreement
;
; The software supplied herewith by Microchip Technology Incorporated (the "Company")
; for its PICmicro(r) Microcontroller is intended and supplied to you, the Company's
; customer, for use solely and exclusively on Microchip PICmicro Microcontroller
; products.
;
; The software is owned by the Company and/or its supplier, and is protected under
; applicable copyright laws. All rights are reserved. Any use in violation of the
; foregoing restrictions may subject the user to criminal sanctions under applicable
; laws, as well as to civil liability for the breach of the terms and conditions of
; this license.
;
; THIS SOFTWARE IS PROVIDED IN AN "AS IS" CONDITION. NO WARRANTIES, WHETHER EXPRESS,
; IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
; MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE
; COMPANY SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR
; CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
;
; ###############################################################################
; filename: DESCRIPT.ASM
;
; This file contains a set of descriptors for a gamepad.
;
; ###############################################################################
;
; Author: Dan Butler and Reston Condit
; Company: Microchip Technology Inc
;
; Revision: 1.21
; Date: 08 August 2001
; Assembled using MPASM 2.61
; Revision History:
; 23 August 2000 DZB Changed descriptor pointers to 16 bits.
; 24 August 2000 DZB Moved EP1 & 2 configuration from USBReset
; to Set_Configuration to implement requirement in
; USB V1.1 spec paragraph 5.3.1.2
; 28 August 2000 DZB Force data toggle on OUT packets in PutUSB
; 20 March 2001 DZB Reduced use of common RAM
; 20 March 2001 DZB Put and Get use their own temp variable (GPtemp) to
; avoid collisions with the ISR's use of temp.
; 29 March 2001 DZB Fixed saving of bank bits in GetUSB
; 02 May 2001 DZB Implemented SHOW_ENUM_STATUS to show enumeration
; status on the PORTB LEDs: 0- Powered, 1- Default,
; 2- addressed, 3- configured, 4- sleep,
; 5- EP0 Activity, 6- EP1 Activity, 7- EP2 Activity
; 03 August 2001 RAC Made distinct GetEP and PutEP macros for endpoints 1
; and 2. These functions are GetEP1, GetEP2, PutEP1, and
; PutEP2. Instances of the these macros are created in
; usb_ch9.asm.
; 08 August 2001 RAC Corrected various banking and paging issues.
; 15 August RAC Added Report_desc_index function in descript.asm.
; This function allows more than one report descriptor
; to be used.
;
;################################################################################
;
; include files:
; P16C765.inc Rev 1.00
; usb_defs.inc Rev 1.00
;
;################################################################################
#include <p16C765.inc>
#include "usb_defs.inc"
USBBANK code
global Config_desc_index
global Report_desc_index
global Descriptions
global string_index
global DeviceDescriptor
global ReportDescriptor
global ReportDescriptorLen
global String0
global String0_end
global StringDescriptions
global HID_Descriptor
extern EP0_start
extern temp ; temp var used in get config index
extern temp2 ; another temp, in bank2
; ******************************************************************
; Given a configuration descriptor index, returns the beginning address
; of the descriptor within the descriptions table
; ******************************************************************
Config_desc_index
movwf temp
movlw HIGH CDI_start
movwf PCLATH
movlw low CDI_start
addwf temp,w
btfsc STATUS,C
incf PCLATH,f
movwf PCL
CDI_start ; this table calculates the offsets for each configuration
retlw low Config1 ; descriptor from the beginning
retlw high Config1 ; of the table, effectively
; more configurations can be added here
; retlw low Config2
; retlw high Config2
; etc....
; ******************************************************************
; Given a report descriptor index, returns the beginning address
; of the descriptor within the descriptions table
; ******************************************************************
Report_desc_index
movwf temp
movlw HIGH RDI_start
movwf PCLATH
movlw low RDI_start
addwf temp,w
btfsc STATUS,C
incf PCLATH,f
movwf PCL
RDI_start ; this table calculates the offsets for each report
retlw low ReportDescriptorLen ; descriptor from the beginning
retlw high ReportDescriptorLen ; of the table, effectively
; more reports can be added here
; retlw low ReportDescriptorLen2
; retlw high ReportDescriptorLen2
; etc....
; ******************************************************************
; This table is polled by the host immediately after USB Reset has been released.
; This table defines the maximum packet size EP0 can take.
; See section 9.6.1 of the Rev 1.0 USB specification.
; These fields are application DEPENDENT. Modify these to meet
; your specifications.
; the offset is passed in P0 and P1 (P0 is low order byte).
; ******************************************************************
Descriptions
banksel EP0_start
movf EP0_start+1,w
movwf PCLATH
movf EP0_start,w
movwf PCL
DeviceDescriptor
StartDevDescr
retlw 0x12 ; bLength Length of this descriptor
retlw 0x01 ; bDescType This is a DEVICE descriptor
retlw 0x00 ; bcdUSB USB revision 1.10 (low byte)
retlw 0x01 ; high byte
retlw 0x00 ; bDeviceClass zero means each interface operates independently
retlw 0x00 ; bDeviceSubClass
retlw 0x00 ; bDeviceProtocol
retlw 0x08 ; bMaxPacketSize0 - inited in UsbInit()
retlw 0xD8 ; idVendor 0x04D8 is Microchip Vendor ID
retlw 0x04 ; high order byte
retlw 0x03 ; idProduct
retlw 0x00
retlw 0x00 ; bcdDevice
retlw 0x00
retlw 0x01 ; iManufacturer
retlw 0x02 ; iProduct
; somehow, changing iSerialNumber will cause windows to display
; "New Hardware found" dialog. The device will function normally,
; however, USBCheck will NOT start. From CATC we can see that
; the string is correctly transmitted.
retlw 0;0x0 ; iSerialNumber - 3
retlw NUM_CONFIGURATIONS ; bNumConfigurations
; ******************************************************************
; This table is retrieved by the host after the address has been set.
; This table defines the configurations available for the device.
; See section 9.6.2 of the Rev 1.0 USB specification (page 184).
; These fields are application DEPENDENT.
; Modify these to meet your specifications.
; ******************************************************************
Config1
retlw 0x09 ; bLength Length of this descriptor
retlw 0x02 ; bDescType 2=CONFIGURATION
retlw EndConfig1 - Config1
retlw 0x00
retlw 0x01 ; bNumInterfaces Number of interfaces
retlw 0x01 ; bConfigValue Configuration Value
retlw 0x04 ; iConfig String Index for this config = #01
retlw 0x80 ; bmAttributes attributes - bus powered
retlw 0x32 ; MaxPower self-powered draws 0 mA from the bus.
Interface1
retlw 0x09 ; length of descriptor
retlw INTERFACE;
retlw 0x00 ; number of interface, 0 based array
retlw 0x00 ; alternate setting
retlw 0x01 ; number of endpoints used in this interface
retlw 0x03 ; interface class - assigned by the USB
retlw 0x00 ; boot device
retlw 0x00 ; interface protocol
retlw 0x05 ; index to string descriptor that describes this interface
HID_Descriptor
retlw 0x09 ; descriptor size (9 bytes)
retlw 0x21 ; descriptor type (HID)
retlw 0x00
retlw 0x01 ; HID class release number (1.00)
retlw 0x00 ; Localized country code (none)
retlw 0x01 ; # of HID class descriptor to follow (1)
retlw 0x22 ; Report descriptor type (HID)
retlw (end_ReportDescriptor - ReportDescriptor)
retlw 0x00
Endpoint1
retlw 0x07 ; length of descriptor
retlw ENDPOINT
retlw 0x81 ; EP1, In
retlw 0x03 ; Interrupt
retlw 0x03 ; max packet size (3 bytes) low order byte
retlw 0x00 ; max packet size (3 bytes) high order byte
retlw 0x0A ; polling interval (10ms)
EndConfig1
ReportDescriptorLen
retlw low (end_ReportDescriptor-ReportDescriptor)
ReportDescriptor
retlw 0x05
retlw 0x01 ; USAGE_PAGE (Generic Desktop)
retlw 0x09
retlw 0x05 ; USAGE (Game Pad)
retlw 0xa1
retlw 0x01 ; COLLECTION (Application)
retlw 0x09
retlw 0x01 ; USAGE (Pointer)
retlw 0xa1
retlw 0x00 ; COLLECTION (Physical)
retlw 0x09
retlw 0x30 ; USAGE (X)
retlw 0x09
retlw 0x31 ; USAGE (Y)
retlw 0x15
retlw 0x00 ; LOGICAL_MINIMUM (0)
retlw 0x26
retlw 0xFF ; LOGICAL_MAXIMUM (255)
retlw 0x00
retlw 0x75
retlw 0x08 ; REPORT_SIZE (8)
retlw 0x95
retlw 0x02 ; REPORT_COUNT (2)
retlw 0x81
retlw 0x02 ; INPUT (Data,Var,Abs)
retlw 0xc0 ; END_COLLECTION
retlw 0x05
retlw 0x09 ; USAGE_PAGE (Button)
retlw 0x19
retlw 0x01 ; USAGE_MINIMUM (Button 1)
retlw 0x29
retlw 0x06 ; USAGE_MAXIMUM (Button 6)
retlw 0x15
retlw 0x00 ; LOGICAL_MINIMUM (0)
retlw 0x25
retlw 0x01 ; LOGICAL_MAXIMUM (1)
retlw 0x75
retlw 0x01 ; REPORT_SIZE (1)
retlw 0x95
retlw 0x06 ; REPORT_COUNT (6)
retlw 0x81
retlw 0x02 ; INPUT (Data,Var,Abs)
retlw 0x95
retlw 0x02 ; REPORT_COUNT (2)
retlw 0x81
retlw 0x03 ; INPUT (Constant,Var,Abs)
retlw 0xc0 ; END_COLLECTION
end_ReportDescriptor
StringDescriptions
banksel EP0_start
movf EP0_start+1,w
movwf PCLATH
movf EP0_start,w
movwf PCL
; ******************************************************************
; Given a configuration descriptor index, returns the beginning address
; of the descriptor within the descriptions table
; ******************************************************************
string_index ; langid in W reg, string offset in EP0_start
movwf temp
bcf STATUS,C
rlf temp, f
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -