A SERVICE OF

logo

Cypress CY3640 USB Starter Kit
User’s Guide
Cypress Semiconductor Ver 0.993
Page 29
mov a,20h ;[USBStringDescription4]
mov [gbUSBSendBytes],a
; Check request size field
call USBSendDescriptorCheckLength
; Send buffer
call USBSendROMBuffer
jmp USBEventEP0End
USBEventEP0SetupGetDescriptorString5:
cmp a,5
jnz USBEventEP0SetupGetDescriptorEnd ; No
;*********************************************
; Get String 5 Descriptor Event
;*********************************************
; Descriptor pointer
mov a,(USBStringDescription5 -USBSendROMBufferBase)
mov [gbUSBSendBuffer],a
; Descriptor size
mov a,3Ch ;[USBStringDescription5]
mov [gbUSBSendBytes],a
; Check request size field
call USBSendDescriptorCheckLength
; Send buffer
call USBSendROMBuffer
jmp USBEventEP0End
USBEventEP0SetupGetDescriptorEnd:
; Unsupported Get request !!!
jmp USBEventEP0Stall
;//$PAGE
;********************************************************
; USBSendDescriptorCheckLength()
; @func Check and update send length for Get Descriptor
; requests on end point 0.
; @parm BYTE | gbUSBSendBytes | Number of bytes to send.
;********************************************************
USBSendDescriptorCheckLength:
; High byte set? (Assume <255 bytes)
mov a,[USBEndP0FIFO_7]
cmp a,0
jnz USBSendDescriptorCheckLengthEnd ; Yes
; Check size
mov a,[USBEndP0FIFO_6]
cmp a,[gbUSBSendBytes]
jz USBSendDescriptorCheckLengthEnd ; equal
jnc USBSendDescriptorCheckLengthEnd ; greater than
; New size
mov [gbUSBSendBytes],a
USBSendDescriptorCheckLengthEnd:
ret
;//$PAGE
;********************************************************
; USBSendROMBuffer()
; @func Send a number of ROM bytes on end point 0.
; @parm BYTE | gbUSBSendBytes | Number of bytes to send.
; @parm BYTE | gbUSBSendBuffer | Offset from ROM base
; of data to send.
; @comm assumes IN packets are ignored in the interrupt routine
; @devnote Enables interrupts