亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? usb_drv.asm

?? 基于Cypress CY3655開發工具的USB鼠標程序
?? ASM
?? 第 1 頁 / 共 3 頁
字號:

    TD_INDEX_TO_OFFSET USB_t2 ; Convert the index

    SWAP    A, X
    ADD     A, [USB_t2]
    SWAP    A, X
    ADC     A, 0                       ; A:X now points to the descriptor table entry we want

; Flow here to load the Transfer Descriptor (TD_ENTRY)
    MOV     [USB_t2], USB_CurrentTD    ; Use Temp as MVI pointer
    CALL     USB_GETBYTE               ; Get the descriptor data source
    CALL     USB_GETWORD               ; Get the descriptor size
    CALL     USB_GETWORD               ; Get the descriptor address
    CALL     USB_GETWORD               ; Get the Status Pointer
; Dispatch to InitControlRead or InitControlWrite based on d2h/h2d in the request
    MOV    A, REG[USB_EP0DATA+bmRequestType]; Get bmRequestType
    AND     A,0x80                          ; Control Read or Write
    JZ      .control_write

    JMP     USB_InitControlRead

.control_write:
    JMP     USB_InitControlWrite

;-----------------------------------------------------------------------------
;  FUNCTION NAME: USB_LOOKUP
;
;  DESCRIPTION:    Returns the address of an entry in a lookup table (LT_ENTRY)
;
;-----------------------------------------------------------------------------
;
;  ARGUMENTS:    A:X Point to the lookup table
;                USB_t2 contain the table index
;
;  RETURNS:      Address of the LT_ENTRY in A:X
;
;  SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
;
;  THEORY of OPERATION or PROCEDURE:
;
;-----------------------------------------------------------------------------
EXPORT USB_LOOKUP
USB_LOOKUP:
    INC     X                          ; Point to the first table entry
    ADC     A, 0                       ;

    LT_INDEX_TO_OFFSET USB_t2          ; Convert the index
    SWAP    A, X
    ADD     A, [USB_t2]                ;
    SWAP    A, X
    ADC     A, 0
    RET
;-----------------------------------------------------------------------------
;  FUNCTION NAME: USB_GETWORD/USB_GETBYTE
;
;  DESCRIPTION:    Get a word value from ROM
;
;-----------------------------------------------------------------------------
;
;  ARGUMENTS:    A:X is the ROM Address
;                USB_t2 is the destination address
;
;  RETURNS:      USB_t1
;
;  SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
;                USES USB_t2
;                A:X points to the subsequent locaction ROM location
;  THEORY of OPERATION or PROCEDURE:
;
;-----------------------------------------------------------------------------
EXPORT USB_GETWORD
USB_GETWORD:

    PUSH    A                          ; Don't loose the pointer MSB
    ROMX                               ; Data source flag
    MVI     [USB_t2], A                ; Save the data source
    POP     A                          ; Get the MSB back
    INC     X                          ; Point to the next  entry
    ADC     A, 0                       ;

EXPORT USB_GETBYTE
USB_GETBYTE:

    PUSH    A                          ; Don't loose the pointer MSB
    ROMX                               ; Data source flag
    MVI     [USB_t2], A                ; Save the data source
    POP     A                          ; Get the MSB back
    INC     X                          ; Point to the next  entry
    ADC     A, 0                       ;
    RET
;-----------------------------------------------------------------------------
;  FUNCTION NAME: USB_GET_DEVICE_TABLE_ENTRY
;
;  DESCRIPTION:    Get the address of the current DEVICE_TABLE entry
;                  Not intended for use by C fucntions
;
;-----------------------------------------------------------------------------
;
;  ARGUMENTS:
;
;  RETURNS:        A:X points the the current DEVICE_TABLE entry
;                  Carry flag is set if the current device index is out of range
;
;  SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
;
;  THEORY of OPERATION or PROCEDURE:
;
;-----------------------------------------------------------------------------
EXPORT USB_GET_DEVICE_TABLE_ENTRY
USB_GET_DEVICE_TABLE_ENTRY:
    MOV     [USB_t2], [USB_bCurrentDevice]  ; Use the UM temp var--Selector

    MOV     A,>USB_DEVICE_LOOKUP       ; Get the ROM Address MSB
    MOV     X,<USB_DEVICE_LOOKUP       ; Get the ROM Address LSB
    ROMX                               ; First entry is the table size (only a byte)
    CMP     A, [USB_t2]                ; Range check
    MOV     A,>USB_DEVICE_LOOKUP       ; Get the ROM Address MSB
    JC      .exit
; Flow here if the index is valid
    CALL    USB_LOOKUP                 ; Look up the configuration
; Jump or flow here on exit
.exit:
    RET
;-----------------------------------------------------------------------------
;  FUNCTION NAME: USB_GET_CONFIG_TABLE_ENTRY
;
;  DESCRIPTION:    Get the address of the current DEVICE_TABLE entry
;                  Not intended for use by C fucntions
;                  Does not do range checking on
;
;-----------------------------------------------------------------------------
;
;  ARGUMENTS:
;
;  RETURNS:        A:X points the the current CONFIG_TABLE entry
;                  Carry flag is set if the current device index is out of range
;
;  SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
;
;  THEORY of OPERATION or PROCEDURE:
;
;-----------------------------------------------------------------------------
EXPORT USB_GET_CONFIG_TABLE_ENTRY
USB_GET_CONFIG_TABLE_ENTRY:
    CALL    USB_GET_DEVICE_TABLE_ENTRY ; Get the selected device
    MOV     [USB_t2],USB_t1            ; Set the GETWORD destination
    CALL    USB_GETWORD                ; Get the pointer to the CONFIG_LOOKUP table
                                       ; ITempW has the address
    MOV     A, REG[USB_EP0DATA+wValueLo]  ; Get the configuration number
    MOV     [USB_t2],A                 ; Save it
    MOV     A, [USB_t1]                ; Get the CONFIG_LOOKUP ROM Address MSB
    MOV     X, [USB_t1+1]              ; Get the CONFIG_LOOKUP ROM Address LSB

; A:X Points to the CONFIG_LOOKUP, so get the current entry
    MOV     [USB_t2], [USB_Configuration] ; Get the configuration number
    DEC     [USB_t2]                   ; We don't populate the 0th entry
    CALL    USB_LOOKUP                 ; Look up the configuration
    RET
;-----------------------------------------------------------------------------
;  FUNCTION NAME: USB_UpdateStatusBlock
;
;  DESCRIPTION:    Update the Completion Status Block for a Request.  The
;                  block is updated with the completion code from the
;                  argument (A) and the _TransferByteCount.
;
;                  The StatusBlock Pointer (_StatusBlockPtr) is set to NULL (0)
;                  to make sure no other updates are made to the StatusBlock by
;                  the USB User Module.
;
;-----------------------------------------------------------------------------
;
;  ARGUMENTS:      A contains the Completion Status Code
;
;  RETURNS:        None
;
;  SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
;
;  THEORY of OPERATION or PROCEDURE:
;
;-----------------------------------------------------------------------------
USB_UpdateStatusBlock:
    MOV     X, [USB_StatusBlockPtr + 1];
    SWAP    A, X                       ; Don't loose the completion code
    CMP     A, 0                       ; NULL?
    JZ      .done                      ; No update on NULL
; Flow here to update the VSR Completion Status Block
    SWAP    A, X                       ; Completion code A, Pointer in X
    MOV     [X + 0], A                 ; Update the completion Code
    MOV     A, [USB_TransferByteCount] ; Actual Byte Count MSB
    MOV     [X + 1], A
    MOV     A, [USB_TransferByteCount + 1] ; Actual Byte Count LSB
    MOV     [X + 2], A
    MOV     [USB_StatusBlockPtr + 1], 0; Clear the Block Pointer
.done:
    RET                                ; All done
;-----------------------------------------------------------------------------
;  FUNCTION NAME: USB_InitializeStatusBlock
;
;  DESCRIPTION:    Initialize the Completion Status Block for a Request.
;                  The completion code is set to USB_XFER_IDLE.
;
;-----------------------------------------------------------------------------
;
;  ARGUMENTS:      None
;
;  RETURNS:        None
;
;  SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
;
;  THEORY of OPERATION or PROCEDURE:
;
;-----------------------------------------------------------------------------
USB_InitializeStatusBlock:
    MOV     A, [USB_StatusBlockPtr + 1];
    CMP     A, 0                       ; NULL?
    JZ      .done                      ; No update on NULL
; Flow here to initialize the Completion Status Block
    SWAP    A, X                       ; Pointer in X
    MOV     [X + 0], USB_XFER_IDLE     ; Initialize the completion code (0)
    MOV     [USB_TransferByteCount], 0 ; Clear the byte count
    MOV     [USB_TransferByteCount + 1], 0 ;
.done:
    RET                                ; All done
;-----------------------------------------------------------------------------
;  FUNCTION NAME: ;  USB 1st Tier Dispactch Jump Table (based on bmRequestType)
;
;  DESCRIPTION:
;
;-----------------------------------------------------------------------------
;
;  ARGUMENTS:
;
;  RETURNS:
;
;  SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
;
;  THEORY of OPERATION or PROCEDURE:
;
;-----------------------------------------------------------------------------
MACRO BMREQUEST_DISPATCH
IF (USB_CB_@0_@1_@2 & 1)
    jmp     USB_DT_@0_@1_@2_Dispatch
ELSE
    jmp     USB_Not_Supported_Local_Drv
ENDIF
ENDM
USB_DT_bmRequestType::
    BMREQUEST_DISPATCH    h2d,std,dev
    BMREQUEST_DISPATCH    h2d,std,ifc
    BMREQUEST_DISPATCH    h2d,std,ep
    BMREQUEST_DISPATCH    h2d,std,oth
    BMREQUEST_DISPATCH    h2d,cls,dev
    BMREQUEST_DISPATCH    h2d,cls,ifc
    BMREQUEST_DISPATCH    h2d,cls,ep
    BMREQUEST_DISPATCH    h2d,cls,oth
    BMREQUEST_DISPATCH    h2d,vnd,dev
    BMREQUEST_DISPATCH    h2d,vnd,ifc
    BMREQUEST_DISPATCH    h2d,vnd,ep
    BMREQUEST_DISPATCH    h2d,vnd,oth
    BMREQUEST_DISPATCH    h2d,rsv,dev
    BMREQUEST_DISPATCH    h2d,rsv,ifc
    BMREQUEST_DISPATCH    h2d,rsv,ep
    BMREQUEST_DISPATCH    h2d,rsv,oth
    BMREQUEST_DISPATCH    d2h,std,dev
    BMREQUEST_DISPATCH    d2h,std,ifc
    BMREQUEST_DISPATCH    d2h,std,ep
    BMREQUEST_DISPATCH    d2h,std,oth
    BMREQUEST_DISPATCH    d2h,cls,dev
    BMREQUEST_DISPATCH    d2h,cls,ifc
    BMREQUEST_DISPATCH    d2h,cls,ep
    BMREQUEST_DISPATCH    d2h,cls,oth
    BMREQUEST_DISPATCH    d2h,vnd,dev
    BMREQUEST_DISPATCH    d2h,vnd,ifc
    BMREQUEST_DISPATCH    d2h,vnd,ep
    BMREQUEST_DISPATCH    d2h,vnd,oth
    BMREQUEST_DISPATCH    d2h,rsv,dev
    BMREQUEST_DISPATCH    d2h,rsv,ifc
    BMREQUEST_DISPATCH    d2h,rsv,ep
    BMREQUEST_DISPATCH    d2h,rsv,oth
USB_DT_End:
USB_DT_Size: equ (USB_DT_End-USB_DT_bmRequestType) / 2
USB_bmRequestType_Dispatch::
    DISPATCHER USB_DT_bmRequestType, USB_DT_Size, USB_Not_Supported_Local_Drv

USB_Not_Supported_Local_Drv:
        LJMP     USB_Not_Supported


;-----------------------------------------------
; Add custom application code for routines
;-----------------------------------------------

   ;@PSoC_UserCode_BODY_1@ (Do not change this line.)
   ;---------------------------------------------------
   ; Insert your custom code below this banner
   ;---------------------------------------------------

   ;---------------------------------------------------
   ; Insert your custom code above this banner
   ;---------------------------------------------------
   ;@PSoC_UserCode_END@ (Do not change this line.)

; End of File USB_drv.asm

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美三级蜜桃2在线观看| 综合婷婷亚洲小说| 丝袜诱惑亚洲看片| 9久草视频在线视频精品| 日韩欧美国产一区二区在线播放 | 久久久国产精华| 亚洲第一会所有码转帖| 99久久婷婷国产精品综合| 欧美一级免费观看| 国产人伦精品一区二区| 国产精品一色哟哟哟| 精品国产网站在线观看| 日韩高清不卡在线| 日韩欧美中文一区| 国产一区二区美女诱惑| 久久精品免视看| 丁香五精品蜜臀久久久久99网站 | 亚洲欧美日韩一区二区| 成人av综合在线| 亚洲免费观看高清完整| 欧美性猛交xxxx黑人交| 天堂成人国产精品一区| 日韩视频免费观看高清在线视频| 亚洲成人自拍网| 精品国内二区三区| 韩国视频一区二区| 亚洲视频小说图片| 9191久久久久久久久久久| 免费观看一级特黄欧美大片| 久久综合狠狠综合| 在线亚洲免费视频| 国内精品视频一区二区三区八戒 | 欧美在线观看视频一区二区| 日韩中文字幕av电影| 日本一区二区成人在线| 在线观看av不卡| 成人中文字幕在线| 亚洲美女在线国产| 国产三级精品视频| 正在播放一区二区| 国产精品一线二线三线| 亚洲午夜久久久久| 欧美高清一级片在线| 福利电影一区二区| 免费成人性网站| 午夜精彩视频在线观看不卡| 日本一区二区三区dvd视频在线| 欧美日韩一区视频| av一区二区三区在线| 日本欧美大码aⅴ在线播放| 国产精品对白交换视频| 久久综合狠狠综合久久综合88| 91精品免费观看| 欧美二区在线观看| 91精品一区二区三区在线观看| 欧美制服丝袜第一页| 91日韩一区二区三区| 日本道在线观看一区二区| 99在线视频精品| 色诱亚洲精品久久久久久| 国产一区激情在线| 国产成人免费视频 | 国产欧美日韩在线| 国产亚洲自拍一区| 精品国产一区二区亚洲人成毛片 | 欧美日韩另类国产亚洲欧美一级| 色域天天综合网| 777午夜精品视频在线播放| 欧美日韩高清一区二区不卡 | 欧美视频在线一区二区三区| 在线观看国产91| 91精彩视频在线观看| 色婷婷综合在线| 欧美日韩一级黄| 精品国产伦理网| 26uuu久久天堂性欧美| 久久精品亚洲麻豆av一区二区| 91精品国产91热久久久做人人| 欧美大片在线观看一区| 中文字幕av不卡| 亚洲欧美成人一区二区三区| 一区二区国产视频| 亚洲成av人片观看| 国产精品自拍网站| 欧美精品 日韩| 亚洲欧美区自拍先锋| 日韩不卡一二三区| 99re在线精品| 精品欧美一区二区久久| 亚洲综合视频在线观看| 丁香网亚洲国际| 精品精品欲导航| 蜜桃一区二区三区在线| 日本高清视频一区二区| 精品国产欧美一区二区| 图片区小说区区亚洲影院| 99久久伊人网影院| 精品国产伦一区二区三区观看体验 | 欧美美女喷水视频| 成人精品视频一区二区三区尤物| 欧美在线播放高清精品| 日韩免费电影一区| 亚洲亚洲人成综合网络| 国产成人精品免费| 欧美日韩一区精品| 亚洲午夜羞羞片| 一本色道久久综合亚洲aⅴ蜜桃| 欧美一区二区三区白人| 久久在线观看免费| 精品一区二区三区视频在线观看| 欧美麻豆精品久久久久久| 国产在线不卡一区| 91精品国产综合久久香蕉麻豆| 26uuu另类欧美| 亚洲综合在线第一页| 极品少妇xxxx精品少妇| 亚洲精品在线免费观看视频| 免费观看91视频大全| 欧美色倩网站大全免费| 亚洲丶国产丶欧美一区二区三区| jlzzjlzz欧美大全| 亚洲欧美一区二区三区极速播放 | ww亚洲ww在线观看国产| 亚洲国产婷婷综合在线精品| 欧美四级电影在线观看| 一卡二卡三卡日韩欧美| 日韩欧美亚洲国产另类| 国产精品资源站在线| 国产婷婷精品av在线| 成人开心网精品视频| 亚洲精品老司机| 欧美一级黄色片| 成人网页在线观看| 一区二区三区在线免费| 69av一区二区三区| 麻豆成人免费电影| 亚洲欧洲成人精品av97| 欧美日韩国产成人在线免费| 蜜桃一区二区三区在线| 亚洲欧美在线aaa| 欧美日韩成人一区| 久久av资源网| 一二三区精品福利视频| 精品视频123区在线观看| 国产福利91精品一区| 日本人妖一区二区| 一区二区高清在线| 国产精品久久久久久久久免费丝袜| 在线亚洲精品福利网址导航| 国产综合一区二区| 日韩一区精品视频| 日韩黄色小视频| eeuss鲁一区二区三区| 欧美aaaaa成人免费观看视频| 久久一区二区视频| 蜜桃一区二区三区四区| 全部av―极品视觉盛宴亚洲| 亚洲最色的网站| 一区二区三区不卡视频在线观看| 91精品久久久久久久99蜜桃| 99精品视频一区二区| 国产成人在线视频免费播放| 日本欧美大码aⅴ在线播放| 亚洲一级二级在线| 亚洲成人免费在线| 天天综合网天天综合色| 午夜在线电影亚洲一区| 亚洲成人三级小说| 日本欧美在线看| 久久精品免费观看| 91美女片黄在线观看| 日本乱人伦一区| 欧美视频在线一区| 欧美精品三级在线观看| 3d动漫精品啪啪一区二区竹菊 | 这里只有精品99re| 精品国产一区二区三区久久久蜜月| 欧美一级片免费看| 中文字幕制服丝袜成人av | 精品粉嫩超白一线天av| 国产欧美一区二区三区在线老狼| 久久久www免费人成精品| 国产午夜亚洲精品午夜鲁丝片| 久久久亚洲国产美女国产盗摄| 久久久久一区二区三区四区| 亚洲欧美色一区| 久久99日本精品| 成人激情小说乱人伦| 欧美福利一区二区| 国产精品免费av| 石原莉奈在线亚洲三区| 国产精品白丝av| 欧美片网站yy| 1024成人网| 国产麻豆午夜三级精品| 一本到三区不卡视频| 精品1区2区3区| 亚洲国产精品一区二区尤物区| 亚洲最色的网站| 韩国女主播成人在线观看|